【系统架构设计师】操作系统 - 进程管理 ② ( 进程状态 | 三态模型 | 五态模型 | 进程状态 划分依据 | PCB 程序控制块 的 组织方式 )
文章目录
- 一、进程状态
- 1、进程状态模型
- 2、CPU 资源 和 非 CPU 资源
- 二、基本进程状态模型 - 三态模型
- 1、基本进程状态模型
- 2、进程状态 划分依据 ( 重点 )
- 3、阻塞态 不能转为 运行态
- 4、就绪态 不能转为 阻塞态
- 5、CPU 时间片资源
- 三、扩展进程状态模型 - 五态模型
- 1、五态模型 与 挂起
- 挂起 状态 关联的是 内存资源
- 哪些进程会被挂起
- 2、五态模型 与 三态模型 的对应关系
- 四、软考考点分析 ☆
- 1、PCB 程序控制块 的 组织方式
- 2、案例分析
程序 是 静态 的 ,
进程 是 动态 的 ,
程序 运行起来 就是 进程 , 进程 是 程序 的 运行实例 ;
动态 的 进程 是有不同的 生命周期状态变化 的 ;
一、进程状态
1、进程状态模型
进程 生命周期变化 模型有多种 , 软考 中 主要 考察 以下两种模型 :
-
基本进程状态模型 ( 三态模型 ) : 进程被划分为 就绪 , 运行 , 阻塞 三个状态 ;
-
扩展进程状态模型 ( 五态模型 ) : 在 三态模型 的基础上 , 分别为 就绪 和 阻塞 增加一个 挂起状态 ;
- 普通的 就绪状态 就是 活跃就绪 , 挂起 的 就绪状态 就是 静止就绪 ;
- 普通的 阻塞状态 就是 活跃阻塞 , 挂起 的 静止状态 就是 静止阻塞 ;
2、CPU 资源 和 非 CPU 资源
进程状态 的 划分依据 是 根据 调度的资源类型占用 进行划分的 ;
进程 是 资源调度的 基本单位 , 线程 是 CPU 调度的 基本单位 ;
进程 可调度的资源 包括 : CPU、内存、文件、数据 等 ;
这里将资源分为 CPU 资源 和 非 CPU 资源 ,
- CPU 资源 : 就是 对 CPU 的占用 时间 , CPU 时间片 ;
- 非 CPU 资源 : 就是 除 CPU 之外的其它资源 , 如 : 内存、文件、数据 等 ;
二、基本进程状态模型 - 三态模型
1、基本进程状态模型
进程生命周期 :
- 新建(New) : 进程正在被创建,尚未完全加载到内存中。
- 转换条件 ( 新建 → 就绪 ): 创建完成后分配资源,进入就绪状态。
- 就绪(Ready) : 进程已获得所需资源(除CPU外),等待被调度执行。
- ***转换条件 ( 就绪 → 运行 ):***分配 CPU 时间片 → 进入运行状态。
- 运行(Running) : 进程正在CPU上执行指令。
- ***转换条件 ( 运行 → 就绪 ):***时间片耗尽或更高优先级进程抢占 → 回到就绪状态。
- ***转换条件 ( 运行 → 阻塞 ):***主动等待事件(如I/O请求) → 进入阻塞状态。
- ***转换条件 ( 运行 → 终止 ):***执行完成或被终止 → 进入终止状态。
- 阻塞/等待(Blocked/Waiting) : 进程因等待外部事件(如I/O完成、信号量释放)而暂停执行。
- ***转换条件 ( 阻塞 → 就绪 ):***非 CPU 资源充足 → 移回就绪队列。
- 终止(Terminated) : 进程执行完毕或被强制终止,等待父进程回收资源(如退出状态码)。
将 上述 进程生命周期 中的 新建 与 终止 两个状态 去除 , 就得到 基本进程状态模型 / 三态模型 :
- 就绪(Ready) : 进程已获得所需资源(除CPU外),等待被调度执行。
- ***转换条件 ( 就绪 → 运行 ):***分配 CPU 时间片 → 进入运行状态。
- 运行(Running) : 进程正在CPU上执行指令。
- ***转换条件 ( 运行 → 就绪 ):***时间片耗尽或更高优先级进程抢占 → 回到就绪状态。
- ***转换条件 ( 运行 → 阻塞 ):***主动等待事件(如I/O请求) → 进入阻塞状态。
- 阻塞/等待(Blocked/Waiting) : 进程因等待外部事件(如I/O完成、信号量释放)而暂停执行。
- ***转换条件 ( 阻塞 → 就绪 ):***非 CPU 资源充足 → 移回就绪队列。
上面的状态中 , 就绪 不能 转为 阻塞 , 阻塞 不能 转为 运行 ;
2、进程状态 划分依据 ( 重点 )
划分 进程状态 根据 资源占用 进行划分 , CPU 是 核心资源 , 因此这里根据 CPU 的资源占用进行划分 ;
- 非 CPU 资源 准备完毕 , CPU 资源 准备不足 , 此时进程的状态被划分为 " 就绪 " 状态 ;
- 非 CPU 资源 准备完毕 , CPU 资源 准备完毕 , 此时进程的状态被划分为 " 运行 " 状态 ;
- 非 CPU 资源 准备不足 , CPU 资源 准备不足 , 此时进程的状态被划分为 " 阻塞 " 状态 ;
3、阻塞态 不能转为 运行态
CPU 资源 准备完毕 , 非 CPU 资源 准备不足 的情况 , 不作考虑 , CPU 是非常珍贵的资源 , 在 非 CPU 资源不足的情况下 , 是不会考虑将 CPU 资源分配给 进程的 ;
因此 阻塞状态 不会进入到 运行状态 , 因为 阻塞状态 CPU 资源 和 非 CPU 资源 都准备不足 ;
操作系统的 运行机制 就是 先给进程 补充 非 CPU 资源 , 只有当 非 CPU 资源 准备完毕后 , 才考虑给进程分配 CPU 资源 ;
4、就绪态 不能转为 阻塞态
就绪态 下 非 CPU 资源准备完毕 ,
阻塞态 下 非 CPU 资源 和 CPU 资源 都准备不足 ,
因此 就绪态 不能 跳转到 阻塞态 ;
5、CPU 时间片资源
每个进程 不会长时间 占用 CPU 资源 , CPU 的使用时间会被分为若干时间片 , 多个进程轮流使用这些 CPU 资源时间片 ;
CPU 时间片是操作系统分配给每个进程在 CPU 上连续执行的时间片段 , 如 : 10ms ~ 100ms , 进程用完时间片后会被强制挂起 , 等待下一次调度 ;
CPU 时间片有如下作用 :
- 避免饥饿 : 防止单个进程长期独占 CPU ;
- 提升速度 : 提升多任务的响应速度 ;
- 实现公平 : 通过时间片轮转 ( Round-Robin ) 实现公平性 ;
CPU 时间片分配是操作系统进行进程调度的核心机制 , 其核心目标是通过合理分配 CPU 时间资源 , 实现多任务的高效并发执行 ;
三、扩展进程状态模型 - 五态模型
1、五态模型 与 挂起
扩展进程状态模型 ( 五态模型 ) : 在 三态模型 的基础上 , 分别为 就绪 和 阻塞 增加一个 挂起状态 ;
- 普通的 就绪状态 就是 活跃就绪 , 挂起 的 就绪状态 就是 静止就绪 ;
- 普通的 阻塞状态 就是 活跃阻塞 , 挂起 的 静止状态 就是 静止阻塞 ;
挂起 状态 关联的是 内存资源
就绪 与 阻塞 状态 , 关联的是 CPU 时间片 资源 ;
挂起 状态 关联的是 内存资源 ;
挂起 是从内存角度考虑的概念 , 操作系统重 , 进程比较多时 , 可能无法满足全部进程的资源要求 , 尤其是内存资源 ,
内存较小 的设备中 , 进程一多 , 很容易达到内存 100% 占用的情况 ,
此时就需要 " 挂起 " 一些进程 ;
哪些进程会被挂起
在内存资源不足时 , 将某些进程 " 挂起 " , 将 挂起的进程 的内存 分配给 没有挂起的进程 , 挂起的内存中的数据 暂时 存放到 磁盘中 ;
挂起 可以理解为 将 进程 的 内存数据 暂时存入 磁盘中 ;
进程 处于 " 运行 " 状态 , 就是运行状态 , 是不能进行挂起的 , 因为其占用着更加珍贵的 CPU 时间片 资源 ,
只有 处于 就绪 或者 阻塞 的 状态下 的 进程 , 才会被 操作系统 挂起 , 有一个挂起分支状态 ;
2、五态模型 与 三态模型 的对应关系
五态模型 中的 活跃就绪 和 活跃阻塞 就是 三态模型 中的 就绪 和 阻塞 状态 ;
- 五态模型 :
- 三态模型 :
五态模型 在 三态模型 的 基础上 新增了 静止就绪 和 静止阻塞 两种状态 ;
- 静止就绪 和 活跃就绪 可以相互转化 , 转化的标志是 挂起 和 取消挂起 ;
- 静止阻塞 和 活跃阻塞 也可以相互转化 , 转化的标志是 挂起 和 取消挂起 ;
除了上述两组状态转化之外 , 还增加了以下两个状态转化 :
- 运行态 挂起后 , 就转为 静止就绪 状态 ;
- 静止阻塞 状态 如果 非 CPU 和 内存 资源 准备完毕 , 就转为 静止就绪 状态 ;
四、软考考点分析 ☆
1、PCB 程序控制块 的 组织方式
PCB(进程控制块)是操作系统管理进程的核心数据结构 , 其组织方式直接影响进程调度和资源管理效率 ;
常见的 PCB 组织方式 如下 :
组织方式 | 描述 | 优点 | 缺点 |
---|---|---|---|
线性表 | |||
- 数组 | PCB 存储在连续内存中,通过索引访问。 | 实现简单,访问速度快。 | 大小固定,扩展性差。 |
- 链表 | PCB 通过指针连接,形成单向、双向或循环链表。 | 动态扩展,插入删除方便。 | 访问速度较慢。 |
索引表 | 使用索引表记录 PCB 位置,索引表可以是数组或链表。 | 结合数组和链表的优点,访问和扩展性较好。 | 实现复杂。 |
队列 | |||
- 就绪队列 | 存放准备执行的进程 PCB。 | 便于调度和管理。 | 管理复杂度增加。 |
- 等待队列 | 存放等待资源的进程 PCB。 | ||
- 多级队列 | 根据优先级或类型将 PCB 放入不同队列。 | ||
树结构 | 用于父子进程关系,形成进程树。 | 直观反映进程关系。 | 实现复杂。 |
哈希表 | 通过哈希函数快速定位 PCB。 按内容进行存放 , 根据哈希函数计算存放内容的位置 | 查找速度快。 | 哈希冲突需处理。 |
多级组织 | 结合多种方式,如链表 + 队列或索引表 + 树结构。 | 灵活高效。 | 实现复杂。 |
PCB 的 组织方式 就是 多个 PCB 程序控制块 放在 什么样的数据结构 中 ;
2、案例分析
下面的 进程管理 采用的是 三态模型 ;
PCB 程序控制块 的 组织方式 是 " 索引方式 " , 使用 索引表 记录 PCB 位置 , 索引表可以是数组或链表 , 本案例中索引表是一个数组 ;
处于三种状态的进程个数 :
- 运行状态 : 有 2 个进程处于 运行状态 , 在 运行进程 索引表 中查看元素个数 即可 ;
- 就绪状态 : 有 3 个进程处于 运行状态 , 在 就绪进程 索引表 中查看元素个数 即可 ;
- 阻塞状态 : 有 4 个进程处于 运行状态 , 在 阻塞进程 索引表 中查看元素个数 即可 ;