【系统架构师】第二章 操作系统知识 - 第二部分:进程管理(详解版)

第二章 操作系统知识 - 第二部分:进程管理 ⭐⭐⭐

重要提示 :进程管理是操作系统考试的最核心内容,每年必考,分值占操作系统的60%以上。本节内容需要深入理解并熟练掌握。


📚 本部分内容导览

进程管理 ⭐⭐⭐

核心考点章节
2.1 进程的基本概念
2.2 进程三态图 ⭐⭐⭐
2.3 进程资源图与死锁检测 ⭐⭐⭐
2.4 进程同步与互斥 PV操作 ⭐⭐⭐
2.5 生产者-消费者问题 ⭐⭐⭐
2.6 前驱图 ⭐⭐
2.7 进程调度算法 ⭐⭐⭐
2.8 三级调度 ⭐
三种状态
状态转换规则 必考
阻塞节点判断
死锁检测
PV操作原理
信号量含义
经典案例
代码实现

重点标注

  • ⭐ 基础了解(偶尔考察)
  • ⭐⭐ 重要考点(需要理解掌握)
  • ⭐⭐⭐ 核心考点(必考内容,需熟练掌握)

2.1 进程的基本概念

什么是进程?

简单理解:进程 = 运行中的程序
程序 vs 进程
程序 Program
进程 Process ⭐
状态:静态的
位置:存储在

外存 硬盘 中
举例:桌面上的

QQ图标 未运行
状态:动态的

运行中的
位置:被调度到

内存中执行
举例:双击QQ后

正在运行的QQ程序


进程的组成

一个进程由三部分组成:
进程的组成
① PCB

进程控制块 ⭐⭐
② 程序段

Program
③ 数据段

Data
Process Control Block
作用:唯一标识进程
内容:进程ID、进程状态

寄存器信息等
进程要执行的代码
进程运行所需的数据

考点提示:PCB(进程控制块)是进程的核心,用于唯一标识和管理进程。


2.2 进程的三态图 ⭐⭐⭐(必考知识点)

进程的三种基本状态

进程的三种状态
① 运行态 Running
② 就绪态 Ready
③ 阻塞态 Blocked / Waiting
什么都不缺

有CPU,正在执行
只缺CPU

万事俱备,只欠东风
不光缺CPU

还缺其他资源

如IO事件


进程三态转换图 ⭐⭐⭐(核心图形)

进程创建
② 被调度

获得CPU
① 时间片到

释放CPU
③ 等待IO事件

如用户输入、文件读取
④ 等待的事件发生

重新排队
进程结束
就绪态
运行态
阻塞态
只缺CPU

排队等待调度
什么都不缺

正在执行
缺CPU和其他资源

等待IO事件


状态转换详解

进程三态转换详解
转换① 运行态→就绪态
转换② 就绪态→运行态
转换③ 运行态→阻塞态
转换④ 阻塞态→就绪态
触发条件:时间片用完
原因:分时调度

每个进程只能运行

一个时间片 如100微秒
结果:释放CPU

进入就绪队列排队
触发条件:被调度器选中
原因:轮到该进程运行
结果:获得CPU

开始执行
触发条件:等待某个

外部事件 最常见:等待IO
举例:程序需要用户输入数据

程序需要读取文件

程序需要网络响应
结果:CPU不会傻等

将进程置为阻塞态

去运行其他进程
触发条件:等待的

事件发生了
举例:用户输入完成

文件读取完成

网络响应到达
结果:进入就绪队列

等待再次被调度


重要规则(考试常考)⭐⭐⭐

进程三态转换规则
规则1:阻塞态不能

直接到运行态 ⭐⭐⭐
规则2:就绪态不能

直接到阻塞态 ⭐⭐⭐
❌ 错误:

阻塞态 ──直接──> 运行态
✅ 正确:

阻塞态 → 就绪态 → 运行态
原因:想要获得CPU

必须先进入就绪队列排队
❌ 错误:

就绪态 ──直接──> 阻塞态
✅ 正确:

只有运行态才能进入阻塞态
原因:就绪态和阻塞态

