【系统架构设计师】操作系统 - 进程管理 ② ( 进程状态 | 三态模型 | 五态模型 | 进程状态 划分依据 | PCB 程序控制块 的 组织方式 )

文章目录

  • 一、进程状态
  • [二、基本进程状态模型 - 三态模型](#二、基本进程状态模型 - 三态模型)
    • 1、基本进程状态模型
    • [2、进程状态 划分依据 ( 重点 )](#2、进程状态 划分依据 ( 重点 ))
    • [3、阻塞态 不能转为 运行态](#3、阻塞态 不能转为 运行态)
    • [4、就绪态 不能转为 阻塞态](#4、就绪态 不能转为 阻塞态)
    • [5、CPU 时间片资源](#5、CPU 时间片资源)
  • [三、扩展进程状态模型 - 五态模型](#三、扩展进程状态模型 - 五态模型)
    • [1、五态模型 与 挂起](#1、五态模型 与 挂起)
    • [2、五态模型 与 三态模型 的对应关系](#2、五态模型 与 三态模型 的对应关系)
  • [四、软考考点分析 ☆](#四、软考考点分析 ☆)
    • [1、PCB 程序控制块 的 组织方式](#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 个进程处于 运行状态 , 在 阻塞进程 索引表 中查看元素个数 即可 ;
相关推荐
别说我什么都不会7 小时前
鸿蒙轻内核M核源码分析系列九 互斥锁Mutex
操作系统·harmonyos
别说我什么都不会14 小时前
鸿蒙轻内核M核源码分析系列七 动态内存Dynamic Memory
操作系统·harmonyos
_zwy19 小时前
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
linux·服务器·人工智能·系统架构
银帅183350309711 天前
2015年下半年试题二:论软件系统架构风格
系统架构
白-胖-子1 天前
DeepSeek系统架构的逐层分类拆解分析,从底层基础设施到用户端分发全链路
人工智能·机器学习·分类·数据挖掘·系统架构·agi·deepseek
别说我什么都不会1 天前
鸿蒙轻内核M核源码分析系列六 任务及任务调度(3)任务调度模块
操作系统·harmonyos
徐徐同学1 天前
【操作系统】操作系统概述
操作系统·计算机系统
试试看1682 天前
自制操作系统第三天
汇编·系统架构
xuegao08072 天前
系统架构设计基础
系统架构
呱牛do it2 天前
【系统架构】分布式事务模型详解
分布式·系统架构