admin管理员组

文章数量:1532656

银行家算法是学习计算机操作系统中最重要的算法之一,银行家算法又称资源分配拒绝法,是用来避免死锁的。

以下用例题来解释银行家算法

题目假设:
有四家公司:进程P0、进程P1、进程P2、进程P3
一间银行:名叫系统的银行,银行有三个金库A、B、C

题目情景:四家公司因为企业发展需要,都需要向银行进行贷款,每个公司需要贷款金额不同,银行贷款给各个公司所使用的金库也不同。

此时此刻,各公司所需要的参数如公司总贷款(Claim)、公司已贷金额(Allocation)的表格所示:

公司公司总贷款(Claim)公司已贷金额(Allocation)
A    B   CA   B   C
P03    2   21   0   0
P16   1   35   1   1
P23   1   42   1   1
P34   2   20   0   2

银行还剩金额(Available):

银行还剩金额(Available)
A   B   C
1   1   2

银行(系统)为什么要给公司(进程)这样分配金额(资源)?
为了避免分配金额(资源)出现公司(进程)循环等待(死锁)的情况

什么是循环等待?就是P0公司在等待着银行分配金额,但银行的钱不够了,银行的钱都在公司P1了,但公司P1需要完成项目的钱还远远不够,要等公司P2的项目完成了把钱还给银行才可能够。

银行现在手里三个金库A、B、C都还有钱,但银行把钱分给哪个公司最合理,能最快收回资金呢?如图所示,各个公司的还需贷款(Claim-Allocation)为

公司还需贷款(Claim-Allocation)
A  B  C
P02  2  2
P11  0  2
P21  0  3
P34  2  0

因为银行剩余金额(Available)=(1,1,2)>公司P1还需要的贷款金额(Claim-Allocation)=(1,0,2)
所以银行可以把手上剩余的钱分配给公司P1

假设当银行把手上的剩余金额(Available)分配给公司P1,即银行Available=(1,1,2)-公司P0(Claim-Allocation)=(1,0,2)=(0,1,0)

此时,公司P1获得了项目所需的全部资金,即公司已经获得的资金(Calim)=(6,1,3)。当公司P1完成项目后,就把贷款的金额还给银行了。

此时银行三个金库的金额为(0,1,0)加上刚刚公司P1还回来的金额(6,1,3),即(6,2,3)

银行还剩金额(Available)
A   B   C
6   2   3

此时,各公司的情况如下

公司公司总贷款(Claim)公司已贷金额(Allocation)
A    B   CA   B   C
P03   2   21   0   0
P23   1   42   1   1
P34   2   20   0   2
公司还需贷款(Claim-Allocation)
A  B  C
P02  2  2
P21  0  3
P34  2  0

因为银行剩余金额(Available)=(6,2,3)>公司P0(Claim-Allocation)=(2,2,2)和公司P2(Claim-Allocation)=(1,0,3)和公司P3(Claim-Allocation)=(4,2,0)所以银行可以把手上剩余的钱分配给公司P0或者公司P2或者公司P3

假设当银行把手上的剩余金额(Available)分配给公司P0,即银行Available=(6,2,3)-公司P0(Claim-Allocation)=(2,2,2)=(4,0,1)

此时,公司P0获得了项目所需的全部资金,即公司已经获得的资金(Calim)=(3,2,2)。当公司P0完成项目后,就把贷款的金额还给银行了。

此时银行三个金库的金额为(4,0,1)加上刚刚还剩下的(3,2,2),即(7,2,3)

银行还剩金额(Available)
A   B   C
7  2   3

此时,各公司的情况如下

公司公司总贷款(Claim)公司已贷金额(Allocation)
A    B   CA   B   C
P23   1   42   1   1
P34   2   20   0   2
公司还需贷款(Claim-Allocation)
A  B  C
P21  0  3
P34  2  0

因为银行剩余金额(Available)=(7,2,3)>公司P2(Claim-Allocation)=(1,0,3)和公司P3(Claim-Allocation)=(4,2,0)
所以银行可以把手上剩余的钱分配给公司P2或者公司P3

银行分配给公司P2后,收回来的钱又可以分配给公司P3还需贷款的钱,这样,就把四个公司的项目所需资金都解决了

解决顺序是公司P1→公司P0→公司P2→公司P3,或者公司P1→公司P0→公司P3→公司P2,或者其他,有很多

这个顺序就是银行家算法中的安全序列,此时银行处于安全状态

至此,整个计算过程就结束了。

在操作系统的计算题考试中,常出现的几个问题是:
系统是否处于安全状态,即看一开始的时候银行(系统)还剩下的金额(资源)够不够分配给其中的一个公司(进程),或者分配之后返还的金额够不够再进行下一轮的分配(一般题目不会这样出,这是死题)

求出系统的安全序列,就如上面的解释进行计算即可

问某个公司(假设还需贷款(Claim-Allocation)=(1,1,1))能不能申请金额(资源),但银行(系统)只有(0,1,0)的储备资金,所以是不能申请

各个进程还需要的资源数,即(Claim-Allocation)

本例题是采用
操作系统教程(第五版)费翔林 骆斌 编著
P184 23题
如有问题可私聊博主或私邮博主

感谢!

本文标签: 银行家算法操作系统