银行家算法介绍

        在避免死锁问题中常常会用到银行家算法,这个算法的也是由发放贷款的计算方式而得名!就以借款为例子介绍这个算法。

以进程为例,假设有P1,P2,P3,P4,P5这5个进程想向系统请求A ,B ,C 三种资源,他们有以下几个参数:

可利用的资源Available,                                ( Available[ i , j ]代表第i个进程拥有第j种资源的量)

最大需求量Max,

已经分配的Allocation,

需求量Need

其中  :              Need[ i , j ]  = Max[ i , j ]-Allocation[ i , j ]


执行银行家算法前先要更具安全性算法对整个系统进行安全性分析,如果安全才可以执行银行家算法,否则不能进行。

安全性算法:

(1)设置两个量:

1-->工作向量Work,表示系统可提供给进程的各类资源量。执行算法开始时,Work :=Available

2-->boolean型的Finish,表示系统可否分配给进程资源,

(2)从进程中找到满足下面条件的进程Pi:

1-->  Finish[ i ]=false;

                        2-->Need[ i , j ] <= Work[ j ];

若找到执行(3),没有就执行(4)

(3) Pi获得资源,执行完后,释放资源:

Work [ j ] := Work [ j ]+Allocation[ i , j ];

Finish[ i ] :=true;

返回(2)。

(4)如果系统所有进程Finish[ i ] :=true则系统安全。


银行家算法;

      (1) 若Request i [ j ] <=Need[ i , j ],转向(2),否则请求不合理!

      (2) 若Request i [ j ] <=Allocation[ i , j ],转向(3),否则请求无法满足!

      (3)系统尝试以下计算:

Available[ j ]:=Available[ j ]-Request i[ j ];

  Allocation[ i , j ] :=Allocation[ i , j ]+Request i[ j ];

Need[ i ,j ] :=Need[ i , j ]-Request i[ j ];

(4) 系统执行安全算法,检查是否分配资源后依然安全!若安全则真正分配,若不安全恢复原本状态!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值