本质上都是没有CPU
原因:只有在运行时

才会遇到需要等待的IO事件


三态图记忆技巧

状态 记忆口诀 是否有CPU 是否缺其他资源
运行态 什么都不缺 ✅ 有 ✅ 没缺
就绪态 只缺CPU ❌ 没有 ✅ 没缺
阻塞态 啥都缺 ❌ 没有 ❌ 缺IO等资源

考试技巧:遇到进程状态转换题,先画出三态图,再根据条件判断转换是否合法。


2.3 进程资源图 ⭐⭐⭐(死锁检测的核心工具)

什么是进程资源图?

定义 :进程资源图用于表示系统中进程资源之间的分配和请求关系。

作用

  1. 直观展示进程和资源的关系
  2. 判断系统是否处于死锁状态
  3. 判断系统是否可以化简(避免死锁)

进程资源图的基本元素

进程资源图的组成元素
① 资源 Resource
② 进程 Process
③ 箭头 Arrow
图形表示:长方形 □
标识:R1, R2, R3 ...
资源个数:长方形内

的圆圈数量
图形表示:圆形 ○
标识:P1, P2, P3 ...
资源 → 进程:

资源已分配给进程
进程 → 资源:

进程请求资源


进程资源图示例

已分配1个
已分配1个
已分配2个
请求1个
请求1个
R1资源

总数:2个
R2资源

总数:3个
P1进程
P2进程
P3进程

分析

  • R1:总数2个,已分配2个(P1:1, P2:1),剩余0个
  • R2:总数3个,已分配2个(P2:2),剩余1个
  • P2请求R1:但R1已没有剩余 → P2是阻塞节点
  • P3请求R2:R2还有1个剩余 → P3是非阻塞节点

如何分析进程资源图? ⭐⭐⭐(考试重点)

分析进程资源图的三步法
第一步:计算每个资源

的剩余数量
第二步:判断每个进程

是否为阻塞节点
第三步:尝试化简

进程资源图
剩余 = 总数 - 已分配数量
看出去的箭头数量
阻塞节点:请求一个

不可能得到的资源
非阻塞节点:请求的

资源有机会得到
看进来的箭头与

剩余资源的关系
从非阻塞节点开始运行
运行完释放资源
看能否让所有

进程运行完


阻塞节点 vs 非阻塞节点 ⭐⭐⭐

如何判断阻塞节点?
阻塞节点
非阻塞节点
进程请求的资源

当前系统中没有剩余
不可能得到 → 阻塞
进程请求的资源

当前系统中有剩余
有机会得到 → 非阻塞

易错点 ⚠️:

假设R2有1个剩余资源,P1和P3都请求R2,它们是阻塞节点吗?

复制代码
情况:
- R2剩余:1个
- P1请求:1个
- P3请求:1个

❌ 错误理解:两个进程抢一个资源,都是阻塞节点
✅ 正确理解:两个进程都是非阻塞节点

原因:
- 虽然不能同时满足
- 但每个进程都有机会得到这个资源
- 调度器可以选择先满足P1或P3
- 所以都是非阻塞节点

死锁检测 ⭐⭐⭐

死锁状态
所有进程都是

阻塞节点
每个进程都在等待

一个永远不会

释放的资源
典型死锁场景
资源R1:1个

资源R2:1个
P1持有R1

请求R2
P2持有R2

请求R1
P1等待P2释放R2
P2等待P1释放R1
互相等待 → 死锁 ⚠️


2.4 进程的同步与互斥 ⭐⭐⭐(PV操作)

基本概念

互斥与同步
互斥

Mutual Exclusion
同步

Synchronization
同一时间,只能有

一个进程使用某个资源
资源:临界资源
操作代码:临界区
实现方式:加锁/解锁
多个进程可以

并发执行

但有速度差异
资源可以共享

但速度不同

临界资源 ⭐:

  • 同一时间只能由一个进程访问的资源
  • 例如:打印机、共享内存、数据库记录

临界区 ⭐:

  • 对临界资源进行操作的那段程序代码
  • 注意:临界区是程序代码 ,临界资源是资源

