系统架构设计师-操作系统-避免死锁最小资源数原理模拟题

写在前面:银行家算法的核心目标是确保系统始终处于"安全状态"。

一、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个资源


原理说明

  1. 死锁条件:当所有进程都持有部分资源且互相等待时,系统可能进入死锁状态。
  2. 关键逻辑
    • 若每个进程最多需要2个资源,那么分配每个进程1个资源(即 n−1n - 1n−1)后,系统已分配 5×1=55 \times 1 = 55×1=5 个资源。
    • 此时若再有1个额外资源(总数为6),无论分配给哪个进程,该进程都能完成任务并释放其占用的2个资源,从而打破死锁循环。
  3. 验证
    • 若资源数为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:进程总数。

计算过程
  1. 各进程需求:2、3、4、5、6。
  2. 计算 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
  3. 求和 :1+2+3+4+5=151 + 2 + 3 + 4 + 5 = 151+2+3+4+5=15。
  4. 加1 :15+1=1615 + 1 = 1615+1=16。

答案

16个资源


原理说明

  1. 最坏情况假设
    • 每个进程都持有 Ri−1R_i - 1Ri−1 个资源(即离完成需求差1个)。
    • 此时总资源占用为 ∑(Ri−1)\sum (R_i - 1)∑(Ri−1)。
    • 若系统总资源等于此值,则所有进程均无法完成,可能死锁
  2. 避免死锁的条件
    • 额外分配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。

结论

通过上述公式,可快速计算出避免死锁所需的最小资源数 ,确保系统始终处于安全状态