银行家算法

来源:互联网 发布:电脑壁纸 知乎 编辑:程序博客网 时间:2024/05/24 00:58

在避免死锁中,最重要的就是银行家算法了。

银行家算法中的数据结构

为了实现银行家算法,必须设置以下四个数据结构:
(1)可利用资源向量Available:其初始值是系统中所配置的该类全部可用资源的数目。
(2)最大需求矩阵Max:它定义了系统中n个进程中的每一个进程对m类资源的最大需求。
(3)分配矩阵Allocation:它定义了系统中每一类资源当前已分配给每一个进程的资源数。
(4)需求矩阵Need:用一表示每一个进程尚需的各类资源数。

银行家算法检查的步骤

Request(i)是进程P(i)的请求向量。如果Requst(i)[j] = K,表示进程P(i)需要K个R(j)类型的资源。
(1)如果Request(i)[j] <= Need[i,j],便转向步骤2,否则出错;
(2)如果Request(i)[j] <= Available[j],便转向步骤3,否则出错;
(3)系统试探着把资源分配给进程P,并修改下面数据结构中的数值:
(非常重要)
Available[j] = Avaliable[j] - Request(i)[j];
Allocation[i,j] = Allocation[i,j] + Request(i)[j];
Need[i,j] = Need[i,j] - Request(i)[j];
(4)执行*安全性算法,检查此次资源分配后系统是否处于安全状态*。安全则分配,否则分配作废。

有以下一个例子:
若在银行家算法 中,出现了下述资源分配情况:
这里写图片描述

(1)该状态是否是安全的呢?
进行安全性检查:
这里写图片描述
得到以下安全性序列(P0, P3, P4, P1, P2),所以该状态安全。

(2)若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?

按银行家算法 的步骤 :
第一步,Request(1,2,2,2) <= Need(2,3,5,6),继续第二步,否则认为出错,因为它所需要的资源数已经超过它所宣布的最大值。
第二步,Request(1,2,2,2) <= Available(1,6,2,2),继续第三步,否则表示尚无足够资源,Pi需要等待。
第三步,系统试探着把资源分配给P2,并进行下面的修改
参见图对应P2的数据:
当前Avaliable[j]:(1,6,2,2) - (1,2,2,2) … = Avaliable(0,4,0,0)
Allocation[2,j] : (1,3,5,4) + (1,2,2,2) = Allocation(2,5,7,6)
Need[2,j] : (2,3,5,6) - (1,2,2,2) = Need(1,1,3,4);
为P2分配资源后此时图的资源分配图:
这里写图片描述
最后进行安全检查:发现可用资源(0,4,0,0)不能满足任何一个进程的Need的需要。所以系统进入不安全的状态,此时不进行系统资源的分配。

所以,系统不能将资源分配给它。

0 0
原创粉丝点击