信号量(Semaphore)⭐⭐⭐

信号量分类
互斥信号量
同步信号量
初值:1
作用:保证同一时间

只有一个进程

访问资源
初值:共享资源的数量
作用:管理可共享

资源的分配


信号量的含义
信号量S的取值含义
S >= 0
S < 0
表示可用资源的数量
表示正在阻塞等待

的进程数量
abs S = 阻塞进程数

示例理解

假设公司有3台电脑,5个程序员需要使用:

复制代码
场景分析:
- 初始:S = 3(3台电脑)
- 程序员A申请:S = 2
- 程序员B申请:S = 1
- 程序员C申请:S = 0(3台电脑用完)
- 程序员D申请:S = -1(表示1人在排队)
- 程序员E申请:S = -2(表示2人在排队)

关键理解:S < 0时,abs(S)表示有多少人在阻塞队列中排队等待。


PV操作 ⭐⭐⭐(核心考点)

S < 0
S >= 0
P操作 申请资源
第一步:S = S - 1
判断S的值
进程阻塞

进入等待队列
继续执行
S <= 0
S > 0
V操作 释放资源
第一步:S = S + 1
判断S的值
唤醒等待队列中

的一个进程
无需唤醒


为什么V操作要判断S <= 0? ⭐⭐

V操作判断S <= 0的原因
场景说明
当前状态:S = -2

表示有2个进程在排队
执行V操作:

S = -2 + 1 = -1
S = -1,仍然 <= 0
说明:还有1个进程

在排队
应该:唤醒队列中

的一个进程

总结

  • S <= 0 表示有进程在排队
  • 释放资源后,应该优先给排队的进程
  • 如果S > 0,说明没有进程排队,资源直接放回资源池

2.5 生产者-消费者问题 ⭐⭐⭐(经典同步互斥问题)

问题描述

生产商品
取出商品
生产者进程
仓库 缓冲区
消费者进程
生产商品
将商品放入仓库
容量有限
只能被独占使用

互斥访问
从仓库取出商品
消费商品


约束条件

  1. 互斥约束:仓库同一时间只能被一个进程使用(生产者或消费者)
  2. 同步约束
    • 生产者:需要有空位才能放商品
    • 消费者:需要有商品才能取商品

信号量设置

信号量定义
S0:互斥信号量
S1:同步信号量 空位数
S2:同步信号量 商品数
初值:1
作用:保证仓库的

互斥访问
初值:仓库容量 如10
作用:记录仓库的

空闲位置数
初值:0
作用:记录仓库中的

商品数量


生产者和消费者流程图

消费者 仓库 S2商品数 S1空位数 S0互斥信号量 生产者 消费者 仓库 S2商品数 S1空位数 S0互斥信号量 生产者 生产一个商品 准备消费 消费商品 P(S0) 申请仓库使用权 P(S1) 申请一个空位 将商品放入仓库 V(S2) 商品数+1 V(S0) 释放仓库 P(S0) 申请仓库使用权 P(S2) 申请一个商品 从仓库取出商品 V(S1) 空位数+1 V(S0) 释放仓库


生产者进程代码

复制代码
生产者进程:

    生产一个商品

    P(S0)  ← 申请仓库的独占使用权

    P(S1)  ← 申请一个空位

    将商品放入仓库

    V(S2)  ← 商品数量+1

    V(S0)  ← 释放仓库的使用权

消费者进程代码

复制代码
消费者进程:

    P(S0)  ← 申请仓库的独占使用权

    P(S2)  ← 申请一个商品

    从仓库取出商品

    V(S1)  ← 空位数+1

    V(S0)  ← 释放仓库的使用权

    消费商品

代码对比分析

操作 生产者 消费者 说明
第1步 生产商品 P(S0) 生产者先生产,消费者先申请仓库
第2步 P(S0) P(S2) 都申请互斥资源或同步资源
第3步 P(S1) 取出商品 生产者申请空位,消费者直接取
第4步 放入商品 V(S1) 生产者放入,消费者释放空位
第5步 V(S2) V(S0) 生产者释放商品数,消费者释放仓库
第6步 V(S0) 消费商品 生产者释放仓库,消费者消费

