我正在从这里阅读有关银行家算法的信息,我知道检查我们是否可以将可用资源分配给进程的一个条件是检查是否Work > Need ,我想知道如果Work < Need but Work + Allocation我们可以这样做> 需要。
例如,有R1、R2、R3三个资源,我们已经分配了P1
(0,0,4),它还需要 (2,3,1) 才能完成它的工作。现在我们有 (2,3,0) 资源可用。将这些资源提供给P1
并确保没有死锁是否安全?
我正在从这里阅读有关银行家算法的信息,我知道检查我们是否可以将可用资源分配给进程的一个条件是检查是否Work > Need ,我想知道如果Work < Need but Work + Allocation我们可以这样做> 需要。
例如,有R1、R2、R3三个资源,我们已经分配了P1
(0,0,4),它还需要 (2,3,1) 才能完成它的工作。现在我们有 (2,3,0) 资源可用。将这些资源提供给P1
并确保没有死锁是否安全?
例如,有三个资源 R1、R2、R3,我们已经分配了 P1 (0,0,4),它还需要 (2,3,1) 才能完成它的工作。现在我们有 (2,3,0) 资源可用。将这些资源提供给 P1 并确保没有死锁是否安全?
不,这是不安全的,因为系统具有0
类型的资源3
( (2,3, 0 ) 中的最后一个参数),而P1
需要1
这种类型的资源 - (2,3, 1 )。
如果您的进程P1
需要所有资源,系统会将此类请求放在等待列表中(它缺少 类型的资源3
)。然后,所有其他进程也需要额外的资源,因此系统将它们的请求添加到队列中。
因此,两个进程都无法完成并释放资源,因为它们都在等待其他进程完成。由于来自的请求P1
超出了可能的范围,因此它永远不会完成,其他请求也是如此。因此,你有一个僵局的情况。