什么是进程控制?
进程控制的主要功能是:对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
简单来说,就是进程控制就是要现实进程状态的转换。
那如何实现进程的控制呢? 答案就是使用 原语来实现,如下图:

在之前我们有提到过,原语 是具有原子性操作的,运行必须一气呵成,那如果没有原子性,会发生什么事情呢? 我们来看一下假设:

在上图中,假设需要使用源语进行状态的切换,至少需要做两件事:
1、将 PCB 2 的 state 设置为 1
2、将 PCB 2 从阻塞队列放入到就绪列表
如果不具有原子性,可能只做了第一件事之后,就被中断了,那这个时候,阻塞队列里面的数据就包含了 state = 1 的 PCB 了,这样对于进程的管理,就乱套了。
那么 原语 是如何来保证原子性的呢? 我们接着往下看
原语如何保证原子性?
原语,其实也是用了两条特权指令来保障原子性操作的。
源语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。 可以用 关中断指令、开中断指令,这两个特权指令实现原子性操作。
还记得我们之前在中断那个章节有提到,执行完每一个指令之后,CPU 都要检查当前是否有外部中断信号,如果有则需要处理中断信息。
那么如果 CPU 执行了 关中断指令 之后,就不再例行检查是否有中断信息,直到执行 开中断指令之后,才恢复检查。
这样,关中断,开中断之间的这些指令就是不可被中断的了,这就实现了 原子性。

我们知道是使用 原语 来进行进程状态控制的,那这些原语具体都做了哪些事情呢?
以下的内容不需要死记硬背,只需要理解就好了。
创建原语

终止原语

阻塞和唤醒

切换原语

在切换原语的时候,我们需要保存运行环境,在重新执行该进程的时候,还需要恢复所需的运行环境。
那到底保存什么运行环境?

本章总结




