2.6 前驱图 ⭐⭐(进程执行顺序)

什么是前驱图?

定义 :前驱图用于表示进程之间的执行先后关系
前驱图的基本元素
节点:表示进程
有向边:表示执行顺序
A、B、C、D、E...
A → B 表示

A执行完后,B才能执行


前驱图示例

示例1:简单前驱图
进程A
进程B
进程C

说明:

  • A执行完 → B才能执行
  • B执行完 → C才能执行

示例2:复杂前驱图
进程A
进程D
进程B
进程C
进程E

说明:

  • A、B、C可以并发执行
  • A、B、C都执行完后,D才能执行
  • D执行完后,E才能执行

前驱图与PV操作的关系 ⭐⭐⭐

核心原理 :前驱图中的每一条边对应一个信号量
前驱图转换为PV操作
每条边 = 一个信号量
箭头出去 前驱 → V操作

释放信号量
箭头进来 后继 → P操作

申请信号量


示例:前驱图转PV操作
信号量S1
信号量S2
进程A
进程B
进程C
进程A代码
执行A的代码
V S1

通知B可以执行了
进程B代码
P S1

等待A执行完
执行B的代码
V S2

通知C可以执行了
进程C代码
P S2

等待B执行完
执行C的代码


多前驱情况
S1
S2
S3
S4
进程D的代码
P S1 等待A
P S2 等待B
P S3 等待C
执行D
V S4
进程A
进程D
进程B
进程C
进程E

关键理解

  • D有3个前驱(A、B、C)
  • 所以D要执行3次P操作
  • 只有A、B、C都执行完,D才能开始

2.7 进程调度算法 ⭐⭐⭐

调度算法概述

进程调度算法分类
① 时间片轮转

分时调度 ⭐⭐
② 先来先服务 FCFS
③ 优先级调度
④ 多级反馈调度 ⭐⭐
现代操作系统

普遍采用
First Come

First Served
根据进程优先级调度
时间片轮转 +

优先级的综合


1. 时间片轮转调度 ⭐⭐(分时调度)

时间片轮转
每个进程分配

固定时间片

如100微秒
进程轮流执行
进程A执行100微秒
进程B执行100微秒
进程C执行100微秒
... 循环
特点
公平:每个进程

时间相同
响应时间短:不会

长时间等待
缺点
频繁切换进程

有开销


2. 先来先服务(FCFS)

先来先服务 FCFS
按进程到达的

先后顺序执行
先到先执行
后到后执行
优点
简单易实现
公平 先来先得
缺点
可能导致长作业

阻塞短作业

护航效应

示例

复制代码
进程到达顺序:P1(需要10秒)→ P2(需要1秒)→ P3(需要1秒)

执行顺序:
P1执行10秒 → P2执行1秒 → P3执行1秒

问题:
P2和P3等待了10秒才开始执行(虽然它们只需1秒)

3. 优先级调度

优先级调度
根据进程优先级

高低决定执行顺序
高优先级先执行
低优先级后执行
分类
可剥夺 Preemptive ⭐
不可剥夺

Non-Preemptive
高优先级进程

可以抢占CPU
正在运行的

低优先级进程被暂停
高优先级进程

必须等待
当前进程运行完

才能执行


4. 多级反馈调度 ⭐⭐

原理:时间片轮转 + 优先级的综合
多级反馈调度
设置多个优先级队列
队列1:最高优先级
队列2:次高优先级
队列3:低优先级
时间片:100微秒
时间片:200微秒
时间片:400微秒
每个队列内部
时间片轮转
队列之间
优先级调度
只有高优先级队列为空

才执行低优先级队列


执行规则




多级反馈调度执行流程

  1. 新进程进入
    最高优先级队列 队列1 2. 在队列1中
    时间片轮转执行 时间片用完

还没执行完?
3. 降级到
下一个队列 队列2 进程完成
4. 在队列2中
继续执行 还没执行完?
5. 继续降级到
队列3...

