文章目录
- [3.3 进程控制](#3.3 进程控制)
3.3 进程控制
进程控制是进程和处理机管理中的一项重要任务。它指的是操作系统使用特定的程序来创建进程、撤销进程,以及完成进程状态间的转换。
进程控制是操作系统的底层核心功能之一,由内核完成。内核在执行这些操作时,通常是通过执行各种原语来实现的。
进程的状态及其转换
由于系统资源的有限性,进程在运行过程中不能总是获得其所需的全部资源,因此呈现出走走停停的状态。例如,当一个进程因缺少必要的资源而无法继续执行时,它必须等待。一旦获得了所需资源,它就会转变为就绪状态,并可以被CPU调度执行。
进程的三种基本状态
一个进程在任意时刻,都处于以下三种基本状态之一:
- (1) 运行态 (Running): 进程正在占用处理机(CPU)执行。
- (2) 就绪态 (Ready): 进程已经具备了运行的所有条件(如获得了必要的资源),只因为处理机正被其他进程占用而处于等待处理机的状态。
- (3) 等待态 (Waiting/Blocked): 进程因等待某一事件的发生(例如等待I/O操作完成)而暂时不能运行的状态。
随着进程自身的进展和外部条件的变化,进程的状态会在这三个基本状态之间进行转换。这个转换过程由操作系统完成,对用户是透明的。

原语 (Primitive)
如果进程控制程序在执行时被其他并发程序打断,必然会引起系统混乱。为了解决这个问题,操作系统引入了"原语"的概念。
- 定义: 所谓原语,是机器指令的延伸,是为了完成某些特定功能而编制的一段系统程序。
- 特性: 为了保证操作的正确性,在许多机器中规定,执行原语操作时要屏蔽中断。原语不能并发执行 ,以保证其操作的不可分割性(原子性)。
- 本质: 原语是由若干条指令构成的"原子操作 (atomic operation)",作为一个整体而不可分割。许多系统调用就是通过原语来实现的。
进程控制原语
1. 进程的创建原语: create
主要功能:
- 申请一个空白的PCB (进程控制块),并为新进程指定一个唯一的PID (进程标识符)。
- 为新进程分配资源,装入进程的实体:包括程序和数据。
- 将新进程的PCB初始化:设置其状态为就绪态,并设定优先级、内存地址等。
- 将新进程加入到就绪队列中。
两种创建方式:
- (1) 系统程序模块统一创建(常见于批处理系统)。
- (2) 父进程创建。

父进程和子进程
-
进程树: 用于描述进程家族关系的"有向树"。图中的结点代表进程。
-
父子关系: 在进程A创建了进程B后,称A是B的父进程,B是A的子进程。进程可以由系统创建,也可以由父进程创建。
-
父子进程关系特点:
- 子进程继承父进程的资源。
- 父、子进程可以并发执行。
- 父进程可以等待子进程执行结束之后再执行。
- 父进程撤销,子进程一般也撤销。
2. 进程的撤销原语: kill
撤销的原因:
- 正常终止。
- 因错误而非正常终止。
- 祖先进程要求终止某个子进程。
主要功能:
- 从系统的PCB表中找到指定进程的PCB。
- 回收该进程所占用的全部资源。
- 若该进程还有子孙进程,回收它们所占有的全部资源。
- 释放被终止进程的PCB,并从原来所在的队列中摘走。
3. 进程阻塞原语: block
起因:
- 当一个正在运行的进程,因所需资源无法满足而不能继续运行时,进程会调用阻塞原语,使自己变为等待状态。进程的阻塞是进程自身的一种主动行为。
主要功能:
- 主动放弃CPU。
- 保护现行进程的CPU现场。
- 把该进程的现行状态由"运行"改成"等待",并将其插入到具有相同事件的等待队列。
- 转到进程调度程序,重新挑选一个合适的就绪进程投入运行。
4. 进程唤醒原语: wakeup
唤醒过程:
- 被阻塞的进程不能自己唤醒自己。当它所期待的事件出现时(如I/O完成或其所期待的数据已经到达),则由有关进程(比如,用完并释放了该I/O设备的进程,或者是负责事件监测的系统进程)调用唤醒原语
wakeup()
,将等待该事件的进程唤醒。
主要功能:
- 把进程从相应的等待队列中摘下。
- 将其现行状态改为就绪态,然后把该进程插入到就绪队列中。
- 如果被唤醒进程比当前运行进程有更高的优先级,则设置重新调度标志。
相关习题与解析
选择题
-
分配到必要的资源并获得处理机时的进程状态是 ______。
- A. 就绪状态
- B. 撤销状态
- C. 执行状态 (✓)
- D. 阻塞状态
解析: 题目描述了两个条件:"分配到必要资源"和"获得处理机",同时满足这两个条件的只有执行状态。
-
下列进程状态变化中,______ 变化是不可能发生的。
- A. 等待 → 就绪
- B. 等待 → 运行 (✓)
- C. 运行 → 等待
- D. 运行 → 就绪
解析: 处于等待态的进程在所等待的事件发生后,会先进入就绪队列,变为就绪态,等待CPU调度,而不能直接跳到运行态。
-
当 ______ 时,进程从执行状态转变为就绪状态。
- A. 等待的事件发生
- B. 时间片到 (✓)
- C. 等待某一事件
- D. 进程被调度程序选中
解析: 进程从执行态变为就绪态的典型情况是时间片用完,CPU被剥夺。A是等待态到就绪态;C是运行态到等待态;D是就绪态到运行态。
-
当一个进程处于 ______ 的状态时,称为等待状态。
- A. 它正在等着分给它中央处理器
- B. 它正等着协作进程的一个消息 (✓)
- C. 它正等着分给它一个时间片
- D. 它正等着进入内存
解析: 等待状态(阻塞态)是因等待某一事件而发生,如等待I/O、等待消息等。A和C描述的是就绪态。
-
如果系统中有n个进程,则就绪队列中进程的个数最多为 ______。
- A. n
- B. 1
- C. n-1 (✓)
- D. n+1
解析: 在单处理机系统中,最多只有一个进程处于运行状态。因此,如果系统总共有n个进程,那么处于就绪态的进程最多是n-1个(此时没有进程处于等待态)。
-
设系统中有n (n>2) 个进程,且当前不在执行进程调度程序,试考虑下述4种情况:不可能发生的情况是 ______。
- A. 有1个运行进程,n-1个就绪进程,没有进程处于等待状态。
- B. 有1个运行进程,没有就绪进程,n-1个进程处于等待状态。
- C. 有1个运行进程,有1个就绪进程,n-2个进程处于等待状态。
- D. 没有运行进程,有2个就绪进程,n个进程处于等待状态 (✓)
解析: 选项D中,"没有运行进程"和"有2个就绪进程"是矛盾的。只要就绪队列不为空,并且没有执行调度程序,系统就必然会有一个进程处于运行状态。同时,"有2个就绪进程,n个进程处于等待状态"加起来总进程数为n+2,与题目给定的n个进程不符。
-
对进程的管理和控制使用 ______。
- A. 指令
- B. 信号量
- C. 原语 (✓)
- D. 信箱
解析: 根据课件定义,操作系统通过执行各种原语来完成对进程的控制。
-
下述哪一个选项,体现了原语的主要特点 ______。
- A. 并发性
- B. 异步性
- C. 不可分割性 (✓)
- D. 共享性
解析: 原语最重要的特性就是原子性或不可分割性,保证其在执行期间不会被中断。
-
下面对父进程和子进程的叙述不正确的是 ______。
- A. 撤销父进程之时,可以同时撤销其子进程
- B. 父进程和子进程之间可以并发
- C. 父进程可以等待所有子进程结束后再执行
- D. 父进程创建了子进程,因此父进程执行完了子进程才能运行 (✓)
解析: 父子进程可以并发执行,D选项的描述是错误的。
-
下面所述步骤中,______ 不是创建进程所必需的。
- A. 建立一个进程控制块
- B. 为进程分配内存
- C. 将进程控制块链入就绪队列
- D. 由调度程序为进程分配CPU (✓)
解析: 为进程分配CPU是进程调度 的工作,发生在进程创建完成并进入就绪态之后,而不是创建过程本身的一部分。
填空与简答题
-
在一个单处理机系统中,若有5个用户进程,且假设当前时刻为用户态,则处于就绪状态的用户进程最多有 ① 个,最少有 ② 个。
- 参考答案: ① 4 ② 0
解析:
- 最多: 5个进程中,1个正在运行(处于用户态),其余4个都可以处于就绪状态。所以最多为4。
- 最少: 5个进程中,1个正在运行,其余4个可能都处于等待(阻塞)状态,那么就绪队列就为空。所以最少为0。
-
如果系统中有n个进程,则等待队列中进程的个数最多可以为 ______。
- 参考答案: n
解析: 理论上,所有n个进程都可能因为等待某个事件而全部处于等待状态。例如,它们都在等待用户的输入。
-
下面关于进程的叙述中,不正确的有 _____ 条。
- ① 进程申请CPU得不到满足时,其状态变为等待状态。
- ② 在单CPU系统中,任一时刻都有一个进程处于运行状态。
- ③ 优先级是进行进程调度的重要依据,一旦确定不能改变。
- ④ 进程获得处理机而运行是通过调度而实现的。
- 参考答案: 3 (即 ① ② ③)
解析:
- ① 错误 。进程申请CPU得不到满足时,处于就绪态,而不是等待态。等待态是等待CPU以外的资源或事件。
- ② 错误。如果所有进程都在等待I/O,或者系统处于空闲状态,就没有进程在运行。
- ③ 错误。许多调度算法采用动态优先级,进程的优先级是可以改变的。
- ④ 正确。进程从就绪态到运行态正是由进程调度程序完成的。