3.2.1 进程状态及状态转换
进程执行时的间断性决定了进程可能具有多种状态,对进程状态一般刻画为三态模型或五态模型。
1.三态模型
按进程在执行过程中的不同情况至少要定义三种最基本的进程状态:
(1)执行(running)态。进程占有处理器正在运行。在单处理机系统中,只有一个进程处于执行状态;在多处理机系统中,则有多个进程处于执行状态。
(2)就绪(ready)态。进程具备运行条件,等待系统分配处理器以便运行。在一个系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。
(3)阻塞(blocked)态。又称为等待(wait)态或睡眠(sleep)态,指正在执行的进程由于发生某事件而无法继续执行时,便放弃处理机而处于暂停状态即进程的执行受到阻塞,把这种暂停状态称为阻塞状态。使进程阻塞的典型事件有请求I/O,申请缓冲空间等。通常将这种处于阻塞状态的进程排成一个队列。有的系统则根据阻塞原因的不同而把处于阻塞状态的进程排成多个队列。
通常,一个进程在创建后将处于就绪状态。每个进程在执行过程中,任一时刻当且仅当处于上述三种状态之一。同时,在一个进程执行过程中,它的状态将会发生改变。图3-4表示进程的状态转换。
处于执行态的进程会因出现阻塞事件而进入阻塞态,当阻塞事件完成后,阻塞态进程转入就绪态,处理器调度将引发执行态和就绪态进程之间的切换。引起进程状态转换的具体原因有:
(1)执行态→阻塞态。因发生某事件而使进程的执行受阻,如进程请求访问某临界资源,而该资源正被其他进程访问时,使之无法继续执行,该进程将由执行状态转变为阻塞状态。
(2)阻塞态→就绪态。资源得到满足或某事件已经发生。
(3)执行态→就绪态。运行时间片到,或出现更高优先权进程。
(4)就绪态→执行态。CPU空闲时被调度选中一个就绪进程执行。
2.五态模型
在很多系统中,在三态模型的基础上会增加两个进程状态:创建态和终止态。
引入创建态和终止态对于进程管理来说是非常有用的。创建态对应于进程刚刚被创建的状态,创建一个进程要通过两个步骤:首先是为一个新进程创建必要的管理信息;然后让该进程进入就绪态。此时进程将处于创建态,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。必须指出的是,操作系统有时将根据系统性能或主存容量的限制推迟创建态进程的提交。
类似地,进程的终止也要通过两个步骤:首先是等待操作系统进行善后;然后退出主存。当一个进程到达自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结,它将进入终止态。进入终止态的进程以后不再执行,但依然保留在操作系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取,操作系统将删除该进程。引起进程状态转换的具体原因如下:
(1)NULL→创建态。一个新进程产生时,该进程处于创建状态。
(2)创建态→就绪态。当操作系统完成了进程创建的必要操作,并且当前系统的性能和内存的容量均允许。
(3)执行态→终止态。当一个进程到达自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结。
图3-4 进程三态模型及状态转换
(4)终止态→NULL。完成善后操作。
(5)就绪态→终止态。未在状态转换图中显示,但某些操作系统允许父进程终结子进程。
(6)阻塞态→终止态。未在状态转换图中显示,但某些操作系统允许父进程终结子进程。
3.具有挂起功能系统的进程状态及其转换
1)引入挂起状态的原因
在不少系统中进程只有上述五种状态,但在另一些系统中,又增加了一些新状态,最重要的是挂起状态。引入挂起状态的原因有:
(1)终端用户的请求。当终端用户在自己的程序运行期间发现有可疑问题时,希望暂时使自己的程序静止下来。亦即使正在执行的进程暂停执行;若此时用户进程正处于就绪状态而未执行,则该进程暂不接受调度,以便用户研究其执行情况或对程序进行修改。把这种静止状态称为挂起状态。(www.xing528.com)
(2)父进程请求。有时父进程希望挂起自己的某个子进程,以便考查和修改该子进程,或者协调各子进程间的活动。
(3)负荷调节的需要。当实时系统中的工作负荷较重,已可能影响对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。
(4)操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。
2)具有挂起功能的进程状态转换图(图3-5)
图3-5 具有挂起功能的进程状态转换图
在引入挂起状态后,又将增加从挂起状态到非挂起状态的转换;或者相反。可有以下几种情况:
(1)阻塞态→挂起阻塞态。如果当前不存在就绪进程,那么至少有一个阻塞态进程将被对换出去成为挂起阻塞态;操作系统根据当前资源状况和性能要求,可以决定把阻塞态进程对换出去成为挂起阻塞态。
(2)挂起阻塞态→挂起就绪态。引起进程等待的事件发生之后,相应的挂起阻塞态进程将转换为挂起就绪态。
(3)挂起就绪态→就绪态。当内存中没有就绪态进程,或者挂起就绪态进程具有比就绪态进程更高的优先级,系统将把挂起就绪态进程调回主存并转换成就绪态。
(4)就绪态→挂起就绪态。操作系统根据当前资源状况和性能要求,也可以决定把就绪态进程对换出去成为挂起就绪态。
(5)挂起阻塞态→阻塞态。当一个进程等待一个事件时,原则上不需要把它调入内存。但是在下面一种情况下,这一状态变化是可能的。当一个进程退出后,主存已经有了足够的自由空间,而某个挂起等待态进程具有较高的优先级并且操作系统已经得知导致它阻塞的事件即将结束,便可能发生这一状态。
3.2.2 进程控制块
为了描述和控制进程的运行,系统为每个进程定义了一个数据结构——进程控制块(process control block,PCB),它是进程实体的一部分,是操作系统中最重要的记录型数据结构。PCB中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息。PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。例如,当OS要调度某进程执行时,要从该进程的PCB中查出其现行状态及优先级;在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;进程在执行过程中,当需要和与之合作的进程实现同步、通信或访问文件时,也都需要访问PCB;当进程由于某种原因而暂停执行时,又须将其断点的处理机环境保存在PCB中。可见,在进程的整个生命期中,系统总是通过PCB对进程进行控制的,亦即系统是根据进程的PCB感知到该进程的存在的。所以说,PCB是进程存在的唯一标志。
当系统创建一个新进程时,就为它建立了一个PCB;进程结束时又回收其PCB,进程也随之消亡。PCB可以被操作系统中的多个模块读取或修改,如被调度程序、资源分配程序、中断处理程序以及监督和分析程序等读取或修改。因为PCB经常被系统访问,尤其是被运行频率很高的进程及分派程序访问,故PCB应常驻内存。系统将所有的PCB组织成若干个链表(或队列),存放在操作系统中专门开辟的PCB区内。例如在Linux系统中用task_struct数据结构来描述每个进程的PCB,在Windows操作系统中则使用一个执行体进程块(EPROCESS)来表示进程对象的基本属性。
1.进程控制块中的信息
(1)标识信息。标识信息用于唯一地标识一个进程,分为用户使用的外部标识符和系统使用的内部标识号。系统中的所有进程都被赋予唯一的、内部使用的数值型进程号,它通常是一个进程的序号。设置内部标识符主要是为了方便系统使用;外部标识符由创建者提供,通常由字母、数字组成,往往是用户(进程)在访问该进程时使用。为了描述进程的家族关系,还应设置父进程标识、子进程标识。此外还可设置用户标识,以指示拥有该进程的用户。
(2)现场信息。现场信息用于保留进程在运行时存放在处理器现场中的各种信息。进程在让出处理器时,必须将此时的现场信息保存到它的PCB中,而当此进程恢复运行时也应恢复处理器现场。现场信息包括:通用寄存器内容、指令计数器(其中存放了要访问的下一条指令的地址)、程序状态字(其中含有状态信息,如条件码、执行方式、中断屏蔽标志等)、用户栈指针(指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址,栈指针指向该栈的栈顶)。
(3)调度信息。PCB中还存放一些与进程调度和进程对换有关的信息,包括进程状态、进程优先级、进程调度所需的其他信息以及进程由执行状态转变为阻塞状态所等待发生的事件。
(4)控制信息。控制信息用于管理和调度进程,包括:①进程调度的相关信息,如进程状态、等待事件和等待原因、进程优先级、队列指针等;②进程组成信息,如正文段指针、数据段指针;③进程之间的族系信息,如指向父/子/兄弟进程的指针;④进程间通信信息,如消息队列指针、所使用的信号量和锁;⑤进程段/页表指针、进程映像在辅助存储器中的地址;⑥CPU的占有和使用信息,如时间片剩余量,已占用CPU时间,进程已执行时间总和,定时器信息,记账信息;⑦进程特权信息,如主存访问权限和处理器特权;⑧资源清单,如进程所需的全部资源,已经分得的资源,比如主存、设备、打开文件表等。
2.进程控制块的组织方式
在一个系统中,通常可拥有数十个、数百个乃至数千个PCB。为了能对它们加以有效的管理,应该用适当的方式将这些PCB组织起来。目前常用的组织方式有以下两种。
(1)链接方式。这是把具有同一状态的PCB,用其中的链接字链接成一个队列。这样,可以形成就绪队列、若干个阻塞队列和空白队列等。对其中的就绪队列常按进程优先级的高低排列,把优先级高的进程的PCB排在队列前面。此外,也可根据阻塞原因的不同把处于阻塞状态的进程的PCB排成等待I/O操作完成的队列和等待分配内存的队列等。图3-6示出了这种链接队列的组织方式。
(2)索引方式。系统根据所有进程的状态建立几张索引表,如就绪索引表、阻塞索引表等,并把各索引表在内存的首地址记录在内存的一些专用单元中。在每个索引表的表目中,记录具有相应状态的某个PCB在PCB表中的地址。图3-7示出了索引方式的PCB组织。
图3-6 PCB链接队列
图3-7 索引方式组织的PCB
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。