81、死锁的避免:银行家算法

由来与概述

  1. 该算法可以用于银行发放一笔贷款前,预测该笔贷款是否会引起银行资金周转问题。
  2. 银行的资金就类似于计算机系统的资源,贷款业务就类似于计算机的资源分配。银行家算法能预测一笔贷款业务对银行是否是安全的,该算法也能预测一次资源分配对计算机系统是否是安全的。
  3. 为实现银行家算法,系统中必须设置若干的数据结构。

数据结构

  1. 可利用资源向量Available:是一个具有m个元素的数组,其中每一个元素代表一类可利用资源的数目,其初始值为系统中该类资源的最大可用数目。其值将随着该类资源的分配与回收而荣泰改变。Available[j] = k,表示系统中现有Rj类资源k个
  2. 最大需求矩阵Max:是一个n*m的矩阵,定义了系统中n个进程中的每一个进程对m类资源的最大需求。Max(i, j) = k,表示进程i对Rj类资源的最大需求个数为k个
  3. 分配矩阵Allocation:是一个n*m的矩阵,定义了系统中每一类资源的数量。例如,Allocation(i,j) = k, 表示进程i当前对已分配Rj类资源的数目为k个
  4. 需求矩阵Need:是一个n*m的矩阵,用以表示每一个进程尚需要的各类资源数目。例如,Need[i,j] = k,表示进程i还需要Rj类资源k个,方能完成其任务

各类资源关系

Need[i, j] = Max[i ,j] - Allocation[i, j];

算法描述

在这里插入图片描述

安全性算法

  1. 设置两个工作向量:
  • 设置一个数组Finish[n]。当Finish[i] = True( 0 <= i <= n, n为系统中进程数)时,表示进程Pi可以获得其所需的全部资源,而顺利执行完成。
  • 同时需要设置一个临时变量Work,表示系统可提供给进程继续执行的资源集合。安全性算法刚开始执行时,Work := Available。
  1. 从进程集合中找到一个满足下列条件的进程:
    Finish[i] = false; 并且 Need <= Work;
    若找到满足该条件的进程,则执行步骤 3,否则执行步骤 4;
  2. 当进程Pi获得资源后,将顺利执行直至完成,并释放其所拥有的全部资源,故应该执行:
    Work := Work + Allcation;
    Finish[i] := True;
    GOTO 2;
  3. 如果所有进程的 Finish[i] = True,则表示系统处于安全状态,否则系统处于不安全状态。

要求

  • 对于每一个进程,我们都要声明它对每一类资源需求的总量;
  • 进程之间相互独立,其执行顺序取决于系统安全,而非进程间的同步要求;
  • 系统必须提供固定数量的资源供分配;
  • 进程占用资源,则不能让其退出系统;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值