软考中级软件设计师高频考点:系统死锁避免与不发生死锁临界资源数计算及真题详解(附历年真题·百度网盘)
📚所属专栏:软考软件设计师 · 专题二:操作系统原理与调度管理
🎯本篇聚焦:高频考点 02 · 进程管理之死锁产生条件、银行家算法与临界资源数极值计算
🏷️考查题型:上午综合知识单选题(高频必考,分值 1~2 分)
📌核心公式:不发生死锁的最少资源数m ≥ n × ( w − 1 ) + 1 m \ge n \times (w - 1) + 1m≥n×(w−1)+1、死锁四大必要条件、安全状态序列
本文核心考点目录
- 软考中级软件设计师高频考点:系统死锁避免与不发生死锁临界资源数计算及真题详解(附历年真题·百度网盘)
- 一、 死锁产生的 4 大必要条件与应对策略
- 二、 保证系统不发生死锁的最少资源数(必考神级公式)
- 1. 极端死锁临界场景分析(鸽巢原理)
- 2. 核心公式
- 三、 历年机考典型题切片精析
- 【题型 1】不发生死锁的最少资源数计算
- 【题型 2】银行家算法安全序列判断
- 附:考点历年机考原题与复习资料
在多道程序并发执行的操作系统中,多个进程由于竞争有限的系统独占资源,或者彼此相互通信时推进顺序不当,可能导致所有进程都无限期等待他人释放资源而无法向前推进,这种僵持不下的病态现象被称为死锁(Deadlock)。
在软考软件设计师考试中,关于死锁的考查非常经典且分值稳定:要么考查死锁的 4 个必要条件,要么考查“系统保证不发生死锁的最少资源数公式”,以及银行家算法的安全序列判断。
一、 死锁产生的 4 大必要条件与应对策略
只有当以下 4 个条件同时成立时,死锁才会发生;破坏其中任意一个条件,死锁便不攻自破:
- 互斥条件(Mutual Exclusion):资源在一段时间内只能由一个进程独占访问;
- 请求与保持条件(Hold and Wait):进程已经保持了至少一个资源,但又提出了对新资源的新请求,而新资源被他人占用,此时请求进程阻塞,但对自己已有资源坚决不放;
- 不可剥夺条件(No Preemption):进程已获得的资源在未使用完之前,不能被外部强行剥夺,只能由进程自己主动释放;
- 循环等待条件(Circular Wait):必然存在一个进程-资源的环形链,链中每个进程都在等待下一个进程所占有的资源。
二、 保证系统不发生死锁的最少资源数(必考神级公式)
设系统中有n nn个并发进程,每个进程最多需要w ww个同类互斥共享资源:
1. 极端死锁临界场景分析(鸽巢原理)
- 最危险的极端死锁状态:所有的n nn个进程都刚好只差 1 个资源就能运行完毕释放,即每个进程都已经占有了w − 1 w - 1w−1个资源;
- 此时系统中所有进程占有的资源总和为:
n × ( w − 1 ) n \times (w - 1)n×(w−1) - 在这种极端僵局下,只要系统能额外再多提供 1 个可用资源,就能随便让其中任意一个进程顺利运行完毕,该进程释放所有占用的w ww个资源后,又能盘活下一个进程,打破死锁循环。
2. 核心公式
要使系统在任何并发调度情况下绝对不发生死锁,系统所必须拥有的最少资源总数m mm应满足:
m ≥ n × ( w − 1 ) + 1 m \ge n \times (w - 1) + 1m≥n×(w−1)+1
三、 历年机考典型题切片精析
【题型 1】不发生死锁的最少资源数计算
【题干】:某系统中有 5 个并发进程竞争同类独占资源,每个进程最大需要 3 个该类资源。若要保证系统在任何情况下都不会发生死锁,则该系统至少需要提供( )个该类资源。
A. 10
B. 11
C. 15
D. 16
【名师解析】:
已知并发进程数n = 5 n = 5n=5,每个进程最大需要资源数w = 3 w = 3w=3。
代入不发生死锁的最少资源数公式:
m ≥ n × ( w − 1 ) + 1 m \ge n \times (w - 1) + 1m≥n×(w−1)+1
m ≥ 5 × ( 3 − 1 ) + 1 = 5 × 2 + 1 = 11 m \ge 5 \times (3 - 1) + 1 = 5 \times 2 + 1 = 11m≥5×(3−1)+1=5×2+1=11
- 极限分析:每个进程占有 2 个资源时(共耗费5 × 2 = 10 5 \times 2 = 105×2=10个),系统全卡死;此时只要系统有第 11 个资源,分配给任意一个进程就能破局。
故正确答案选B。
【题型 2】银行家算法安全序列判断
【题干】:设系统中有 3 种资源 A、B、C 和 5 个进程 P0、P1、P2、P3、P4。某时刻系统的 Allocation(已分配矩阵)、Need(尚需矩阵)以及 Available(可用资源向量)如下表所示:
| 进程 | Allocation (A, B, C) | Need (A, B, C) | Available (A, B, C) |
|---|---|---|---|
| P0 | 0, 1, 0 | 7, 4, 3 | 3, 3, 2 |
| P1 | 2, 0, 0 | 1, 2, 2 | - |
| P2 | 3, 0, 2 | 6, 0, 0 | - |
| P3 | 2, 1, 1 | 0, 1, 1 | - |
| P4 | 0, 0, 2 | 4, 3, 1 | - |
此时系统是否存在安全序列?下列序列中属于安全序列的是( A )。
A. P1 ➔ P3 ➔ P4 ➔ P2 ➔ P0
B. P0 ➔ P1 ➔ P2 ➔ P3 ➔ P4
C. P2 ➔ P1 ➔ P3 ➔ P4 ➔ P0
D. P4 ➔ P2 ➔ P1 ➔ P3 ➔ P0
【名师解析】:
当前可用资源向量Available = ( 3 , 3 , 2 ) \text{Available} = (3, 3, 2)Available=(3,3,2):
- 第一步:比对各进程的 Need 需求向量:
- P0 需要 (7,4,3) > (3,3,2),无法满足;
- P1 需要 (1,2,2)≤ \le≤(3,3,2),可以满足!将资源分配给 P1,P1 运行完毕后释放资源,新的可用资源:
Available = ( 3 , 3 , 2 ) + ( 2 , 0 , 0 ) = ( 5 , 3 , 2 ) \text{Available} = (3,3,2) + (2,0,0) = (5, 3, 2)Available=(3,3,2)+(2,0,0)=(5,3,2)
- 第二步:继续比对剩余进程:
- P3 需要 (0,1,1)≤ \le≤(5,3,2),可以满足!P3 运行完毕释放资源:
Available = ( 5 , 3 , 2 ) + ( 2 , 1 , 1 ) = ( 7 , 4 , 3 ) \text{Available} = (5,3,2) + (2,1,1) = (7, 4, 3)Available=(5,3,2)+(2,1,1)=(7,4,3)
- P3 需要 (0,1,1)≤ \le≤(5,3,2),可以满足!P3 运行完毕释放资源:
- 第三步:
- P4 需要 (4,3,1)≤ \le≤(7,4,3),可以满足!释放后Available = ( 7 , 4 , 3 ) + ( 0 , 0 , 2 ) = ( 7 , 4 , 5 ) \text{Available} = (7,4,3) + (0,0,2) = (7, 4, 5)Available=(7,4,3)+(0,0,2)=(7,4,5);
- 第四步:
- P2 需要 (6,0,0)≤ \le≤(7,4,5),满足!释放后Available = ( 10 , 4 , 7 ) \text{Available} = (10, 4, 7)Available=(10,4,7);
- 第五步:
- P0 需要 (7,4,3)≤ \le≤(10,4,7),满足!全部进程顺利执行。
- 存在安全序列:P1 ➔ P3 ➔ P4 ➔ P2 ➔ P0。
故正确答案选A。
附:考点历年机考原题与复习资料
本文涉及的死锁避免与银行家算法专项历年真题解析已归档,需要可自取:
百度网盘: https://pan.baidu.com/s/1SwVEmITKHveCupjP_VH7pA 提取码: rk02