第二章 操作系统知识 - 第二部分:进程管理 ⭐⭐⭐
重要提示 :进程管理是操作系统考试的最核心内容,每年必考,分值占操作系统的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 进程资源图 ⭐⭐⭐(死锁检测的核心工具)
什么是进程资源图?
定义 :进程资源图用于表示系统中进程 和资源之间的分配和请求关系。
作用:
- 直观展示进程和资源的关系
- 判断系统是否处于死锁状态
- 判断系统是否可以化简(避免死锁)
进程资源图的基本元素
进程资源图的组成元素
① 资源 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 生产者-消费者问题 ⭐⭐⭐(经典同步互斥问题)
问题描述
生产商品
取出商品
生产者进程
仓库 缓冲区
消费者进程
生产商品
将商品放入仓库
容量有限
只能被独占使用
互斥访问
从仓库取出商品
消费商品
约束条件
- 互斥约束:仓库同一时间只能被一个进程使用(生产者或消费者)
- 同步约束 :
- 生产者:需要有空位才能放商品
- 消费者:需要有商品才能取商品
信号量设置
信号量定义
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 2. 在队列1中
时间片轮转执行 时间片用完
还没执行完?
3. 降级到
下一个队列 队列2 进程完成
4. 在队列2中
继续执行 还没执行完?
5. 继续降级到
队列3...
优点:
- 短作业优先(在高优先级队列快速完成)
- 长作业也不会饿死(最终会执行)
- 兼顾公平性和效率
2.8 高级调度、中级调度、低级调度 ⭐
操作系统的三级调度
高级调度 作业调度 ⭐
中级调度 交换调度
低级调度 进程调度 ⭐⭐⭐
外存 → 内存
几乎不考
交换区 → 内存
了解即可
内存 → CPU
考试重点
就是上面讲的
进程调度算法
低级调度(进程调度):
- 决定内存中哪个进程可以占用CPU
- 这是我们主要学习的内容
- 调度算法:FCFS、优先级、时间片轮转、多级反馈
💡 学习建议
本部分学习重点
-
⭐⭐⭐ 必须掌握(必考内容):
- 进程三态图及状态转换规则
- 进程资源图的分析和死锁判断
- PV操作的原理和应用
- 生产者-消费者问题
- 进程调度算法
-
⭐⭐ 重点理解(高频考点):
- 前驱图与PV操作的转换
- 多级反馈调度
-
⭐ 了解层面(偶尔考到):
- 三级调度
考试题型预测
| 知识点 | 题型 | 分值 | 难度 | 频率 |
|---|---|---|---|---|
| 进程三态图 | 选择/填空 | 2分 | ⭐⭐ | 很高 |
| 进程资源图与死锁 | 综合题 | 3-4分 | ⭐⭐⭐ | 很高 |
| PV操作 | 选择/填空 | 2-3分 | ⭐⭐⭐ | 很高 |
| 生产者-消费者 | 综合题 | 4-5分 | ⭐⭐⭐ | 高 |
| 前驱图 | 填空题 | 2-3分 | ⭐⭐ | 中 |
| 进程调度算法 | 选择/计算 | 2-3分 | ⭐⭐ | 中 |
记忆技巧
- 进程三态:运行(什么都不缺)、就绪(只缺CPU)、阻塞(啥都缺)
- PV操作:P减申请、V加释放
- 调度算法:FCFS(先来)、优先级(高低)、轮转(公平)、多级反馈(综合)
✅ 自测题
选择题
-
进程从运行态转换到阻塞态的原因是?
- A. 时间片用完
- B. 等待某个IO事件 ✓
- C. 被调度器选中
- D. 进程优先级降低
-
以下哪个状态转换是不可能的?
- A. 运行态 → 就绪态
- B. 就绪态 → 运行态
- C. 就绪态 → 阻塞态 ✓
- D. 阻塞态 → 就绪态
-
互斥信号量的初值一般设置为?
- A. 0
- B. 1 ✓
- C. 资源数量
- D. 进程数量
-
在生产者-消费者问题中,生产者执行P(S1)的含义是?
- A. 申请仓库使用权
- B. 申请一个空位 ✓
- C. 申请一个商品
- D. 释放一个空位
简答题
- 请说明进程三态转换的4种情况及其触发条件。
点击查看答案
- 运行态 → 就绪态:时间片用完
- 就绪态 → 运行态:被调度器选中
- 运行态 → 阻塞态:等待IO事件
- 阻塞态 → 就绪态:等待的事件发生
不可能的转换:
- 就绪态 → 阻塞态(原因:两者都没有CPU)
- 阻塞态 → 运行态(原因:必须先排队)
- 什么是阻塞节点?如何判断进程资源图中的阻塞节点?
点击查看答案
阻塞节点的定义:
- 进程请求一个当前系统中没有剩余的资源
- 不可能得到该资源
判断方法:
- 计算资源剩余数量 = 总数 - 已分配数量
- 查看进程请求的资源数量
- 如果请求数量 > 剩余数量 → 阻塞节点
- 如果请求数量 <= 剩余数量 → 非阻塞节点
注意:
- 多个进程请求同一个剩余资源时,都是非阻塞节点
- 因为调度器可以选择满足其中任何一个
- 为什么V操作中要判断S <= 0,而不是S < 0?
点击查看答案
原因:
假设当前S = -2(有2个进程在排队)
执行V操作:
- S = S + 1 = -2 + 1 = -1
- 判断:S = -1,仍然 <= 0
- 说明:还有1个进程在排队等待
- 操作:应该唤醒队列中的一个进程
总结:
- S <= 0 表示有进程在排队
- 释放资源后应优先给排队的进程
- 如果S > 0,说明没有进程排队,资源放回资源池
综合题
题目:现有系统中资源R1有2个,资源R2有1个。进程P1持有R1(1个),请求R2(1个);进程P2持有R2(1个),请求R1(1个)。请问:
- 画出进程资源图
- 判断P1、P2是否为阻塞节点
- 判断系统是否处于死锁状态
点击查看答案
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. 是否死锁:
尝试化简:
- P2是非阻塞节点,可以运行
- P2运行完释放R2(1个)
- P1变成非阻塞节点
- P1可以运行完
结论:系统不是死锁状态 ✅
📝 本部分总结
本部分作为操作系统的核心考点章节,主要介绍了:
- 进程基本概念:进程 = 运行中的程序,由PCB + 程序段 + 数据段组成
- 进程三态图(⭐⭐⭐必考):运行态、就绪态、阻塞态及状态转换规则
- 进程资源图与死锁检测(⭐⭐⭐必考):阻塞节点判断、系统化简
- 进程同步与互斥(⭐⭐⭐必考):PV操作、信号量含义
- 生产者-消费者问题(⭐⭐⭐经典案例):完整代码实现
- 前驱图(⭐⭐):与PV操作的转换关系
- 进程调度算法(⭐⭐⭐):FCFS、优先级、时间片轮转、多级反馈
考试分值:本部分内容在考试中占2-4分,是操作系统的核心内容。
重点掌握:进程三态图、进程资源图与死锁、PV操作、生产者-消费者问题。
文档生成信息
📅 生成时间:2026-02-05
🤖 生成方式:基于思维导图、课程文稿、PDF系统化梳理(Mermaid图解版)
📖 适用对象:软考高级系统架构师考试备考
✍️ 建议:反复练习真题,重点掌握PV操作和死锁检测
🎨 图形工具:使用Mermaid绘制,支持在线预览和导出