避免死锁之——银行家算法

一 概述

银行家算法是最具有代表性的避免死锁的算法,原本运用于银行系统,以确保银行在发放现金贷款时,不会发生不能满足用户需求的情况。

为了实现银行家算法,每一个新进程在进入系统时,它必须申明在运行过程中,可能需要每种资源的最大单元数目,其数目不应超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,再进一步计算在将这些资源分配给进程后,是否会使系统处于不安全状态。如果不会,才将资源分配给它,否则让进程等待。

二 银行家算法所需的数据结构

银行家算法中必须设置的四个数据结构:系统中的可利用资源,所有进程对资源的最大需求,系统中的资源分配,以及所有进程还需要多少资源的情况。

可利用资源向量Available:这是一个含有m个元素的数组,其中的每个元素代表一类可利用的资源数目。其初始值为系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Available[j] = K,则表示系统中现有的Rj类资源为K个。

最大需求矩阵Max:这是一个n*m的矩阵,它定义了系统中n个进程中的每个进程对m类可利用资源的最大需求。如果Max[i,j] = K,则表示进程i需要Rj类资源的最大数目为K。

分配矩阵Allocation:这是一个n*m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j] = K,则表示进程i当前已经分得Rj类资源的数目为K。

需求矩阵Need:同样为一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j] = K,则表示进程i还需要Rj类资源数为K才能够完成其任务。

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

三 银行家算法

设Request为进程i的请求向量,如果Request[j]=K,表示进程i需要K个Rj类型的资源。当进程i发出资源请求之后,系统需要进行下述步骤进行检查:

  1. 如果Request[j]<=Need[i,j],便转向步骤2,否则认为出错,因为它所需的资源数已经超过它所宣布的最大值。
  2. 如果Request[j]<=Available[j],便转向步骤3,否则表示尚无足够资源,i进程须等待。
  3. 系统试探着把资源分配给进程i,并对资源数根据分配情况动态进行更改。

          Available[j] = Avaiable[j] - Request[i,j];

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

          Need[i,j] = Need[i,j] - Request[j]。

系统执行的安全性检查:检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程i,并结束资源分配任务;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程i进行等待。

四 银行家算法的实现

待续

参考资料:计算机操作系统第四版 汤小丹,梁红兵,哲凤屏,汤子瀛编著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值