银行家算法---- Banker's Algorithm

银行家算法是一个避免死锁产生的算法。
以银行借贷分配策略为基础,判断并保证系统处于安全状态。

  • 客户在第一次申请贷款时,声明所需的最大资金量,在满足所有贷款需求并完成项目时,及时归还。
  • 在客户贷款数量不超过银行拥有的最大值时,银行家尽量满足顾客的需求。
  • 银行家---- 操作系统
  • 资金------资源
  • 客户----- 申请资源的线程
    银行家算法— 数据结构
  • Max(总需求量):n x m 矩阵
    线程Ti 最多请求类型R j 的资源 Max【i,j】个实例。
  • Available (剩余空闲量) : 长度为m的向量
    当前有Available【i】个类型Rj的资源实例可用
  • Allocation (已分配量) : n x m 矩阵
    线程Ti 当前分配了 Allocation 【i,j】个Rj的实例
  • Need(未来需求量 ): n x m 矩阵
    线程Ti未来需要Need 【i,j】个Rj 资源实例
    Need【i,j】=Max【i,j】-Allocation【i,j】

银行家算法: 安全状态判断

    1. Work Finish 分别是长度为m和n 的向量初始化:
      Work =Available
      Finish【i】= false for i: 1,2,…,n
    1. 寻找线程Ti :
      (a) Finish[i[= false //找出Need比Worl小的线程i
      (b) Need[i] <= Work
      没有找到满足条件的Ti ,转4
      1. Work =Work +Allocation[i](资源收回)
        Finish[i] =true
        转 2.
        // 线程 i 的资源需求量小于当前剩余空闲资源量,所以配置给它再回收。
    • 4 . 如所有线程 Ti 满足 Finish[i] == true, 则系统处于安全状态
      // 所有线程的Finish为True 表明系统处于安全状态。
      银行家算法 :
      初始化: Requesti 线程 Ti 的资源请求量
      Requesi[j] 线程Ti 请求资源Rj 的实例
      循环:
      1. 如果Requesti<= Need[i] , 转到步骤2. 否则,拒绝资源申请,因为线程已经超过了其最大要求。
      2. 如果Requesti < = Available ,转到步骤3. 否则, Ti 必须等待,因为资源不可用。
      3. 通过安全状态判断来确定是否分配资源给 Ti :
        生成一个需要判断状态是否安全的分配环境
        Avaliable = Avaliable - Request;
        Allocation[i] = Allocation [i] +Request ;
        Need[i] = Need [i] - Request;
        调用安全状态判断:
        如果返回结果安全,分配。
        否则,拒绝。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不停---

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值