Dijkstra的银行家算法

时间:2009-11-14 17:40:00

标签: algorithm dijkstra bankers-algorithm

有人可以使用Banker算法提供解决以下问题的逐步方法吗?如何确定是否存在“安全状态”?一个过程可以“运行完成”是什么意思?

在这个例子中,我有四个进程和10个相同资源的实例。

          Resources Allocated | Resources Needed
Process A                   1                  6
Process B                   1                  5
Process C                   2                  4
Process D                   4                  7

2 个答案:

答案 0 :(得分:2)

Wikipedia

  

如果所有进程都可以完成执行(终止),则认为状态(如上例所示)是安全的。由于系统无法知道进程何时终止,或者当时它将请求多少资源,因此系统假定所有进程最终都会尝试获取其声明的最大资源并在之后很快终止。在大多数情况下,这是一个合理的假设,因为系统并不特别关注每个进程运行多长时间(至少不是从死锁避免的角度来看)。此外,如果进程在没有获取其最大资源的情况下终止,则只会使系统更容易。

当一个进程在其自身与系统之间可用的每种类型资源的数量时,可以运行完成。如果一个进程需要8个单位的给定资源,并且已经分配了5个单位,那么如果至少还有3个单位可以分配,它可以运行完成。

根据您的示例,系统正在管理单个资源,有10个单位可用。正在运行的进程已经分配了8(1 + 1 + 2 + 4)个单元,因此剩下2个单元。任何过程需要完成的数量是它的最大值,无论它已经分配了什么,所以在开始时,A需要5个(6-1),B需要4个(5-1),C需要2个以上(4- 2),D需要3个(7-4)。有2个可用,因此允许进程C运行完成,从而释放2个单元(剩下4个可用)。此时,可以运行B或D(我们假设为D)。一旦D完成,将有8个单位可用,之后可以运行A或B(我们假设A)。一旦A完成,将有9个单位可用,然后B可以运行,这将留下所有10个单位进行进一步的工作。由于我们可以选择允许运行所有进程的进程排序,因此状态被认为是“安全的”。

答案 1 :(得分:1)

  Resources Allocated | Resources Needed    claim
  Process A      1                  6            5
  Process B      1                  5            4
  Process C      2                  4            2
  Process D      4                  7            3

分配的资源总数为8 因此,尚未分配2个资源,因此分配给过程C和过程c,在完成后释放4个可以给予过程B的资源,过程B在完成重新分配5个资源后分配给过程A的过程A之后完成分配2个资源来处理D

相关问题