前言
在了解进程的概念之前,需要先提前做一些知识铺垫。因此该篇文章主要是为后面的进程概念等文章,做一个前置知识的铺垫,比如冯诺依曼体系,操作系统。了解完这些,才能更好的去理解什么是进程。
1. 冯诺依曼体系
1.1 基本构成
在冯诺依曼体系结构的组成的中,我们需要明确几个概念。
其中的存储器指的是 内存,而不是 外存(磁盘等)
其中的输入设备、输出设备称为 外设。
所谓的输入设备就例如:鼠标、键盘、硬盘,网卡;
输出设备例如:显示器、音响、硬盘、网卡
(既可以往硬盘写入数据,也可以从硬盘读取数据;既可以通过网卡传输数据,也可以通过网卡接收数据。因此这两个既是输入也是输出设备)
而中央处理器(cpu)则是由运算器(负责数据计算:算术/逻辑计算)和控制器(负责计算机工作流程的控制)组成。
1.2 为什么是这样构成的
可能刚开始接触计算机的都会有一个疑问,就是为什么要有存储器这一部分,不可以直接省略掉吗?
我们都知道的常识是,cpu 的速度 远大于 内存的速度,内存的速度 远大于 外设的速度
而冯诺依曼体系结构的设计原理就涉及到整机运行效率的问题,以 “ 木桶原理 ” 为例子:
这只木桶的容量,并不是由他的最高位置决定的,而是由最低高度决定的。因此,在计算机当中同理,整机的运行效率也是由最低的那一环决定的!
这么一听,好像也跟 加不加 存储器 没什么关系?
所以我们要知道的是,如果我们的计算机体系当中,没有了内存这一环节,那么我们的 cpu 就需要直接与 外设 进行交互,而外设的速度比较慢,这样整机运行效率也就比较低,而有了内存作为“中转站”,在外设将数据加载到内存的同时,cpu可以先处理已经在内存中加载好的其它数据!那么整个运行流程就不再是 串行,而是 并行 的了!而各个部件直接的差距也不会那么夸张,结合上 每个部件的单价造价格等因素,最终才确定了这套冯诺依曼体系,并且运行效率也是比较高的一种!价格也合理,才能够作为民用产品在市场上进行推广普及!
1.3 大致的工作流程
因此在冯诺依曼的体系结构中,就注定了,想要处理存储在磁盘中的数据,就必须先经过 内存,由 内存在与 cpu 进行交互,数据处理完成之后,同样由 cpu 加载回内存,内存在根据需求,传输到各种输出设备上!
以微信聊天为例子(不考虑网络传输环节,只针对冯诺依曼体系的运行过程),我们在运行微信程序之前,微信程序的源代码 + 数据,必须要保证,已经加载到内存当中,只有达到了这个前提,我们才能够运行启动微信!而我们点击发送信息之后,cpu 会从内存中读取相应的数据进行信息处理(信息打包,加密等操作),处理完成之后,再传输回到内存中,由内存再将处理完的数据包,传输到网卡设备中,同时显示在显示器上。
同样的!接收数据也是如此,当我们接收到对方的信息,绝对不是 cpu 或者 内存直接获取的信息!而是由网卡接收数据之后,经过内存,再加载到 cpu 进行解密等操作,然后再由 cpu 返回到内存,内存再根据实际需求,写入到磁盘或者显示到显示器等操作!
再者,我们微信中的文档文件,它并不会在接收之后就立马打开,而是需要我们手动运行,这也就很好的印证了,当我们接收到各种文件数据的时候,我们的数据都是经由网卡加载到内存中,而不是 cpu !
2. 操作系统
在了解操作系统前,我们需要明确,操作系统是一款进行管理的软件! 你没听错,它也是一款软件!而它的管理对象是 硬件 和 软件 !
软件 还 可以管理 软件吗?? ---- 难道你在公司中不是被你的领导所管理吗??难道你的领导不是人吗??所以同理,人可以管人,为什么软件 不可以 管理 软件 呢?!
2.1 为什么要有操作系统
如上图是一个操作系统的层次图,其中的底层硬件,就是用冯诺依曼体系结构组成的,而所有的硬件,要被操作系统控制的话(被软件访问也同理),每一个硬件豆需要有与其匹配的驱动程序才能够被正常的访问!
而操作系统层分为四大板块:内存管理,进程管理,文件管理,驱动管理。
而其中操作系统所承担的工作就是,需要帮助用户,管理好操作系统以下的软硬件资源!
这就好比在一家企业中,企业老板需要管理好企业中的硬件资源(及企业的设备等),也需要管理好底下的人,也就是所谓的软件资源!
那问题是:为什么操作系统要管理好软硬件资源呢??
回答这个问题的时候,我们只需要知道如果管理的不好,会带来什么影响?
----- 当软硬件资源不被管理好的时候,就好比银行的设备三天蓝屏七次,底下的业务人员专业素养也不够高,银行还时不时丢了几万块钱,安保工作做的也不好!那这样的银行,有人会感来吗?!又好比,今天我打 LOL,十分钟蓝屏一次,10秒钟掉帧一次,你能忍吗?!所以 操作系统需要给用户提供 稳定、高校、安全的 运行环境! 这样才会有用户使用你这个操作系统!
而操作系统通过管理好底层的软硬件资源,这是手段,目的是为了给用户提供一个良好的运行环境!
那又有一个问题:为什么操作系统要帮助用户管理好软硬件资源?为什么不可以是用户直接管理?
a. 最直接的原因是,因为用户不擅长!用户不会直接控制硬件,以此来达到自己的目的。
b. 本质原因:因为操作系统的设计者并不相信除了 他 自己以外的任何人!
这个道理很简单,为什么银行的柜台都是封闭的空间,只留了一个小窗口作为与客户交互的通道!本质原因不还是因为银行不信任客户吗?!假设今天银行的柜台不再是封闭的,那么,我是不是可以直接越过柜台的业务人员,直接操作,我给了银行1000块钱,但是我自己往我的账户加了2000块钱,这件事合理吗?所以操作系统也是如此!但是在封闭的同时,操作系统也提供了各种系统接口,方便后续人员在基于操作系统之上进行二次开发!
银行存在的最大价值不是在于银行是封闭的,而在于银行可以为客户提供服务!同理,操作系统存在的最大价值也不是把软硬件资源管理的多好多棒,而是能够为上层用户提供一个稳定、高效、安全的运行环境!
所以操作系统在保证自己数据安全的前提下,为了保证给用户提供服务,操作系统以接口的方式给用户提供调用的入口,以此来获取操作系统的数据。
而所谓的接口,是操作系统提供的,用 c 语言实现的函数调用。就例如银行又要在保证自己资金安全的前提下,为客户提供服务所提供的窗口,这种窗口就是银行级别的 “ 系统调用 ” 。而只要有调用接口,就要有传参、返回值。就好比你要去银行取钱,你必须要提供个人信息,账户信息等,在银行做完各种验证之后,你就可以拿到你想要的结果(数据)。因此操作系统也如此,作为用户,可以在操作系统所提供的调用接口中,传入一些参数,最终访问到自己需要的数据,完成上层开发!所以这种为用户提供访问的接口的调用,即 系统调用!而所有访问系统的行为,都只能通过系统调用完成!
所以就有一些业内顶尖的开发工程师,结合自己的开发语言,加上系统调用,封装成各种库,供程序员进行二次开发。
例如:C 语言中的 printf 也是通过封装系统调用来实现的!
这方面的理解可以参考 shell 外壳的理解 这篇文章。
2.1 操作系统是如何管理的
现在我们只知道了为什么要有操作系统,但既然说,操作系统是一款管理的软件,那它是如何管理的呢? ---- 先组织,再描述!
那么这句话,要怎么理解呢?
故事时刻:王五作为某个学院的校长,自然是学校的最高管理者。而张三等人作为学生,在学校这种场合,自然是最底层的角色。在大学里,除了新生入学典礼,可能大家还见过校长之外,基本就不会再见到这种角色的人物了!那么,当学校要选拔几名同学代表学校去参加 CCPC 省赛时,这件事肯定不需要校长出面去选拔,对吧?他只要做出这个决策 “ 某某某,今年我们学校要组织队伍去参加 CCPC 省赛,你安排一下 ”。就这样,再由下一层的管理者(假设系主任),进行组织校内选拔赛,再而确定负责人,最终只需要统计比赛成绩,并且进行筛选,那么这件事就完成了!
而在上述这个故事中,所谓的校长,就是我们的操作系统,他只负责做决策!而系主任是执行者的角色,也就是驱动程序,他负责执行校长(也即操作系统)所发出的决策!而我们作为学校参加比赛,也就是被管理的软硬件资源!
所以操作系统怎么管理的软硬件资源呢? — 只需要通过驱动程序获取各个软硬件资源的状态,再由驱动程序交给操作系统,那么操作系统就能够完成管理的工作(也即决策)!例如张三的电脑今天突然上不了网,驱动程序检查到网卡的问题之后,会报告给操作系统,而操作系统经过一番检查确定不是自己的问题之后,就会向用户给予反馈报错。
那么在这件事中,管理者是校长,张三是学生,假设张三在选拔赛中名列前茅,成为集训队的一员,那他跟校长需要见面吗? ---- 不需要!假设他需要跟校长见面,那么校长也只是来了解选拔赛最终的情况(也即选拔的人员、成绩等信息),所以我们可以理解为,见面,那只是为了获取信息,只是获取信息的一种途径!而想要获取信息,不一定需要见面!校长作为学院的最高管理者,他要获取学生的信息何其简单,他只需要跟下一层的管理者发出决策 “ 把这次选拔赛的最终确定名单给我 ”,那么就会有执行者的角色去帮他执行这件事!根本不需要他操心,更不需要他亲自去看选拔赛,与学生见面。
所以,管理者 与 被管理者 是不需要见面的。
接着,我们再把角色细分一下:
而选拔赛,系主任会安排监考老师去管控学生的比赛秩序,作为选拔赛的管理者,系主任并不需要与学生见面,那问题来了,那他如何做好管理呢? ---- 只需要获得管理所需要的信息,使其能够在未来进行管理决策即可。所以管理的本质,就是通过对 数据 的管理,来达到对 人 的管理!
那么在这种管理者 和 被管理者 不见面的前提下,管理者如何获取管理所需信息呢? ---- 通过执行者
在确定了选拔赛的时间等信息后,该比赛的管理者就继续确定了比赛的负责人,而所谓的负责人,就是这个局部的执行者!系主任想要获取管理所需的信息,只需要向下做出决策 “ 参加比赛的学生名单给我 ” 即可。
面对这么多学生,如同面对这么多数据之下,此刻,压力给到系主任,好在系主任是一个资深程序员!他首先发现每个学生的信息都是固定的属性(比如姓名,学号等),所以系主任就将学生的各种信息描述成一个结构体类型!
struct Student
{
char id[];
char name[];
char sex[];
.....
struct Student* next;
}
把学生信息定义成结构体,再以链表的数据结构串起来,那么之后在筛选比赛结果的时候,只需要对这个学生信息链表结构进行管理即可!
那么之后,系主任对学生的管理工作 就变成了 对数据结构的增删查改! 最后系主任作为校长这个管理者的执行者,他只需要将他对比赛管理的结果,向上反馈给校长即可!
所以类似这种把学生描述成结构体类型的过程,称为 描述的过程,把每个结构体结点连接一起,构成某种数据结构的过程,称为 组织的过程。这就是,先描述,再组织!
总结:在这种模式下,操作系统想要管理底层的软硬件资源,那么只需要对数据进行管理即可,而软硬件资源的数据太过庞大,所以就需要以 “ 先组织,再描述 ” 的模式进行管理,描述清楚底层的软硬件设备,比如 struct dev { }
,将各种设备定义成描述结构体对象,再将各个对象通过各种数据结构组织起来,那么操作系统在对底层的软硬件资源进行管理的时候,就转换成对特定数据结构的增删查改!
因此只需要记住,在操作系统中,管理任何对象,最终都可以转换成对某种数据结构的增删查改!
由于篇幅过长的问题,因此进程概念会分成多篇博客进行介绍。
如果感觉该篇文章给你带来了收获,可以 点赞👍 + 收藏⭐️ + 关注➕ 支持一下!
感谢各位观看!