面试题:请说一说银行家算法

银行家算法大致流程:

先对用户提出的请求进行合法性检验,即检查请求是否不大于需要的,是否不大于可提供的。若请求合法,则进行试分配。最后对试分配后的状态调用安全性检查算法进行安全性检查,若安全,则分配,否则不分配,恢复原来的状态,拒绝申请。

银行家算法中用到的数据结构:

可利用资源向量(availible),最大需求矩阵(max),分配矩阵(allocation),需求矩阵(need)

首先会对当前进程的请求合法性进行判断,先需求向量进行判断,如果小于等于need矩阵中对应的值那么就继续下一步,否则出错。然后判断需求向量是否小于等于availible向量,如果满足就继续下一步,否则出错。
接下来需要进行安全性检查,也就是会尝试按照进程的request向量需要为它分配资源,分配之后对need矩阵,allocation矩阵,availible向量进行更新。然后进行安全性检查,如果存在一个安全序列那么就分配资源,否则就撤销试探性分配。

安全性检查:
设置两个工作向量,一个是work初始化为availible,一个是finish向量
1.从进程中找到符合finish==false,同时need<=work的进程
如果没找到,那么说明没有安全序列,直接结束;如果找到进行下一步
2.假设当前进程可以顺利执行,直到释放所有的资源。
work向量 = work向量 + 分配给这个进程的allocation中对应的向量
Finish = true;说明这个进程进入到安全序列
然后回到第一步,递归执行
3.如果最后所有的进程的finish都是true,那么就说明有一个安全序列,否则就返回错误

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值