银行家算法---- 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;
        调用安全状态判断:
        如果返回结果安全,分配。
        否则,拒绝。

你可能感兴趣的:(操作系统)