(8 分)某系统由 R1、R2 和 R3 共 3 种资源,在 T0 时刻 P1、P2、P3 和 P4 这 4 个进程对资源的占用和需求情况如下表所示,此时系统的可用资源向量为 (2,1,2)。试问:
(1)系统是否处于安全状态?如安全,请给出一个安全序列。 (2)如果此时 P1 和 P2 均发出资源请求向量 Request(1,0,1),为了保证系统的安全性,应该如何分配资源给这两个进程?说明你所采用策略的原因。 (3)如果(2)中两个请求立即得到满足后,系统此刻是否处于死锁状态?
[tag_link]
**【答案】** (1)系统处于安全状态,一个安全序列为 P2→P1→P3→P4。 (2)应该先分配资源给 P2 的请求 Request(1,0,1),而对于 P1 的请求暂不分配。因为先分配给 P2 后系统仍处于安全状态,而先分配给 P1 或同时分配给两者都会导致系统进入不安全状态。 (3)如果两个请求立即得到满足,系统此刻处于死锁状态。
**【解析】** 首先,计算各进程还需资源数量: P1 还需 `(2,2,2)`, P2 还需 `(2,0,2)`, P3 还需 `(1,1,3)`, P4 还需 `(4,2,0)`。
系统当前可用资源为 `(2,1,2)`。
**(1)使用银行家算法检查安全状态** 当前可用资源 `(2,1,2)` 可满足 P2 的还需资源 `(2,0,2)`,因此 P2 可运行。 P2 完成后释放资源 `(4,1,1)`,可用资源变为 `(6,2,3)`。 此时可满足 P1 的还需资源 `(2,2,2)`,P1 运行后释放 `(1,0,0)`,可用资源变为 `(7,2,3)`。 接着可满足 P3 的还需资源 `(1,1,3)`,P3 运行后释放 `(2,0,1)`,可用资源变为 `(9,2,4)`。 最后满足 P4 的还需资源 `(4,2,0)`。
因此存在安全序列 `P2 → P1 → P3 → P4`,系统处于安全状态。
**(2)当 P1 和 P2 均请求 `Request(1,0,1)` 时** 需考虑分配顺序以确保系统安全。
**若先分配给 P1**: 分配后可用资源为 `(1,1,1)`,各进程还需资源不变,但此时所有进程的还需资源均无法被满足(P1 需 `(1,2,1)`,P2 需 `(2,0,2)`,P3 需 `(1,1,3)`,P4 需 `(4,2,0)`),系统进入不安全状态。
**若先分配给 P2**: 分配后可用资源为 `(1,1,1)`,P2 还需变为 `(1,0,1)`。 此时 P2 可运行,完成后释放资源,可用资源变为 `(6,2,3)`,后续可依次运行 P1、P3、P4,系统安全。
**若同时分配给两者**: 可用资源变为 `(0,1,0)`,所有进程均无法运行,系统不安全。
因此,为保证安全,应先分配资源给 P2。
**(3)若两个请求立即同时满足** 则可用资源为 `(0,1,0)`,各进程还需资源为: P1 `(1,2,1)`, P2 `(1,0,1)`, P3 `(1,1,3)`, P4 `(4,2,0)`。
所有进程都无法获得所需资源,且无进程可运行释放资源,因此系统处于死锁状态。