系统架构设计师-操作系统-避免死锁最小资源数原理模拟题
写在前面:银行家算法的核心目标是确保系统始终处于“安全状态”。
一、5个进程各需2个资源,至少多少资源避免死锁?
解题思路
根据死锁避免的资源分配公式,不发生死锁的最少资源数为:
最少资源数=k×(n−1)+1 \text{最少资源数} = k \times (n - 1) + 1 最少资源数=k×(n−1)+1
其中:
- kkk 是进程数(5个),
- nnn 是每个进程需要的资源数(2个)。
代入计算:
5×(2−1)+1=5+1=6
5 \times (2 - 1) + 1 = 5 + 1 = 6
5×(2−1)+1=5+1=6
答案
6个资源。
原理说明
- 死锁条件:当所有进程都持有部分资源且互相等待时,系统可能进入死锁状态。
- 关键逻辑:
- 若每个进程最多需要2个资源,那么分配每个进程1个资源(即 n−1n - 1n−1)后,系统已分配 5×1=55 \times 1 = 55×1=5 个资源。
- 此时若再有1个额外资源(总数为6),无论分配给哪个进程,该进程都能完成任务并释放其占用的2个资源,从而打破死锁循环。
- 验证:
- 若资源数为6,即使所有进程各占用1个资源,剩余1个资源仍可满足某个进程的需求,使其完成并释放资源,系统不会死锁。
- 若资源数少于6(如5),则每个进程可能各占用1个资源,但无法满足任何进程的剩余需求,导致死锁。
类似问题参考
- 知识库条目[1]:5个进程各需2个资源,最少资源数为6。
- 知识库条目[10]:6个进程各需3个资源,最少资源数为 6×(3−1)+1=136 \times (3 - 1) + 1 = 136×(3−1)+1=13。
此公式适用于所有类似场景,确保系统始终处于安全状态。
二、如果复杂一点,同样是5个进程,分别需要2、3、4、5、6个资源,至少多少资源避免死锁?
问题解析
当多个进程对资源的需求各不相同(如5个进程分别需要2、3、4、5、6个资源)时,避免死锁的最少资源数可通过以下方法计算:
关键公式
最少资源数=∑i=1n(Ri−1)+1 \text{最少资源数} = \sum_{i=1}^{n} (R_i - 1) + 1 最少资源数=i=1∑n(Ri−1)+1
- RiR_iRi:第 iii 个进程所需的最大资源数。
- nnn:进程总数。
计算过程
- 各进程需求:2、3、4、5、6。
- 计算 Ri−1R_i - 1Ri−1:
- 2−1=12 - 1 = 12−1=1
- 3−1=23 - 1 = 23−1=2
- 4−1=34 - 1 = 34−1=3
- 5−1=45 - 1 = 45−1=4
- 6−1=56 - 1 = 56−1=5
- 求和:1+2+3+4+5=151 + 2 + 3 + 4 + 5 = 151+2+3+4+5=15。
- 加1:15+1=1615 + 1 = 1615+1=16。
答案
16个资源。
原理说明
- 最坏情况假设:
- 每个进程都持有 Ri−1R_i - 1Ri−1 个资源(即离完成需求差1个)。
- 此时总资源占用为 ∑(Ri−1)\sum (R_i - 1)∑(Ri−1)。
- 若系统总资源等于此值,则所有进程均无法完成,可能死锁。
- 避免死锁的条件:
- 额外分配1个资源(总资源数 = ∑(Ri−1)+1\sum (R_i - 1) + 1∑(Ri−1)+1)。
- 此时至少有一个进程能获得所需资源,完成任务并释放资源,打破死锁循环。
验证示例
- 总资源数 = 16:
- 假设所有进程各持有 Ri−1R_i - 1Ri−1 个资源(即1、2、3、4、5),共15个。
- 剩余1个资源可分配给任意进程(如需6个资源的进程),使其完成任务并释放6个资源。
- 其他进程随后可逐步完成,无死锁。
- 总资源数 < 16(如15):
- 所有进程均无法满足需求,可能发生死锁。
扩展应用
此公式适用于所有资源需求不同的场景,例如:
- 3个进程需求为4、5、6 → 最少资源数 = 3+4+5+1=133 + 4 + 5 + 1 = 133+4+5+1=13。
- 6个进程需求为2、3、4、5、6、7 → 最少资源数 = 1+2+3+4+5+6+1=221+2+3+4+5+6 +1 = 221+2+3+4+5+6+1=22。
结论
通过上述公式,可快速计算出避免死锁所需的最小资源数,确保系统始终处于安全状态。