Appearance
408
操作系统
进程控制(创建/终止/阻塞/唤醒/切换)
一、定位信息
- 所属圈层:核心层
- 前置知识:了解进程的概念和PCB(OS-02-01),了解进程状态与状态转换(OS-02-02)
- 知识网络位置:本单元讲解OS如何通过原语操作实现进程状态的转换,是进程管理的"执行层",直接服务于进程调度和同步
- 考点热度等级:H级(高频重点)——近5年选择题出现≥3次,进程创建和原语概念是常考点
二、知识点讲解
2.1 进程控制的概念
进程控制是OS内核对进程生命周期的管理,包括创建、终止、阻塞、唤醒和切换。这些操作都通过**原语(Primitive)**实现。
2.2 原语
定义:原语是由若干条指令组成的不可中断的原子操作,执行过程中不允许被中断。
为什么需要原语:进程控制操作涉及修改PCB和队列等共享数据结构,如果在操作过程中被打断,可能导致数据不一致。原语通过关中断/开中断指令保证原子性。
2.3 进程创建(Create)
触发条件:
- 用户登录系统
- 作业调度(批处理系统中选中一个作业)
- 提供服务(如用户请求打印,OS创建打印进程)
- 由父进程创建子进程(如
fork())
创建过程:
- 申请空白PCB(从PCB池中分配)
- 为新进程分配唯一标识符(PID)
- 初始化PCB(设置进程状态为"创建")
- 分配资源(内存空间、打开文件等)
- 初始化处理机状态(PC设为程序入口,栈指针初始化)
- 将进程插入就绪队列
- 将进程状态改为"就绪"
2.4 进程终止(Terminate)
触发条件:
- 进程正常执行完毕(
exit()) - 进程发生无法处理的异常
- 被父进程终止(
kill()) - 父进程终止导致子进程被终止(级联终止)
终止过程:
- 根据PID找到要终止的进程的PCB
- 若该进程正在运行,剥夺CPU(设置调度标志)
- 终止其所有子进程(级联终止)
- 归还资源给OS或父进程
- 从所在队列中移除PCB
- 释放PCB
2.5 进程阻塞(Block)
触发条件:进程自身发起请求,等待某事件
- 请求系统资源失败(如请求I/O)
- 等待某操作完成(如I/O完成信号)
- 等待新数据到达
阻塞过程:
- 找到要阻塞的进程的PCB
- 保存当前进程的处理机状态到PCB
- 将进程状态改为"阻塞"
- 插入等待该事件的阻塞队列
- 转调度程序,调度其他就绪进程运行
2.6 进程唤醒(Wakeup)
触发条件:等待的事件发生(由其他进程或中断处理程序调用唤醒原语)
- I/O完成中断
- 其他进程释放了该进程等待的资源
唤醒过程:
- 从阻塞队列中找到等待该事件的进程
- 将其从阻塞队列移除
- 将进程状态改为"就绪"
- 插入就绪队列
阻塞与唤醒的关系:阻塞和唤醒是一对配对操作。进程因某事件阻塞,必须由该事件的发生来唤醒。阻塞是进程自己调用,唤醒是由其他进程或中断处理程序调用。
2.7 进程切换(Switch)
触发条件:
- 时间片用完
- 进程执行完毕或被终止
- 进程阻塞
- 更高优先级的进程到达(抢占)
切换过程:
- 保存当前进程的上下文(PC、寄存器、PSW等)到其PCB
- 将当前进程的PCB移入相应队列(就绪队列或阻塞队列)
- 从就绪队列选择下一个要运行的进程
- 更新所选进程的PCB状态为"运行"
- 恢复所选进程的上下文(从其PCB中读取)
- 将CPU分配给新进程(设置PC、PSW等)
三、记忆与理解辅助
- 口诀:"创终阻唤切,五种原语管进程"——创建、终止、阻塞、唤醒、切换
- 原语的本质:不可中断的原子操作,通过关中断实现
- 阻塞是主动的,唤醒是被动的:进程自己调用阻塞原语,别人调用唤醒原语
- 进程切换六步口诀:"保存→移队→选新→改态→恢复→分配"
四、例题与精解
例题1(基础巩固)
题目:下列关于进程控制的描述,正确的是( )
A. 进程的阻塞是由其他进程调用阻塞原语实现的 B. 进程的唤醒是由进程自己调用唤醒原语实现的 C. 进程的阻塞和唤醒是一对配对操作 D. 进程创建后直接进入运行态
命题意图:考查进程控制的基本概念。
精解:
- 审题分析:逐项判断关于阻塞、唤醒和创建的描述
- 解题思路:阻塞是主动(自己调用),唤醒是被动(别人调用),创建后进入就绪态
- 完整步骤:
- A选项:错误。阻塞是进程自己调用阻塞原语实现的(主动行为)
- B选项:错误。唤醒是其他进程或中断处理程序调用唤醒原语实现的(被动行为)
- C选项:正确。进程因某事件阻塞,必须由该事件的发生来唤醒,两者是配对操作
- D选项:错误。进程创建后进入就绪态,需要等待调度器选中才能进入运行态
- 方法反思:阻塞和唤醒的方向性是核心考点——阻塞是"自锁",唤醒是"被解放"
答案:C
例题2(中等提升)
题目:在进程切换过程中,以下操作的正确顺序是( )
Ⅰ. 保存当前进程上下文 Ⅱ. 选择下一个要运行的进程 Ⅲ. 恢复新进程的上下文 Ⅳ. 更新进程状态
A. Ⅰ→Ⅱ→Ⅳ→Ⅲ B. Ⅰ→Ⅳ→Ⅱ→Ⅲ C. Ⅱ→Ⅰ→Ⅲ→Ⅳ D. Ⅳ→Ⅰ→Ⅱ→Ⅲ
命题意图:考查进程切换的正确步骤顺序。
精解:
- 审题分析:需要确定进程切换各步骤的先后顺序
- 解题思路:先保存旧的,再选新的,再恢复新的
- 完整步骤:
- 第一步:保存当前进程的上下文到其PCB(Ⅰ)
- 第二步:选择下一个要运行的进程(Ⅱ)
- 第三步:更新新进程的状态为"运行"(Ⅳ)
- 第四步:恢复新进程的上下文(Ⅲ)
- 正确顺序:Ⅰ→Ⅱ→Ⅳ→Ⅲ
- 方法反思:切换的核心逻辑是"先保存旧→再选新→再恢复新",状态更新在选新之后、恢复之前
答案:A
五、考情分析
- 考查频次:近5年约3–4次
- 常见题型:选择题
- 分值占比:2分/题
- 命题趋势:原语的概念和阻塞/唤醒的方向性是高频考点,可能与进程状态转换图结合出题
六、易错点提醒
错误表现:认为阻塞是被动的,由其他进程触发 错误原因:混淆阻塞和唤醒的主动性 正确理解:阻塞是进程自己调用阻塞原语(主动),唤醒是其他进程或中断调用唤醒原语(被动)
错误表现:认为进程创建后直接进入运行态 错误原因:忽略了调度环节 正确理解:进程创建后进入就绪态,需要等调度器选中才能运行
错误表现:认为原语执行过程中可以被中断 错误原因:不理解原语的原子性 正确理解:原语通过关中断保证执行过程中不被中断,这是原语区别于普通函数的关键
错误表现:认为进程终止时不需要处理子进程 错误原因:忽略了级联终止 正确理解:在许多OS中,父进程终止时其所有子进程也会被终止(级联终止)
七、来源标注
- 依据2026考研统考408大纲
- 依据《计算机操作系统》(汤小丹/汤子瀛版)第3章
- 依据《操作系统概念》(Silberschatz版)第3章