这次笔记重点解决三个问题,另外,也将引申出后面的知识点
为什么要建立“进程”这个概念
什么是进程
进程是如何工作的

(一个简单的目录)
进程——PCB——进程映像——进程状态类型——状态具体执行

首先要搞清楚,如果要让计算机做特定的任务需要干嘛?是不是需要给他下达命令,比如播放一个电影,每一道命令都可以被计算机分解为很多可执行的步骤,每一个步骤我们可以称为执行了一个程序,而“执行程序”就是我们所称的“进程”

从不同的角度,可以给出不同的定义
官方定义1:进程是程序的一次执行过程
官方定义2:进程是一个程序及其数据在处理机上顺序执行时所发生的活动

无论是哪种定义,都可以看出, 进程是运行 着的,他在做某些事情
那么要保证他能够平稳运行,我们需要对其进行控制

所以我们使用一种专门的数据结构——进程控制块(process control block,PCB),PCB用来描述进程的基本情况和运行状态

程序段,相关数据段,以及PCB三部分就构成了进程的实体(我们称为进程映像),此时是静态的。 特别注意的是,说进程是运行中的程序不是很准确,因为 程序是进程的一部分 。而且由于程序段和相关数据段事先其实已经准备好了,所以我们说“进程创建”的时候,其实就是创建PCB

现在我们可以有一个更直观的定义: 进程是进程映像的运行过程,是系统进行资源分配和调度的一个基本单位。
这里的系统资源主要是指“时间”资源,比如把CPU的时间分给你,那么你就可以用他来计算
基本单位的意义表示系统不再分配资源给比进程还小的东西(比如我们以后会讲的线程)

好,如果你记住了进程映像的结构,那么接下来,我们看看他运行起来是怎么样的。我们知道运动中的人是千姿百态的,进程既然是动态的,必然也有多重状态
(网上盗的图)
我们发现,进程有五种状态
新的(新建),就绪,运行,等待(阻塞),终止
我比较喜欢用新建和阻塞~

其他的可以顾名思义,就绪和等待的区别在于
就绪是只差CPU资源,一旦有,马上就可以运行
等待是因为各种原因无法运行,比如中断,等待I/O等

等待状态只能得到其他资源变成就绪状态,否则一直等下去(如果大家都是等待状态,就会造成一个谁也运行不了的窘境,这将会造成后面我们要讲的一个重点—— 死锁
就绪状态只能得到CPU资源变成运行状态,否则一直等下去(长期如此,对于该进程会造成一个问题,叫做“ 饥饿 ”)
而运行状态可以因为各种原因变成就绪或等待状态


记住了他们之间的顺序关系了吗?现在我们来一条一条分析这些状态到底在干嘛

进程新建:进程是怎么创建出来的?
答:是由另一个进程创建的,这个进程叫做父进程,新建的进程叫做子进程

你应该还记得,我刚刚讲了进程创建本质上是PCB的创建
进程创建过程如下:
1为新进程创建一个唯一的进程标识号,并申请一个空白PCB,如果申请失败,就标识创建失败
(就像国家不给批一样)
2为进程分配资源,变成新进程的程序和数据,如果没有资源,此时会处于等待,一直到资源出现为止(得到审批,就算合法)
3初始化PCB,构建全新的PCB
4完成了3PCB就算构建完成,各种资源到齐,接下来干嘛呢?就差CPU资源啦,所以将会进入就绪状态,马上就可以执行

简单归纳一下进程从出生到运行,需要标识符——PCB构建资源——CPU运行资源,类比一下汽车就是批准挂车牌,建造材料和汽油

现在我们的小车车已经开始在跑啦,会不会出问题呢?当然会!半路没油,强盗抢油,前方堵车都会让他停下来,除了和油相关的情况之外,其他的突发事件都会导致进程进入阻塞状态

进程阻塞过程如下
1找到将要被阻塞进程的标识号对应的PCB
2弱该进程为运行状态,就保护现场,停止运行,转换为阻塞状态
3将PCB插入相应事件的阻等待队列中

如果解除了突发事件,比如其他资源到了,就将进程唤醒
1从该事件的等待队列中找到相应进程的PCB
2从等待队列移出,转换状态为就绪状态
3把该PCB插到就绪队列,等待进程调度程序调度

之所以要写上面专业一点是避免由于通俗语言导致的理解偏差,免得误人子弟。如果你是第一次学习的话可以直接看通俗语言写的,让你快速对进程有感性认识。
不管是进程创建还是阻塞还是唤醒,都要先把车牌找到,然后把你放到对应状态去排队,只有在就绪队列中,CPU分给你,你才能跑

当我们的车终于完成了旅途,或是半路被炸了,都将面临一个结局——终止
我想你也大概能猜到我们的手段了吧,不过这次略有不同,如果是完成路途(正常运行结束还好说,万一半路被炸呢(异常终止),不清楚犯人
什么情况下干的,所以需要判断被害者当时的情况,比如有没有遗产 可供大家分享(手动滑稽)

进程终止过程
1根据被终止进程的PCB,读出该进程当前的状态
2如果是运行状态,立刻终止该进程的执行,把分配给他的CPU资源分给其他进程
3如果进程还有子进程,则将所有子进程终止
4回收所有该进程拥有的资源,要么给其父进程,要么收回操作系统
5将该PCB删除
有点残忍,但是没办法,你对社会没用了~

好今天我们讲了进程的定义,结构,运行状态

还记得我们的三个问题吗?
为什么要建立“进程”这个概念
什么是进程
进程是如何工作的

你现在应该可以回答前两个
第三个你目前只能回答他是怎么运行的,他怎么办事的还不清楚,但是我们知道,很多事情光靠一个进程是完成不了的

操作系统的特征是并发和共享,一个系统一个时间内是不可能只执行一个进程的,那么进程之间是如何完成并发和共享然后做成一件事的呢?我们下次再讨论