优点

  • 短作业优先(在高优先级队列快速完成)
  • 长作业也不会饿死(最终会执行)
  • 兼顾公平性和效率

2.8 高级调度、中级调度、低级调度 ⭐

操作系统的三级调度
高级调度 作业调度 ⭐
中级调度 交换调度
低级调度 进程调度 ⭐⭐⭐
外存 → 内存
几乎不考
交换区 → 内存
了解即可
内存 → CPU
考试重点

就是上面讲的

进程调度算法

低级调度(进程调度):

  • 决定内存中哪个进程可以占用CPU
  • 这是我们主要学习的内容
  • 调度算法:FCFS、优先级、时间片轮转、多级反馈

💡 学习建议

本部分学习重点

  1. ⭐⭐⭐ 必须掌握(必考内容):

    • 进程三态图及状态转换规则
    • 进程资源图的分析和死锁判断
    • PV操作的原理和应用
    • 生产者-消费者问题
    • 进程调度算法
  2. ⭐⭐ 重点理解(高频考点):

    • 前驱图与PV操作的转换
    • 多级反馈调度
  3. ⭐ 了解层面(偶尔考到):

    • 三级调度

考试题型预测

知识点 题型 分值 难度 频率
进程三态图 选择/填空 2分 ⭐⭐ 很高
进程资源图与死锁 综合题 3-4分 ⭐⭐⭐ 很高
PV操作 选择/填空 2-3分 ⭐⭐⭐ 很高
生产者-消费者 综合题 4-5分 ⭐⭐⭐
前驱图 填空题 2-3分 ⭐⭐
进程调度算法 选择/计算 2-3分 ⭐⭐

记忆技巧

  1. 进程三态:运行(什么都不缺)、就绪(只缺CPU)、阻塞(啥都缺)
  2. PV操作:P减申请、V加释放
  3. 调度算法:FCFS(先来)、优先级(高低)、轮转(公平)、多级反馈(综合)

✅ 自测题

选择题

  1. 进程从运行态转换到阻塞态的原因是?

    • A. 时间片用完
    • B. 等待某个IO事件 ✓
    • C. 被调度器选中
    • D. 进程优先级降低
  2. 以下哪个状态转换是不可能的?

    • A. 运行态 → 就绪态
    • B. 就绪态 → 运行态
    • C. 就绪态 → 阻塞态 ✓
    • D. 阻塞态 → 就绪态
  3. 互斥信号量的初值一般设置为?

    • A. 0
    • B. 1 ✓
    • C. 资源数量
    • D. 进程数量
  4. 在生产者-消费者问题中,生产者执行P(S1)的含义是?

    • A. 申请仓库使用权
    • B. 申请一个空位 ✓
    • C. 申请一个商品
    • D. 释放一个空位

简答题

  1. 请说明进程三态转换的4种情况及其触发条件。

点击查看答案

  • 运行态 → 就绪态:时间片用完
  • 就绪态 → 运行态:被调度器选中
  • 运行态 → 阻塞态:等待IO事件
  • 阻塞态 → 就绪态:等待的事件发生

不可能的转换

  • 就绪态 → 阻塞态(原因:两者都没有CPU)
  • 阻塞态 → 运行态(原因:必须先排队)

  1. 什么是阻塞节点?如何判断进程资源图中的阻塞节点?

点击查看答案

阻塞节点的定义

  • 进程请求一个当前系统中没有剩余的资源
  • 不可能得到该资源

判断方法

  1. 计算资源剩余数量 = 总数 - 已分配数量
  2. 查看进程请求的资源数量
  3. 如果请求数量 > 剩余数量 → 阻塞节点
  4. 如果请求数量 <= 剩余数量 → 非阻塞节点

注意

  • 多个进程请求同一个剩余资源时,都是非阻塞节点
  • 因为调度器可以选择满足其中任何一个

  1. 为什么V操作中要判断S <= 0,而不是S < 0?

点击查看答案

原因

假设当前S = -2(有2个进程在排队)

