进程控制的主要任务:
进程控制是对系统中所有进程从创建、执行到撤销的全过程实行有效的管理和控制。
进程控制一般是由操作系统内核的相应程序(原语)来实现。通常,操作系统内核运行在系统态。
原语是由若干条指令组成的,用于完成特定功能的,具有原子性(不可分割)的子程序。它与一般过程的区别:它们是原子操作(Action Operation)为保证操作的正确性,原语在执行期间是不可被中断的。因此,规定在执行原语操作时要屏蔽中断,以保证原语操作的不可分割性。
通常将一些与硬件密切相关的模块、各种常用的设备驱动程序以及运行频率较高的模块安排在仅靠硬件的软件层中,并常驻内存,这部分被称为操作系统内核。
从进程管理的角度,操作系统内核主要实现对进程的创建、撤消以及通信管理等功能。
内核是通过执行各种原语操作来实现对进程的各种控制和管理功能的。
进程图是描述一个进程的家族关系的有向树,包括
下面给出一个进程树的例子:
导致进程的创建有以下四种典型的原因/事件:
123 根据需要由系统创建新的进程,4由进程自己创建的新进程。
进程的创建过程
导致进程终止的典型原因/事件:
越界错误
保护错
非法指令
特权指令错
运行超时
等待超时
算术运算错
I/O故障
如果进程在执行的过程中,发生了以上异常现象中的任何一种,系统都会及时停止这个进程的运行,以防止出现严重的后果。
进程终止的过程:
若处于执行状态,应立即终止该进程的执行,并置调度标志为真,指示该进程被终止后应重新进行调度;
若有子孙进程,应将其所有子孙进程予以终止,以防它们成为无法控制,或者是系统所不能识别的进程;
回收资源并归还(父进程或系统);
从所在的队列中移出被终止进程。(移到空闲队列中)
处于运行状态的进程,在其运行过程中期待某一事件发生,如等待键盘输入、等待磁盘数据传输完成、等待其它进程发送消息,当被等待的事件未发生时,由进程自己执行阻塞原语block,使自己由运行态变为阻塞态。可见,进程的阻塞是进程自身的一种主动行为。
进程阻塞过程,如下图:
当被阻塞进程所期待的事件出现时,例如,当进程提出I/O请求时,进程会进入到阻塞状态,但是不能让这个进程一直处于阻塞状态,等到其I/O操作完成时,那么系统就要采用唤醒原语wakeup唤醒这个处于阻塞的进程,以使它继续执行。
进程唤醒阻塞过程,如下图:
当有引起进程挂起的事件,系统利用挂起原语suspend()将指定进程或者处于阻塞状态的进程挂起。
当有发生激活进程的事件发生,若该进程在外存中已有足够的空间时,可将在外存上处于静止就绪的进程从外存调入内存,系统利用激活原语active()将指定进程激活。
进程控制原语与进程状态转换的对应,如下图:
原文:https://www.cnblogs.com/weiyalin/p/10801833.html