目录
一、银行家算法
二、银行家算法的流程和数据结构
1.数据结构
2.步骤流程
3.安全性算法
三、举例
解题思路
答案
一、银行家算法
为了避免死锁,出现了银行家算法。
系统必须确保是否有足够的资源分配给一个进程,若有,再计算分配后系统是否会处于不安全状态,若安全,才会分配。
通俗来说,就是“我”是否有足够的钱来买一件衣服,并且还有判断剩余的钱是否让“我”的生活处于影响状态。如果有足够钱,并且不会对“我”的生活产生影响,“我”购买该衣服。
二、银行家算法的流程和数据结构
1.数据结构
①可利用资源向量Available 初值是系统中配置的该类全部可用资源数目,available[j]=k,代表现有类资源K个
②最大需求矩阵Max Max[i,j]=K,代表进程i需要类资源最大数目为K
③分配矩阵Allocation 当前已分配给每个进程的资源数
④需求矩阵Need
关系:Need[i,j]=Max[i,j]-Allocation[i,j]
2.步骤流程
是进程的请求向量。发出资源请求后,
(1)如果,继续;否则出错,超出了所需最大值
(2)如果,继续;否则等待,无足够资源
(3)试分配,判断新时刻是否安全
(4)执行安全性算法,检查是否安全
推论:
n个资源,n个并发进程共享,每个进程提出最大资源请求量x
则 n(x-1)+1<=m
当m<=n,x=1
当m>n,x=m-1/n+1
3.安全性算法
(1)设置两个向量。①工作向量Work,开始执行安全性算法时,Work=Available;
②Finish,开始时Finsh[i]=flase;足够资源时Finish[i]=true
(2)在进程中找到一个满足以下条件的进程:找到后执行步骤3
①
②
(3)当获得资源后,顺利执行直到结束,并释放资源。返回步骤2
(4)当所有进程的Finish[i]=true都满足,则处于安全状态。
三、举例
在银行算法中,若出现了以下资源分配情况,试问:
Process | Allocation | Need | Available |
P0 | 0 0 3 2 | 0 0 1 2 | 1 6 2 2 |
P1文章来源:https://www.toymoban.com/news/detail-434306.html |
1 0 0 0 | 1 7 5 0 | |
P2 | 1 3 5 4 | 2 3 5 6 | |
P3 | 0 3 3 2 | 0 6 5 2 | |
P4 | 0 0 1 4 | 0 6 5 6 |
(1)该状态是否安全;
(2)若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?
解题思路
(1)我们需要找到这个状态的一个安全序列,即找到一个序列,保证所有的进程都是安全的。安全序列的顺序可以有很多,只需保证在你找到的顺序中是可执行的即可。
例如,我观察此时刻,可用资源(available)此时只能满足P0的资源请求,所以填写P0进程资源情况,P0进程结束资源得到释放,此时的可用资源available是P0的工作向量work加上已分配向量allocation。此时可用资源available变成1 6 5 4,此时可以满足P3的资源请求。等P3结束并释放可用资源变成1 9 8 6,满足P4。以此类推,可以得到此时刻的安全序列。
(2)P2发出资源请求,此时比较请求资源request和所需资源need大小,再比较请求资源request和可用资源available大小。如果request都小,则假设可以分配,修改可用资源available,需求资源need,已分配资源allocation。再分析此时修改后是否能得到安全序列。
此题中,已经修改后的可用资源available不能满足任一一个进程的需求,所以我们找不到此时的安全序列,所以假设不成立,故不能分配资源。
答案
(1)
进程\资源情况 | work | need | allocation | work+allocation (available) |
finish |
P0 | 1 6 2 2 | 0 0 1 2 | 0 0 3 2 | 1 6 5 4 | TRUE |
P3 | 1 6 5 4 | 0 6 5 2 | 0 3 3 2 | 1 9 8 6 | TRUE |
P4 | 1 9 8 6 | 0 6 5 6 | 0 0 1 4 | 1 9 9 10 | TRUE |
P1 | 1 9 9 10 | 1 7 5 0 | 1 0 0 0 | 2 9 9 10 | TRUE |
P2 | 2 9 9 10 | 2 3 5 6 | 1 3 5 4 | 3 12 14 14 | TRUE |
因为在T0时刻存在{P0,P3,P4,P1,P2}的安全序列,所以该状态安全。
(2)
Request(1,2,2,2)<=Need(2,3,5,6)
Request(1,2,2,2)<=Available(1,6,2,2)
所以先假定可以为P2分配资源,修改available,allocation,need
此时:
Process | Allocation | Need | Available |
P0 | 0 0 3 2 | 0 0 1 2 | 0 4 0 0 |
P1 |
1 0 0 0 | 1 7 5 0 | |
P2 | 2 5 7 6 | 2 3 5 6 | |
P3 | 0 3 3 2 | 0 6 5 2 | |
P4 | 0 0 1 4 | 0 6 5 6 |
因为无法找到一个安全序列,所以不能将资源分配给它。文章来源地址https://www.toymoban.com/news/detail-434306.html
到了这里,关于操作系统-银行家算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!