银行家算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了银行家算法相关的知识,希望对你有一定的参考价值。

处理死锁的方法:预防死锁,避免死锁,检测死锁,解除死锁

其中,避免死锁的著名算法:Dijkstra的银行家算法。(这是由于该算法能用于银行系统现金贷款的发放而得名的)

要实现该算法,系统中需要设置如下几个数据结构:

1)可利用资源向量Available。Available[j]=K表示系统中j类可用资源有K个。

2)最大需求矩阵Max。Max[i,j]=K表示进程i对j类资源的最大需求个数为K个。

3)已分配资源矩阵Allocation。Allocation[i,j]=K表示已为进程i分配J类资源K个。

4)需求矩阵Need。Need[i,j]=K表示进程i还需要请求j类资源K个。

银行家算法:

Request[i,j]=K表示进程i请求j类资源K个。

1)比较Request[i,j]与Need[i,j],如果Request[i,j]<=Need[i,j],则执行步骤2,否则认为出错,请求的数量超出需求的最大数量。

2)比较Request[i,j]与Available[j],如果Request[i,j]<=Available[j],则执行步骤3,否则进程i需要等待,系统无足够的可用资源。

3)系统尝试为进程i分配请求的j类资源K,

  available[j]:=available[j]-request[i,j]

  allocation[i,j]:=allocation[i,j]+request[i,j]

  need[i,j]:=need[i,j]-request[i,j]

4)调用安全算法,如果检测出此次分配后系统处于安全状态,则正式分配资源,否则将本次试探分配作废,所有数据量还原,放弃本次资源分配。

安全算法:

安全算法用于检测资源分配后,系统是否处于安全状态。

1)设置两个向量:

 (1)work,它表示系统可提供给进程各类资源的数目,在执行安全算法开始时,work:=available

 (2)finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始执行安全算法时,finish:=false,

当有足够的资源分配给进程时,finish:=true 

2)从进程集合中找到满足下列条件的进程:

 (1)finish:=false

 (2)need<=work

若找到,则执行步骤3,否则执行步骤4。

3)该进程可以被执行完,之后释放其占用的资源,将finish设置为true

   work:=work+allocation

   finish:=true

   go to step 2

4)若所有进程的finish都为true,则认为系统处于安全状态,否则认为此次分配结束后系统将处于不安全状态。

以上就是整个银行家算法的过程。

 

如有表达不当,敬请指正。

 

以上是关于银行家算法的主要内容,如果未能解决你的问题,请参考以下文章

银行家算法

c语言银行家算法安全性判别

关于银行家算法中部分代码不理解,请高手帮忙指点下谢谢!!!

C语言实现的操作系统银行家算法

银行家算法

银行家算法超清晰代码