【Linux】-一文带你深刻理解操作系统和进程的由来

在这里插入图片描述
作者:小树苗渴望变成参天大树
作者宣言:认真写好每一篇博客
作者gitee:gitee✨
作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法

如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!

文章目录

  • 前言
  • 一、先谈硬件
  • 二、再谈软件
  • 三、再谈进程
  • 四、总结


前言

我们在前面的博客中,把Linux相关的指令权限,工具都讲解完毕了,你可以在Linux下完成一些操作了,今天我们就才正式开始学习Linux,首先Linux是一款操作系统,和Windows一样,我们要学习操作系统,再来学习进程,笼统的来说操作系统是方便人和计算机硬件进行打交道的,我们的计算最终都是要通过硬件来实现的,所以我们前期必须把理论基础打好,后面才可以更好的学习,接下来我就给大家开始介绍操作系统和进程


我们先谈硬件,在谈软件,最后在谈进程,一层一层的理解

一、先谈硬件

首先我们要认识一个人,那就是冯诺依曼,他是我们计算机之父,大家可以去百度去查查他的事迹,我们的计算机就是依赖他的体系结构进行创造的,也叫冯诺依曼体系结构,我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系我们来通过画图,让大家理解:
【Linux】-一文带你深刻理解操作系统和进程的由来_第1张图片
接下来我将给大家介绍为什么要有存储器:
【Linux】-一文带你深刻理解操作系统和进程的由来_第2张图片
下面我将通过这个应用场景再来带大家理解一个冯诺依曼体系结构的工作原理:

从你登录上qq开始和某位朋友聊天开始,数据的流动过程。从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。如果是在qq上发送文件呢?

【Linux】-一文带你深刻理解操作系统和进程的由来_第3张图片

上面的一系列操作都是由操作系统去统筹协调,我们来看下一个专题介绍

二、再谈软件

我们的操作系统就是一款软件,是来控制我们刚才的各个单元的使用,每个硬件单元都有对应的功能,就好比银行里面的管理层,由主管,财务等等,但是这些人怎么干,什么时候干,都需要有一个人来进行领导,再我们的计算机里面也是,这个领导的人就是操作系统

他是一款管理软件(可以管理软件也可以管理硬件)
硬件什么时候控制数据,怎么使用数据,软件什么时后加载到内存里面都是由操作系统控制的。

我们先来看看概念:
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库,shell程序等等)

接下来从两个方面再细细给大家介绍:
(1)为什么有操作系统
我们的计算机其实是一个层状结构:
【Linux】-一文带你深刻理解操作系统和进程的由来_第4张图片

通过上面的描述应该知道为什么要有操作系统了,就跟冯诺依曼体系结构为什么要有存储器是类似的道理,都是起到一个中和的作用,操作系统时一个管理者,那他怎么进行管理的呢??

(2)操作系统如何进行管理的?
这方面的内容我要通过一个现实案例让大家更好的理解:

通过上面的图解,我已经把操作系统的知识给大家铺垫好,但是我还要在把一个知识补充完毕,上面说为什么要有操作系统的时候,提到的系统调用,具体什么是系统调用呢??

在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用

那我们平时写的程序,例如printf函数他是直接对标操作系统的吗??答案肯定不是的,我们的printf类似都会放在我们对应的库函数里面,这样库函数通过系统接口的调用来达到和操作系统交互的一个关系,为什么还要通过系统接口这个中间值来过度呢??系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。最终系统调用和库函数形成一个上下层的调用和被调用的关系,系统接口在下,库函数在上。通过计算机层状结构体我们也可以理解。

接下来我们才正式开始讲解什么是进程:

三、再谈进程

我们的一个程序要跑起来,必须先加载到内存上,这个过程就叫进程,我们可以通过我们的任务管理器看看

进程也叫做任务,大家也可以看到自己有那些进程在跑,我们在Linux上在看看:
【Linux】-一文带你深刻理解操作系统和进程的由来_第5张图片
我就把我自己运行的程序大家展示出来了,我们运行了两个程序,就要两个进程,一些参数看不到没有关系,后期会介绍,我们刚才只是说了什么样的叫进程,但是进程是什么还没有说,接下来我们就开始讲解什么是进程:

相信大家对进程的概念已经了解了,接下来就来谈谈Linux上的进程是什么样的


我们所以的操作系统的进程都是像我刚才说的那种模式,先描述再组织,这是计算机发展的规则,都叫PCB,但是每款操作系统再实现上还是有所差异的,再Linux上进程不叫PCB,而叫task_struct,他是PCB的一种,接下里我们就来看看什么是task_struct:
Linux操作系统下的PCB是: task_struct
在Linux中描述进程的结构体叫做task_struct,它会被装载到RAM(内存)里并且包含着进程的信息,然后再采用最基本的双向链表的方式组织起来,再操作系统中采用的数据结构可能不是单纯的,像Linux中最基本的是采用双向链表,每个节点可能又是一种数据,非常的复杂。

task_ struct内容分类:

标示符: 描述本进程的唯一标示符,用来区别其他进程。
状态: 任务状态,退出代码,退出信号等。
优先级: 相对于其他进程的优先级。
程序计数器: 程序中即将被执行的下一条指令的地址。
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
其他信息

大家先了解一下就好了,接下来就具体来带大家看看Linux中的进程是咋样的

【Linux】-一文带你深刻理解操作系统和进程的由来_第6张图片
我们可以看到我们由两个进程,第三个是什么呢??因为我们是通过管道将进程筛选出来的,grep也是程序,也形成的了进程,刚好和我们想要的进程名冲突了所以也显示出来了,我们先不用管,我们看上面的两个就好了,我们举要先了解两耳光就好了进程id(PID),父进程id(PPID),目前只看第一个,这个进程编号,是进程的表示符,我们可以通过ls /proc来查看进程:
【Linux】-一文带你深刻理解操作系统和进程的由来_第7张图片
其余的也是系统进程,启动我们的机器,操作系统就有了这些进程,我们来具体查看这些进程里面都有一些什么:
【Linux】-一文带你深刻理解操作系统和进程的由来_第8张图片
这些就是我刚才写的程序,里面包含的进程属性,还是非常多的,我们现在只来看其中两个属性,其他属性以后在说

exe:表示程序再那个路径下面
cwd表示:当前进程的工作目录

解释一下当前目录:我们进行touch的时候,为什么创建的文件再当前目录,原因就是touch也是程序,是程序就要形成进程,因为有了cwd的存在,我们touch test.c其实就是放在cwd/test.c下面了,所以我们再该目录下创建文件,就默认放在当前目录下了,这下大家应该明白了吧

四、总结

这篇博主花了一定的时间,就是想把原理给大家讲解清楚,这样才可以方便以后的学习,对操作系统和对进程模糊的小伙伴这下应该非常清楚了,希望大家下来可以更好的学习到进程相关的知识,我们下篇再见
【Linux】-一文带你深刻理解操作系统和进程的由来_第9张图片

你可能感兴趣的:(Linux,linux,运维,服务器)