进程(2)- 进程队列及管理

2019-07-14 09:31发布

并发系统中同时存在许多进程,有的处于就绪态,有的处于等待态,等待原因各不相同。进程的主要特征是由PCB 来刻画的,为了便于管理和调度,常常把各个进程的PCB用某种方法组织起来。用得较多的是用队列来组织PCB,下面先介绍这种方法。 一般说来,把处于同一状态(例如就绪态)的所有进程控制块链接在一起的数据结构称为进程队列(process queues),简称队列。同一状态进程的PCB 既可按先来先到的原则排成队列,也可以按优先数或其他原则排成队列。对于等待态的进程队列可以进一步细分,每一个进程按等待的原因进入相应的等待队列,例如,如果一个进程要求使用某个设备,而该设备已经被占用时,此进程就链接到与该设备相关的等待态队列中去。
当发生的某个事件使一个进程的状态发生变化时,这个进程就要退出所在的某个队列而排入到另一个队列中去。一个进程从一个所在的队列中退出的事件称为出队,相反,一个进程排入到一个指定的队列中的事件称为入队。处理器调度中负责入队和出队工作的功能模块称为队列管理模块,简称队列管理。图2给出了操作系统的队列管理和状态转换示意图。

队列管理是如何将一个进程从某个队列中移出而加入到另一个队列中去的?
现在来考虑一个进程的出队,假设进程Q 在某个队列中,它的前面是进程P,后面是进程R。进程Q 出队过程为:把Q 的前向指引元的内容送到R 的前向指引元中,把Q 的后向指引元的内容送到P 的后向指引元中。于是P 的后向指引元指向R,而R的前向指引元指向P,Q 就从队列中退出,通常还把Q 的后前向队列指引元置为自身的地址。类似的可实现队首进程,队尾进程的出队,或者让一个进程加入到队列中去。
此外,用来组织PCB 的方法为表格法。把所有进程的PCB 都组织在一个线性表中,进程调度时需要查找整个PCB表;也可以把相同状态进程的PCB组织在一个线性表中,系统有多个线性表,这样可缩短查表时间。