假定系统中有5个进程 P0 , P1 , P2 , P3,P4 和 4种资源A、B、C、D,若出现如表所示资源分配[1]情况。进 已分配到 尚需资 当前可用-|||-程 的资源 源需求 资源数-|||-PO (1,1,1,0) (0,3,3,1) (0,3,2,2)-|||-P1 (0,2,3,1) (0,3,4,2)-|||-P2 (0,2,1,2) 1,0,3,4)-|||-P3 (0,3,1,0) (0,3,2,0)-|||-P4 (1,0,2,1) (0,4,2,3) 问 :(1) 该状态是否安全?为什么? (2) 如果进程 P0提出资源请求 ( 0 , 0 , 0 , 1 ) 系统能否将资源分配给它?为什么?
假定系统中有5个进程 P0 , P1 , P2 , P3,P4 和 4种资源A、B、C、D,若出现如表所示资源分配[1]情况。

问 :(1) 该状态是否安全?为什么?
(2) 如果进程 P0提出资源请求 ( 0 , 0 , 0 , 1 ) 系统能否将资源分配给它?为什么?
题目解答
答案
第一个问题解析:
为了判断该状态是否安全,可以采用银行家算法来进行分析。
一、计算出各个进程还需要的资源量:

二、计算出当前可用资源量:(0,3,2,2)
三、按照银行家算法的流程,逐个分配资源并判断是否安全。
(1)可以将 P0 的资源分配出去,此时系统的可用资源为:(1,4,3,2)。
(2)可以将 P3 的资源分配出去,此时系统的可用资源为:(1,7,4,2)。
(3)可以将 P1 的资源分配出去,此时系统的可用资源为:(1,9,5,3)
(4)可以将 P2 的资源分配出去,此时系统的可用资源为:(2,9,8,7)
(5)可以将 P4 的资源分配出去,此时系统的可用资源为:(3,9,10,10)
可以看出,在按照上述顺序逐个分配资源的过程中,系统始终能够满足各个进程的资源需求,因此该状态是安全的。
所以,第一个问题答案:该状态是安全的。
第二个问题解析:
如果进程 P0 提出资源请求 (0,0,0,1),则需要判断系统是否能够将资源分配给它而不破坏系统的安全性。根据银行家算法,可以模拟一下在该状态下,系统是否能够将资源分配给 P0。
一,尝试将资源 (0,0,0,1) 分配给 P0,得到以下状态:

二、按照银行家算法的流程,逐个分配资源并判断是否安全。在该状态下,可以看到仅剩的资源为 (0,2,1,1),而 P1 的尚需资源需求中,有一个资源 A 的需求为3,超过了当前可用的1个资源 A,因此无法满足P1的需求。故,不能将资源 (0,0,0,1) 分配给 P0,否则会导致系统不安全。
因此,第二个问题答案:系统不能将资源 (0,0,0,1) 分配给进程 P0,否则会破坏系统的安全性。
解析
根据题目给出的进程已分配到的资源和尚需资源需求,可以计算出各个进程还需要的资源量。具体如下:
进程 尚需资源需求 PO (0,3,3,1) P1 (0,3,4,2) P2 (1,0,3,4) P3 (0,3,2,0) P4 (0,4,2,3)
步骤 2:计算出当前可用资源量
根据题目给出的当前可用资源数,可以计算出当前可用资源量。具体如下:
当前可用资源数:(0,3,2,2)
步骤 3:按照银行家算法的流程,逐个分配资源并判断是否安全
(1)可以将 P0 的资源分配出去,此时系统的可用资源为:(1,4,3,2)。
(2)可以将 P3 的资源分配出去,此时系统的可用资源为:(1,7,4,2)。
(3)可以将 P1 的资源分配出去,此时系统的可用资源为:(1,9,5,3)
(4)可以将 P2 的资源分配出去,此时系统的可用资源为:(2,9,8,7)
(5)可以将 P4 的资源分配出去,此时系统的可用资源为:(3,9,10,10)
可以看出,在按照上述顺序逐个分配资源的过程中,系统始终能够满足各个进程的资源需求,因此该状态是安全的。
步骤 4:如果进程 P0 提出资源请求 (0,0,0,1),则需要判断系统是否能够将资源分配给它而不破坏系统的安全性
根据银行家算法,可以模拟一下在该状态下,系统是否能够将资源分配给 P0。
一,尝试将资源 (0,0,0,1) 分配给 P0,得到以下状态:
进 已分配到 尚需资 当前可用 程 的资源 源需求 资源数 PO (1,1,1,1) (0,3,3,0) (0,2,1,1) P1 (0,2,3,1) (0,3,4,2) P2 (0,2,1,2) (1,0,3,4) P3 (0,3,1,0) (0,3,2,0) P4 (1,0,2,1) (0,4,2,3)
二、按照银行家算法的流程,逐个分配资源并判断是否安全。在该状态下,可以看到仅剩的资源为 (0,2,1,1),而 P1 的尚需资源需求中,有一个资源 A 的需求为3,超过了当前可用的1个资源 A,因此无法满足P1的需求。故,不能将资源 (0,0,0,1) 分配给 P0,否则会导致系统不安全。