Skip to content

408

操作系统

进程状态与状态转换(五状态/七状态模型)


一、定位信息

  • 所属圈层:核心层
  • 前置知识:了解进程和PCB的概念(OS-02-01)
  • 知识网络位置:进程状态是理解进程调度(OS-02-06)和进程控制(OS-02-03)的基础,状态转换图是OS考试的高频图形题
  • 考点热度等级H级(高频重点)——近5年选择题和综合题出现≥4次

二、知识点讲解

2.1 五状态模型

进程在其生命周期中经历五种基本状态:

状态含义说明
创建(New)进程正在被创建OS分配PCB、初始化资源
就绪(Ready)已获得除CPU外的所有资源,等待CPU在就绪队列中排队
运行(Running)正在CPU上执行单CPU系统中最多一个进程处于运行态
阻塞(Waiting/Blocked)因等待某事件(如I/O完成)而暂停不在就绪队列中,即使CPU空闲也不会被调度
终止(Terminated)进程执行完毕或被终止OS回收资源,保留PCB供父进程读取

2.2 五状态转换图

状态转换关系:

创建 → 就绪 → 运行 → 终止
        ↑  ↕      ↓
        └── 阻塞 ←┘

关键转换:

  • 就绪→运行:被调度器选中,获得CPU(调度
  • 运行→就绪:时间片用完或被高优先级进程抢占(时间片到/抢占
  • 运行→阻塞:进程主动请求等待某事件(如发起I/O请求)(主动行为
  • 阻塞→就绪:等待的事件发生(如I/O完成)(被动行为,由中断触发)

重要注意阻塞→就绪是被动的(事件发生后由OS完成),运行→阻塞是主动的(进程自己发起的请求)。没有"阻塞→运行"的直接转换!

2.3 七状态模型

引入**挂起(Suspend)**状态后,五状态扩展为七状态。挂起是将进程从内存换出到外存(磁盘),以节省内存空间。

新增状态含义说明
就绪挂起(Ready Suspend)在外存中等待被调入内存被挂起的就绪进程
阻塞挂起(Blocked Suspend)在外存中等待事件完成被挂起的阻塞进程

七状态的完整转换增加了:

  • 就绪→就绪挂起(挂起就绪进程到外存)
  • 阻塞→阻塞挂起(挂起阻塞进程到外存)
  • 阻塞挂起→就绪挂起(事件在外存中发生)
  • 就绪挂起→就绪(从外存调入内存)

2.4 五状态 vs 七状态对比

维度五状态模型七状态模型
内存管理所有就绪/阻塞进程都在内存中支持将进程换出到外存
挂起状态有(就绪挂起、阻塞挂起)
内存利用率较低(进程都在内存中)较高(不活跃进程换出外存)
虚拟内存支持不支持支持
复杂度简单较复杂
考试重点重点掌握了解即可

三、记忆与理解辅助

  1. 口诀记忆状态转换:"创就运阻终,就运互转靠调度,运阻主动是请求,阻就被动是事件"
  2. 关键易错点:没有"阻塞→运行"的直接转换!阻塞进程必须先变为就绪,再被调度才能运行
  3. 区分主动与被动:运行→阻塞(主动,进程自己请求),阻塞→就绪(被动,事件发生后OS完成)
  4. 挂起一句话:挂起=换出到外存,是为了节省内存空间

四、例题与精解

例题1(基础巩固)

题目:在进程状态转换中,下列转换一定不能发生的是( )

A. 就绪→运行 B. 运行→阻塞 C. 阻塞→运行 D. 运行→就绪

命题意图:考查进程状态转换的合法性。

精解

  1. 审题分析:题目要求选出"一定不能发生"的转换
  2. 解题思路:回忆状态转换图,逐项检查每个转换是否存在
  3. 完整步骤
    • A选项:就绪→运行,这是调度器选中进程的正常转换,可以发生
    • B选项:运行→阻塞,进程主动请求I/O等待时发生,可以发生
    • C选项:阻塞→运行,不可能发生。阻塞进程必须先变为就绪态(等待的事件完成),进入就绪队列,然后被调度器选中才能变为运行态。没有从阻塞直接到运行的转换
    • D选项:运行→就绪,时间片用完或被抢占时发生,可以发生
  4. 方法反思:状态转换图中"阻塞→就绪→运行"是固定路径,不能跳过就绪态

答案:C

例题2(中等提升)

题目:某进程请求I/O操作后,其状态将从( )转变为( )。当I/O操作完成后,该进程的状态将从( )转变为( )。

A. 运行→阻塞,阻塞→就绪 B. 就绪→阻塞,阻塞→就绪 C. 运行→就绪,就绪→运行 D. 运行→阻塞,阻塞→运行

命题意图:考查I/O操作引起的进程状态转换。

精解

  1. 审题分析:进程请求I/O→需要等待→I/O完成后恢复
  2. 解题思路:请求I/O是进程主动行为(运行→阻塞),I/O完成是被动事件(阻塞→就绪)
  3. 完整步骤
    • 请求I/O时:进程正在运行,主动请求等待I/O,状态从运行→阻塞
    • I/O完成后:等待的事件(I/O完成)发生了,状态从阻塞→就绪
    • 注意:I/O完成后进程变为就绪态而非运行态,因为CPU可能被其他进程占用
    • A选项正确描述了这两个转换
    • D选项的第二个转换"阻塞→运行"是不存在的
  4. 方法反思:记住"阻塞不能直接到运行",必须经过就绪态

答案:A


五、考情分析

  • 考查频次:近5年约4–5次
  • 常见题型:选择题,偶尔在综合题中出现
  • 分值占比:2分/题(选择题)
  • 命题趋势:状态转换的合法性判断是经典题型,近年倾向于在具体场景下判断状态转换方向

六、易错点提醒

  1. 错误表现:认为存在"阻塞→运行"的直接转换 错误原因:想当然地认为事件发生后阻塞进程可以直接获得CPU 正确理解:阻塞进程必须先变为就绪态(进入就绪队列),再被调度才能运行

  2. 错误表现:认为"运行→阻塞"是被动的 错误原因:混淆了主动和被动的概念 正确理解:运行→阻塞是进程主动发起的(如请求I/O),阻塞→就绪才是被动的(由事件触发)

  3. 错误表现:将七状态模型中的挂起状态等同于阻塞状态 错误原因:两者都是"暂停等待" 正确理解:阻塞进程在内存中等待事件,挂起进程在外存中。挂起可能是就绪挂起(不等事件)或阻塞挂起(等事件)

  4. 错误表现:认为时间片用完后进程进入阻塞态 错误原因:混淆了"时间片到"和"I/O等待" 正确理解:时间片用完→运行→就绪(不是阻塞)。阻塞是因为进程主动等待某事件


七、来源标注

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

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