进程资源图
进程资源图是描述系统当前状态下进程与资源之间分配与请求关系的有向图,是操作系统进行死锁检测和资源调度分析的工具。本文介绍了进程资源图的定义与本质、核心组成要素、核心判读逻辑、可化简图与不可化简图的区分,并给出了练习题解析。
文章目录
一、定义与本质
进程资源图是一种描述系统当前状态下进程与资源之间分配与请求关系的有向图。它是操作系统进行死锁检测和资源调度分析的重要工具,反映了某一时刻系统资源分配的静态快照。
进程资源图的核心作用是:通过分析图中各节点的状态,判断系统是否存在死锁,以及资源分配图是否可化简。
二、核心组成要素
进程资源图由三类基本元素构成:
1. 进程节点(圆形)
用圆圈表示,内部标注进程名称(如 P1、P2)。进程是资源的需求方和执行主体。
2. 资源节点(矩形)
用方框表示,内部标注资源名称(如 R1、R2),方框内的圆点数量表示该资源的总实例数。
资源节点内的圆点个数代表该资源的总实例数(即资源总数),而非已分配或空闲数。
3. 有向边(箭头)
| 边类型 | 方向 | 含义 |
|---|---|---|
| 分配边 | 资源 → 进程 | 资源已分配给该进程 |
| 申请边 | 进程 → 资源 | 进程正在请求该资源 |

箭头方向=资源流向
资源指向进程,说明资源"流进"了进程(已分配);
进程指向资源,说明进程在"索要"资源(申请中)。
三、核心判读逻辑
1. 阻塞节点 vs 非阻塞节点
判断一个进程节点是否阻塞,核心原则是:该进程当前申请的所有资源,系统中是否都有空闲可用。
三步判读法:
- 一看申请:该进程向外发出了哪些申请边,各申请几个资源
- 二查库存:所申请资源的总数 - 已分配数(从该资源发出的分配边数)= 空闲可用数
- 三判得失:若空闲可用数 ≥ 申请数,则为非阻塞节点;否则为阻塞节点
判断阻塞时,只关注该进程申请的那些资源是否够用,与该进程已占有的资源无关。常会被误以为"进程占着资源就不会阻塞",这是常见错误。
2. 可化简图 vs 不可化简图(死锁)
化简的定义:找到一个非阻塞节点,假定它顺利执行完毕,释放其占有的全部资源,并在图中消除该进程的所有边。重复此过程。
- 可化简:经过若干轮化简,图中所有进程边都被消除 → 系统非死锁
- 不可化简:化简到某一步,剩余进程全部为阻塞节点,无法继续 → 系统死锁
死锁状态图解(不可化简):
3. 化简顺序的确定
化简顺序不唯一,但必须满足:每次选择的化简对象都是当前时刻的非阻塞节点。选择题中,正确的化简顺序应保证每一步被化简的进程在当时都是非阻塞状态。
四、解题步骤总结
| 步骤 | 操作内容 | 关键要点 |
|---|---|---|
| 1 | 统计各资源的总数、已分配数、空闲数 | 标注在图上,避免心算错误 |
| 2 | 逐个分析各进程的阻塞状态 | 只看申请的、不比已占的 |
| 3 | 找出非阻塞节点进行化简 | 每化简一步,更新资源空闲数 |
| 4 | 判断最终状态 | 全消除=非死锁,卡住=死锁 |
五、练习
题目1:下列关于进程资源图化简的说法,正确的是( )。
A. 化简顺序是唯一的,必须从编号最小的进程开始
B. 只要有进程是非阻塞的,该图就一定可以完全化简
C. 死锁状态下的进程资源图,所有进程必然都是阻塞节点
D. 化简过程中,每次应选择一个非阻塞节点进行消除
答案:D
解析:
A错,化简顺序不唯一,每次选择非阻塞节点即可;
B错,存在非阻塞节点只能说明当前可以化简一步,能否完全化简取决于后续状态;
C错,死锁状态下也可能存在个别非阻塞节点,但化简后剩余进程全部阻塞,无法完成;
D对,化简的定义即每次选择一个非阻塞节点消除。
题目2:下列关于进程资源图中进程阻塞状态判断的说法,正确的是( )。
A. 进程是否阻塞,取决于它已占有的资源是否足够多
B. 只要进程申请的资源中有一类空闲数不足,该进程就处于阻塞状态
C. 进程申请的资源空闲数足够时,该进程一定不是阻塞节点
D. 判断阻塞时,需要考虑该进程已占有的资源是否会释放
答案:B
解析:
A错,阻塞判断只看申请的资源是否够用,与已占有资源无关;
C错,因为判断非阻塞需要所有申请的资源空闲数都足够;
D错,判断阻塞时基于当前资源分配状态,不考虑未来释放。
B对,只要有一类申请的资源空闲不足,进程就无法继续,即为阻塞。
题目3:
某系统中有 3 个进程 P1、P2、P3 和 3 类资源 R1、R2、R3,资源总数及当前分配、申请情况如下:
| 资源 | 总数 | 已分配情况 | 空闲数 |
|---|---|---|---|
| R1 | 2 | P1:1, P2:1 | 0 |
| R2 | 2 | P1:1, P3:1 | 0 |
| R3 | 1 | P2:1 | 0 |
申请边:
- P1 申请 1 个 R2
- P2 申请 1 个 R1
- P3 申请 1 个 R1 和 1 个 R3
下列说法正确的是( )。
A. 系统处于死锁状态,所有进程均阻塞
B. 系统处于死锁状态,但 P3 是非阻塞节点
C. 系统不死锁,所有进程最终都可化简
D. 系统不死锁,但至少有一个进程无法执行完
答案:A
解析:
第一步统计空闲数:R1空闲=0,R2空闲=0,R3空闲=0。
第二步判断阻塞:P1申请1个R2(空闲0<1,阻塞),P2申请1个R1(空闲0<1,阻塞),P3申请1个R1和1个R3(R1空闲0<1,R3空闲0<1,至少一类不足,阻塞)。
所有进程均为阻塞节点,无法进行任何化简,因此系统处于死锁状态,A对B错。C、D错因为系统已死锁,不是不死锁状态。
题目4:
下列关于进程资源图化简与死锁关系的说法,正确的是( )。
A. 只要图中存在非阻塞节点,系统就一定不会死锁
B. 化简顺序必须唯一,否则会导致不同判断结果
C. 死锁状态下,所有进程必然都是阻塞节点
D. 若经过若干轮化简后剩余进程全部阻塞,则系统处于死锁状态
答案:D
解析:
A错,存在非阻塞节点只能说明当前可以化简一步,但化简后可能剩余进程仍形成死锁;
B错,化简顺序不唯一,只要每一步都选择当前的非阻塞节点,最终判断结果一致;
C错,在化简过程中,死锁判定前可能存在非阻塞节点,但最终化简到某一步时剩余进程全部阻塞,此时才称系统处于死锁状态;死锁状态下剩余的所有进程必然都是阻塞节点;
D对,不可化简图的定义就是剩余进程全部阻塞且无法继续,此时系统处于死锁状态。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)