Skip to content

408

操作系统

进程控制(创建/终止/阻塞/唤醒/切换)


一、定位信息

  • 所属圈层:核心层
  • 前置知识:了解进程的概念和PCB(OS-02-01),了解进程状态与状态转换(OS-02-02)
  • 知识网络位置:本单元讲解OS如何通过原语操作实现进程状态的转换,是进程管理的"执行层",直接服务于进程调度和同步
  • 考点热度等级H级(高频重点)——近5年选择题出现≥3次,进程创建和原语概念是常考点

二、知识点讲解

2.1 进程控制的概念

进程控制是OS内核对进程生命周期的管理,包括创建、终止、阻塞、唤醒和切换。这些操作都通过**原语(Primitive)**实现。

2.2 原语

定义:原语是由若干条指令组成的不可中断的原子操作,执行过程中不允许被中断。

为什么需要原语:进程控制操作涉及修改PCB和队列等共享数据结构,如果在操作过程中被打断,可能导致数据不一致。原语通过关中断/开中断指令保证原子性。

2.3 进程创建(Create)

触发条件

  • 用户登录系统
  • 作业调度(批处理系统中选中一个作业)
  • 提供服务(如用户请求打印,OS创建打印进程)
  • 由父进程创建子进程(如 fork()

创建过程

  1. 申请空白PCB(从PCB池中分配)
  2. 为新进程分配唯一标识符(PID)
  3. 初始化PCB(设置进程状态为"创建")
  4. 分配资源(内存空间、打开文件等)
  5. 初始化处理机状态(PC设为程序入口,栈指针初始化)
  6. 将进程插入就绪队列
  7. 将进程状态改为"就绪"

2.4 进程终止(Terminate)

触发条件

  • 进程正常执行完毕(exit()
  • 进程发生无法处理的异常
  • 被父进程终止(kill()
  • 父进程终止导致子进程被终止(级联终止)

终止过程

  1. 根据PID找到要终止的进程的PCB
  2. 若该进程正在运行,剥夺CPU(设置调度标志)
  3. 终止其所有子进程(级联终止)
  4. 归还资源给OS或父进程
  5. 从所在队列中移除PCB
  6. 释放PCB

2.5 进程阻塞(Block)

触发条件:进程自身发起请求,等待某事件

  • 请求系统资源失败(如请求I/O)
  • 等待某操作完成(如I/O完成信号)
  • 等待新数据到达

阻塞过程

  1. 找到要阻塞的进程的PCB
  2. 保存当前进程的处理机状态到PCB
  3. 将进程状态改为"阻塞"
  4. 插入等待该事件的阻塞队列
  5. 转调度程序,调度其他就绪进程运行

2.6 进程唤醒(Wakeup)

触发条件:等待的事件发生(由其他进程或中断处理程序调用唤醒原语)

  • I/O完成中断
  • 其他进程释放了该进程等待的资源

唤醒过程

  1. 从阻塞队列中找到等待该事件的进程
  2. 将其从阻塞队列移除
  3. 将进程状态改为"就绪"
  4. 插入就绪队列

阻塞与唤醒的关系:阻塞和唤醒是一对配对操作。进程因某事件阻塞,必须由该事件的发生来唤醒。阻塞是进程自己调用,唤醒是由其他进程或中断处理程序调用。

2.7 进程切换(Switch)

触发条件

  • 时间片用完
  • 进程执行完毕或被终止
  • 进程阻塞
  • 更高优先级的进程到达(抢占)

切换过程

  1. 保存当前进程的上下文(PC、寄存器、PSW等)到其PCB
  2. 将当前进程的PCB移入相应队列(就绪队列或阻塞队列)
  3. 从就绪队列选择下一个要运行的进程
  4. 更新所选进程的PCB状态为"运行"
  5. 恢复所选进程的上下文(从其PCB中读取)
  6. 将CPU分配给新进程(设置PC、PSW等)

三、记忆与理解辅助

  1. 口诀:"创终阻唤切,五种原语管进程"——创建、终止、阻塞、唤醒、切换
  2. 原语的本质:不可中断的原子操作,通过关中断实现
  3. 阻塞是主动的,唤醒是被动的:进程自己调用阻塞原语,别人调用唤醒原语
  4. 进程切换六步口诀:"保存→移队→选新→改态→恢复→分配"

四、例题与精解

例题1(基础巩固)

题目:下列关于进程控制的描述,正确的是( )

A. 进程的阻塞是由其他进程调用阻塞原语实现的 B. 进程的唤醒是由进程自己调用唤醒原语实现的 C. 进程的阻塞和唤醒是一对配对操作 D. 进程创建后直接进入运行态

命题意图:考查进程控制的基本概念。

精解

  1. 审题分析:逐项判断关于阻塞、唤醒和创建的描述
  2. 解题思路:阻塞是主动(自己调用),唤醒是被动(别人调用),创建后进入就绪态
  3. 完整步骤
    • A选项:错误。阻塞是进程自己调用阻塞原语实现的(主动行为)
    • B选项:错误。唤醒是其他进程或中断处理程序调用唤醒原语实现的(被动行为)
    • C选项:正确。进程因某事件阻塞,必须由该事件的发生来唤醒,两者是配对操作
    • D选项:错误。进程创建后进入就绪态,需要等待调度器选中才能进入运行态
  4. 方法反思:阻塞和唤醒的方向性是核心考点——阻塞是"自锁",唤醒是"被解放"

答案:C

例题2(中等提升)

题目:在进程切换过程中,以下操作的正确顺序是( )

Ⅰ. 保存当前进程上下文 Ⅱ. 选择下一个要运行的进程 Ⅲ. 恢复新进程的上下文 Ⅳ. 更新进程状态

A. Ⅰ→Ⅱ→Ⅳ→Ⅲ B. Ⅰ→Ⅳ→Ⅱ→Ⅲ C. Ⅱ→Ⅰ→Ⅲ→Ⅳ D. Ⅳ→Ⅰ→Ⅱ→Ⅲ

命题意图:考查进程切换的正确步骤顺序。

精解

  1. 审题分析:需要确定进程切换各步骤的先后顺序
  2. 解题思路:先保存旧的,再选新的,再恢复新的
  3. 完整步骤
    • 第一步:保存当前进程的上下文到其PCB(Ⅰ)
    • 第二步:选择下一个要运行的进程(Ⅱ)
    • 第三步:更新新进程的状态为"运行"(Ⅳ)
    • 第四步:恢复新进程的上下文(Ⅲ)
    • 正确顺序:Ⅰ→Ⅱ→Ⅳ→Ⅲ
  4. 方法反思:切换的核心逻辑是"先保存旧→再选新→再恢复新",状态更新在选新之后、恢复之前

答案:A


五、考情分析

  • 考查频次:近5年约3–4次
  • 常见题型:选择题
  • 分值占比:2分/题
  • 命题趋势:原语的概念和阻塞/唤醒的方向性是高频考点,可能与进程状态转换图结合出题

六、易错点提醒

  1. 错误表现:认为阻塞是被动的,由其他进程触发 错误原因:混淆阻塞和唤醒的主动性 正确理解:阻塞是进程自己调用阻塞原语(主动),唤醒是其他进程或中断调用唤醒原语(被动)

  2. 错误表现:认为进程创建后直接进入运行态 错误原因:忽略了调度环节 正确理解:进程创建后进入就绪态,需要等调度器选中才能运行

  3. 错误表现:认为原语执行过程中可以被中断 错误原因:不理解原语的原子性 正确理解:原语通过关中断保证执行过程中不被中断,这是原语区别于普通函数的关键

  4. 错误表现:认为进程终止时不需要处理子进程 错误原因:忽略了级联终止 正确理解:在许多OS中,父进程终止时其所有子进程也会被终止(级联终止)


七、来源标注

  • 依据2026考研统考408大纲
  • 依据《计算机操作系统》(汤小丹/汤子瀛版)第3章
  • 依据《操作系统概念》(Silberschatz版)第3章

考研全科复习资料 - 基于2026考研统考大纲