当前位置: 首页 > article >正文

【系统架构设计师】操作系统 - 进程管理 ② ( 进程状态 | 三态模型 | 五态模型 | 进程状态 划分依据 | 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 个进程处于 运行状态 , 在 阻塞进程 索引表 中查看元素个数 即可 ;

在这里插入图片描述


http://www.kler.cn/a/546876.html

相关文章:

  • JavaScript 网页设计案例:经典与创新的完美结合
  • 【第5章:深度生成模型— 5.1 变分自编码器(VAE)与生成对抗网络(GAN)的基础理论】
  • STM32——HAL库开发笔记19(串口中断接收实验)(参考来源:b站铁头山羊)
  • 第3节:回归实战【新冠人数预测】
  • 高效开发!使用Chrome对MoonBit生成的Wasm进行性能分析!
  • AI大模型(如GPT、BERT等)可以通过自然语言处理(NLP)和机器学习技术,显著提升测试效率
  • FacePoke详细使用指南:如何利用开源AI工具优化照片人物表情
  • vue和Django快速创建项目
  • eval 内置函数用法
  • 时间盲注作业
  • (前端基础)HTML(一)
  • 【Docker 】虚悬镜像:深入理解与清理实践
  • 【工业安全】-CVE-2024-30891- Tenda AC18路由器 命令注入漏洞
  • 【前端框架与库】「React 全面解析」:从 JSX 语法到高阶组件,深度剖析前端开发中的核心概念与最佳实践
  • 算法与数据结构(存在重复元素)
  • uniapp开发h5部署到服务器
  • 红队视角出发的k8s敏感信息收集——服务发现与 DNS 探测
  • 6 Flink Table 和相关概念
  • android 的抓包工具
  • 使用 Python 爬虫获取微店快递费用 item_fee API 接口数据