假设计算机系统中有三类互斥资源 R1、R2和 R3 可用资源数分别为9、5和3,若在T0时刻系统中有P1,P2,P3,P4,P5五个进程,这些进程对资源的最大需求量和已分配资源数如下表所示。在 T0 时刻系统剩余的可用资源数分别为 (问题1) 。如果进程按 (问题2) 序列执行,那么系统状态是安全的。

银行家算法是死锁避免机制中的经典算法,核心是通过预判资源分配后的系统安全性来规避死锁。其关键知识点包括:一是剩余可用资源计算方式,系统剩余可用资源等于各类资源的总数量减去所有进程已分配对应资源的总量;二是进程尚需资源(Need)的计算,单个进程对某类资源的尚需量等于该进程对该类资源的最大需求量减去已分配量;三是安全序列的判定逻辑,从当前剩余可用资源出发,循环寻找尚需资源全部小于等于当前可用资源的进程,执行该进程并释放其已分配资源以更新可用资源,若最终所有进程都能按此方式执行完毕,那么对应的进程执行序列就是安全序列,此时系统处于安全状态。此外需明确,安全状态是系统无死锁的充分非必要条件,即处于安全状态的系统一定无死锁,但无死锁的系统未必处于安全状态;银行家算法的前提是需提前知晓所有进程的最大资源需求,这一假设在实际系统中虽难完全达成,但仍是死锁避免领域的核心理论模型。
本题考察的是死锁避免中的银行家算法与安全序列判定。
问题1
先求 T0 时刻的已分配总量:
P1(2,1,0),P2(2,1,0),P3(1,1,1),P4(1,1,1),P5(1,1,0)。
合计已分配为 (7,5,2)。系统总资源为 (9,5,3)。
剩余可用资源 = 总资源 − 已分配 = (9−7, 5−5, 3−2) = (2,0,1)。
所以选择 D。
问题2
计算各进程尚需资源 Need = Max − Alloc:
P1 Need (4,0,1);P2 Need (1,1,0);P3 Need (3,2,0);P4 Need (2,2,1);P5 Need (1,0,1)。
初始可用 (2,0,1)。
只满足 P5(1,0,1),执行后释放其分配 (1,1,0),可用变为 (3,1,1)。
此时满足 P2(1,1,0),执行释放 (2,1,0),可用 (5,2,1)。
随后 P4(2,2,1) 可执行,释放 (1,1,1),可用 (6,3,2);
再执行 P3(3,2,0),释放 (1,1,1),可用 (7,4,3);
最后 P1(4,0,1) 可执行,得到安全序列 P5→P2→P4→P3→P1。
A选项 起始为 P1,不满足初始可用,错误。
B选项 起始为 P4,不满足初始可用,错误。
C选项 给出序列与上面推导一致,正确。
D选项 第二步为 P1,在 (3,1,1) 下不满足其 Need(4,0,1),错误。
所以选择 C。
