2.1操作系统-进程管理:进程基本概念、进程与程序、进程与线程、进程的状态、进程三态模型、进程五态模型
- 进程基本概念
- 进程与程序
- 进程与线程
- 进程的状态
- 进程三态模型
- 进程五态模型
进程基本概念
进程是程序在一个数据集合上运行的过程(运行的过程,是动态的),它是系统进行资源分配和调度的一个独立单位。它有程序块、进程控制块(PCB)和数据块三部分组成。
PCB:PCB是进程存在的唯一标志。内容包含进程标识符、状态、位置信息、控制信息、队列指针(它会由队列的形式来链接同一状态的进程,然后以索引的方式指向这个队列)、优先级(记录进程的优先级,在调度的过程当中,可以有按优先级调度的算法)、现场保护区等。
进程与程序
进程与程序的区别:进程是程序的一次执行过程,没有程序就没有进程,一定是先有程序,程序执行起来才有进程。
程序是一个静态的概念,而进程是一个动态的概念,它由创建而产生,完成任务后因撤销而消亡;进程是系统进行资源分配和调度的独立单位,而程序不是。
进程与线程
进程的两个基本属性:可拥有资源的独立单位;可独立调度和分配资源的资本单位。
而线程仅仅可以被独立调度,其余属性都没有。多个线程在某些情况下是可以共享一些信息和资源的。
进程的状态
软考中这进程状态分为大致两种模型,不考虑挂起的三态模型,考虑挂起的五态模型。三态模型、五态模型这两种都是考虑进程运行之后,是不会被其他进程来抢占的,也就是非抢占式的CPU调度过程。
进程三态模型
三态模型是进程状态的基础,它将整个进程运行过程中分成阻塞、就绪、运行三种状态。需要注意的是:阻塞态不能直接回到运行态,就绪态也不能直接到阻塞态。
三态模型的划分依据是:它会将CPU和其它资源进行归类,进程是资源分配和调度的基本单位,调度的情况是由CPU来调度进程的,除CPU之外,还有一些其它资源,这样将资源分成了两大类,一类是CPU资源,一类是其它资源,相比而言,CPU资源更为重要和珍贵。所以划分进程状态的时候,会根据资源状态的情况来进行划分。
运行状态:当所有资源都具备(即CPU资源和其它资源都OK了)的情况下,我们认为进程被CPU调度了,调度的过程就会进入运行状态。
就绪状态:当非CPU资源就绪了,只剩CPU资源没有就绪,我们认为进程进入就绪状态。就绪状态什么时候进入运行状态?等到CPU调度它就会进入运行状态。
运行状态→就绪状态→运行状态:运行状态的进程什么时候会缺失CPU资源?我们认为一个进程不会长时间占据所有CPU资源,我们会把CPU它的使用时间划分成一些小的片段,分发出去,那分发的时间片,一个进程用完自己的时间片的时候,会回到就绪队列去排队,等着下一次的调度。
阻塞状态:当CPU资源不足,非CPU资源也不足就认为该进程进入阻塞状态,或者叫做等待状态。这种情况下,它需要等待某个资源,我们会把它描述为“在等待某个事件的情况下,它是处于等待或阻塞状态的”,而等待的这个事件发生之后,它就会进入就绪状态。那么是否存在CPU资源有了,非CPU没有准备就绪的情况?这种情况是不做考虑的。因为CPU资源是非常珍贵的资源,在其它条件满足之前,是不会考虑将CPU分配给它的,所以会发现阻塞态没有反向进入运行态的过程,包括已经进入就绪态的进程,一般它的资源也不会被其它阻塞进程抢占走。
三态模型,举个例子:
就绪状态→运行状态→就绪状态:进程去医院看病,医生的诊断是最重要的,可以看成是CPU,但是并不是进程去了就可以直接找医生问诊了,得预约、挂号,然后排队等待医生叫号,等待医生叫号。这个过程可以看成进程是就绪状态。医生叫号到进程,进程进入运行状态。在计算机中,还需要考虑单个进程长时间执行不完(该进程分配的时间片已用完,但还未执行完),会被CPU剔出,重新回到就绪状态排队等待CPU下一次调度的情况。
运行状态→阻塞状态→就绪状态:医生叫号,叫到进程,进程进入运行状态;然后医生开始诊断进程,抽血化验、拍片等检查你先做一下,出结果了再来复诊,此时进程的结果没出来,需要等待各项检查结果打印出来,这个等待的过程进程处于阻塞或等待状态;结果出来了,打印好了,去找医生复诊,到前台再次取号排队,等待医生叫号,进入就绪状态。
进程五态模型
在三态模型基础上,会衍生出其它模型,比如五态模型、七态模型,甚至五态模型也有多种形式。软考中涉及比较多的是挂起形成的五态模型。
挂起所考虑的是内存的问题,进程创建比较多的时候,系统资源,尤其是内存资源可能无法满足进程运行的要求。比如:春运的时候,火车站人特别多,会要求开车前两小时内的人开始进站候车检票,其他人在外面。这个过程就是内存资源不足的时候将某些进程挂起,放到磁盘兑换区里面,暂时不参与调度,这个挂起的过程,可以理解为从内存放到磁盘的过程。
哪些状态有挂起呢?在三态模型的基础上,运行态、就绪态、阻塞态都可以挂起,挂起的结果不一样。阻塞状态挂起前叫活跃阻塞,挂起后叫静止阻塞,静止之后的阻塞状态,必须恢复或激活才能恢复到达活跃状态,活跃状态表示进程是已经活跃在内存当中了,如果内存资源不足,就会挂起,放到磁盘区域,进入静止阻塞状态。
活跃阻塞和静止阻塞都可以等待事件发生,进入各自的就绪态(活跃就绪和静止就绪),活跃就绪和静止就绪表示就绪状态是发生存在内存中还是磁盘中,静止就绪同样需要恢复或激活才能进入活跃就绪状态。
静止就绪是不能直接被CPU调度的,必须激活进入活跃就绪状态才能被调度。
运行态同样可以被挂起,被挂起后会进入静止就绪态。
一般来讲,挂起的原因可能是系统出现故障、或者用户调试程序,挂起本身也可以由程序员的代码进行控制。