假设系统中互斥资源R的可用数为25。T0时刻进程P1、P2、P3、P4 对资源R的最大需求数、已分配资源数和尚需资源数的情况如表a所示,则系统(__)。

银行家算法是操作系统中用于避免死锁的经典算法,核心通过判断系统是否处于安全状态,即存在安全序列,来决定资源分配。计算当前可用资源时,用系统总资源减去各进程已分配资源的总和。安全状态的判定逻辑为:若存在某个进程的尚需资源数小于等于当前可用资源,即可优先为其分配资源,待该进程完成后释放其占用的全部资源,更新系统可用资源,再重复此过程,若最终所有进程都能依次完成,则系统处于安全状态。需要注意的是,不安全状态并不等同于必然死锁,但安全状态可确保系统不会进入死锁;当拟为某进程分配资源时,需先模拟分配操作,再检查是否仍能构造出安全序列,若无法构造则不可分配,反之则可执行分配。
本题考察的是银行家算法与系统安全状态(安全序列) 的判定
系统共有一种互斥资源 R,总量可用为 25;已分配给 P1、P2、P3、P4 的资源分别为 6、4、7、6 个,因此当前可用资源为 25 − (6 + 4 + 7 + 6) = 2。各进程尚需分别为 P1:4、P2:7、P3:2、P4:6。银行家算法的关键是:只要存在某个进程的“尚需 ≤ 当前可用”,就可令其完成并释放其占有的全部资源,进而推动形成安全序列。
A选项(先给 P1):当前可用仅 2,P1 尚需为 4,不能满足“尚需 ≤ 可用”的条件,无法先安全地完成 P1;若强行先给 P1 一部分(例如 1 个),可用将降至 1,仍不足以满足任何进程的尚需,系统进入不安全状态。因此该项错误。
B选项(先给 P3):当前可用为 2,恰好满足 P3 尚需 2。为 P3 分配 2 个后,P3 立即完成并释放其占有的 9 个资源,可用变为 2 − 2 + 9 = 9。此后可用 9 能满足其余任一进程的尚需,例如先满足 P1(需 4)完成后释放 10,可用变为 9 − 4 + 10 = 15;再满足 P4(需 6)释放 12,可用变为 15 − 6 + 12 = 21;最后满足 P2(需 7)释放 11。可构造安全序列 P3 → P1 → P4 → P2(或 P3 → P2 → …),因此该项正确。
C选项(P1、P3 都可以先):如上所述,P1 不能作为首个完成的进程,因为其尚需 4 > 当前可用 2;只有 P3 可以先完成。因此“P1 或 P3 都可先”的表述不成立,该项错误。
D选项(不能给 P3,因为不安全):与 B 的结论相反,先给 P3 恰恰能够使系统进入安全状态并产生安全序列,该项错误。
因此,只有先满足 P3 的需求才能保证系统处于安全状态,选项 B 正确。