执行V操作:

  1. S = S + 1 = -2 + 1 = -1
  2. 判断:S = -1,仍然 <= 0
  3. 说明:还有1个进程在排队等待
  4. 操作:应该唤醒队列中的一个进程

总结

  • S <= 0 表示有进程在排队
  • 释放资源后应优先给排队的进程
  • 如果S > 0,说明没有进程排队,资源放回资源池

综合题

题目:现有系统中资源R1有2个,资源R2有1个。进程P1持有R1(1个),请求R2(1个);进程P2持有R2(1个),请求R1(1个)。请问:

  1. 画出进程资源图
  2. 判断P1、P2是否为阻塞节点
  3. 判断系统是否处于死锁状态

点击查看答案

1. 进程资源图(用Mermaid绘制):
已分配1个
请求1个
已分配1个
请求1个
R1资源

总数:2个
R2资源

总数:1个
P1进程
P2进程

2. 判断阻塞节点

  • R1分析

    • 总数:2个
    • 已分配:1个(给P1)
    • 剩余:1个
  • R2分析

    • 总数:1个
    • 已分配:1个(给P2)
    • 剩余:0个
  • P1分析

    • 请求R2:1个
    • R2剩余:0个
    • 结论:P1是阻塞节点
  • P2分析

    • 请求R1:1个
    • R1剩余:1个
    • 结论:P2是非阻塞节点

3. 是否死锁

尝试化简:

  1. P2是非阻塞节点,可以运行
  2. P2运行完释放R2(1个)
  3. P1变成非阻塞节点
  4. P1可以运行完

结论:系统不是死锁状态 ✅


📝 本部分总结

本部分作为操作系统的核心考点章节,主要介绍了:

  1. 进程基本概念:进程 = 运行中的程序,由PCB + 程序段 + 数据段组成
  2. 进程三态图(⭐⭐⭐必考):运行态、就绪态、阻塞态及状态转换规则
  3. 进程资源图与死锁检测(⭐⭐⭐必考):阻塞节点判断、系统化简
  4. 进程同步与互斥(⭐⭐⭐必考):PV操作、信号量含义
  5. 生产者-消费者问题(⭐⭐⭐经典案例):完整代码实现
  6. 前驱图(⭐⭐):与PV操作的转换关系
  7. 进程调度算法(⭐⭐⭐):FCFS、优先级、时间片轮转、多级反馈

考试分值:本部分内容在考试中占2-4分,是操作系统的核心内容。

重点掌握:进程三态图、进程资源图与死锁、PV操作、生产者-消费者问题。


文档生成信息

📅 生成时间:2026-02-05

🤖 生成方式:基于思维导图、课程文稿、PDF系统化梳理(Mermaid图解版)

📖 适用对象:软考高级系统架构师考试备考

✍️ 建议:反复练习真题,重点掌握PV操作和死锁检测

🎨 图形工具:使用Mermaid绘制,支持在线预览和导出

相关推荐
Nebula_g2 小时前
线程进阶: 无人机自动防空平台开发教程(更新)
java·开发语言·数据结构·学习·算法·无人机
星期五不见面2 小时前
机器人学习!(二)ROS2-节点(7)2026/02/03
学习
狂奔蜗牛飙车2 小时前
Python学习之路-循环语句学习详解
python·学习·python学习·#python学习笔记·循环语句详解
电饭叔2 小时前
Jupyter学习中的问题--FileNotFoundError
ide·学习·jupyter
峥嵘life3 小时前
Android16 【CTS】CtsMediaCodecTestCases等一些列Media测试存在Failed项
android·linux·学习
VT.馒头4 小时前
【力扣】2722. 根据 ID 合并两个数组
javascript·算法·leetcode·职场和发展·typescript
EnglishJun4 小时前
数据结构的学习(四)---栈和队列
数据结构·学习
执着2594 小时前
力扣hot100 - 108、将有序数组转换为二叉搜索树
算法·leetcode·职场和发展
2501_901147834 小时前
学习笔记:单调递增数字求解的迭代优化与工程实践
linux·服务器·笔记·学习·算法