首页 进程控制
文章
取消

进程控制

进程和处理机管理的一个重要任务是进程控制,其就是系统使用一些具有特定功能的程序段来创建、撤销进程已经完成进程状态转换,从而达到多进程高效并发执行和协调、实现资源共享的目的。

一般地,把系统态下执行的某些具有特定功能的程序段成为原语,分为两类:

  • 机器指令级的,执行期间不允许中断;
  • 功能级的,作为原语的程序段不允许并发执行。

这两种原语都在系统态下执行,都是为了完成某个系统管理所需要的功能和被高层软件所调用。

在操作系统中,通常把进程控制用程序段做成原语,用于进程控制的原语有创建原语、撤销原语、阻塞原语和唤醒原语。

进程创建

进程创建有以下几种:

  1. 由系统程序模块统一创建。创建出来的进程之间的关系是平等的,他们之间一般不存在资源继承关系。
  2. 由父进程创建。创建出来的进程之间存在隶属关系,互相构成树形结构的家族关系。属于某个家族的一个进程可以继承父进程所拥有的资源。

上面的创建都必须调用创建原语来实现,流程如下:

vXMoad.png

进程撤销

有几种情况会导致进程被撤销:

  1. 进程已经完成功能正常终止;
  2. 由于某种错误导致异常终止;
  3. 祖先进程要求撤销某个子进程;

无论哪种情况下被撤销,进程都需要释放它所占用的各种资源和PCB结构本身,以利于资源的有效利用。当一个祖先进程撤销其某个子进程时,还需要审查该子进程是否还有自己的子孙进程,若有的话还需要撤销其子孙进程的PCB结构并释放它们所占有的资源。

撤销原语的实现过程如图:

vXBBp8.png

进程阻塞

阻塞原语在一个进程期待某一事件(如键盘输入数据、谢攀、其它进程发来数据等)发生,但发生条件尚不具备时被改进程自己调用来阻塞自己。阻塞原语在阻塞一个进程时由于该进程处于执行状态,故应先中断处理机和保存该进程的CPU现场。然后将被阻塞进程置“阻塞”状态后插入等待队列中,再转进程调度程序选择新的就绪程序投入运行。

阻塞原语流程:

vXDlEn.png

进程唤醒

当等待队列中的进程所等待的事件发生时,等待该事件的所有进程都将被唤醒。

一个处于阻塞状态的进程不可能自己唤醒自己,唤醒的方式有:

  • 系统进程唤醒。系统进程统一事件的发生并将“事件发生”这一消息通知等待进程,从而使得该进程因等待事件已发生而进入就绪队列。
  • 事件发生进程唤醒。

调用唤醒原语的进程称为唤醒进程,既可以为系统进程,也可以为事件发生进程。 唤醒原语首先将被唤醒进程从相应的等待队列中取出,将被唤醒进程置为就绪状态之后送入就绪队列。在把被唤醒进程送入就绪队列后,唤醒原语既可以返回原调用程序,也可以转向进程调度,以便让调度程序有机会选择一个合适的进程执行。

唤醒原语流程:

vXDx5q.png

本文由作者按照 CC BY 4.0 进行授权