操作系统——银行家算法思路

银行家算法是比较具有代表性的避免死锁的算法,那么现在就来理一下思路吧~
首先会规定几个变量:①进程个数,②资源个数,③每个资源的总大小,④目前每个进程的分配情况,⑤目前每个进程还需要的资源数,⑥当前可用的资源数。
下面先来给一个例子:
进程数为5,进程名字分别为p0,p1,p2,p3,p4,
资源数为3,每个资源的名称以及总大小分别为:A 10
B 5
C 7,
每个进程当前分配情况为:0 1 0
2 0 0
3 0 2
2 1 1
0 0 2
,每个进程还需要的资源数为:7 4 3
1 2 2
6 0 0
0 1 1
4 3 1,
当前可用的资源数为3 3 2
在这里插入图片描述(上面图片可能看的更加形象一些)
那么解题步骤如下:
①按照序号从小到大比较,从p0开始,如果某进程的Need(A,B,C)<=Available(A,B,C),那就把当前拥有的资源数分配给该进程,显然,第一次我们先把资源数分配给p1,次数Available(A,B,C)-Need(A,B,C)=(2,1,0),当p1进程运行完成之后,Available(A,B,C)=(2,1,0)+Max(3,2,2)=Available(5,3,2)
这里的Max(A,B,C)表示的是该进程的总资源数
②再将Available(5,3,2)从p0开始寻找符合条件的进程,p1已经完成了应当去除,那么之后找到的是p3,再重复①中的步骤,如此往复,直到所有进程运行完毕,所以安全顺序应当为:p1->p3->p0->p2->p4

当然还会有出现不安全的情况:
在这里插入图片描述上面表格中的内容,根据之前步骤的描述,Available(2,1,0)不能满足任何一个进程所需要的资源数,进入不安全状态,此时恢复旧数据结构,p0进行等待。

下面附上找到的一篇大佬的博客,里面有java的实现代码,也有概念解释,希望大家都可以学会:https://www.cnblogs.com/128-cdy/p/12188340.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值