银行家算法(避免死锁最具代表性的算法)

银行家算法(数据结构,算法思想)

  • 银行家算法中的数据结构:
    ① 可利用资源向量 Available
    ② 最大需求矩阵Max
    ③ 分配矩阵 Allocation
    ④ 需求矩阵 Need
    三个矩阵间存在下述关系:

    Needp[i,j] = Max[i,j] –Allocation[i,j]

  • 算法思想:
    (1)如果Request i[j] <= Need[i,j],便转向步骤 (2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
    (2)如果Request i[j] <= Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi须等待。
    (3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的值:

      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)系统执行安全性算法,减产此次算法分配后系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。

  • 安全性算法:
    (1)设置两个向量:

      ①工作向量Work,表示系统可提供给进程继续运行所需的各类资源数
      目,它含有m个元素,在执行安全算法开始时,Work:=Available。
    
      ② Finish,表示系统是否有足够的资源分配给进程,使之运行完成,
      开始时限做Finish[i]:=false;当有足够资源分配给进程时,再令
      Finish[i]:=true。
    

    (2)从进程集合中找到一个能满足下述条件的进程:

      ① Finish[i] = false;
      ② Need[i,j] <= Work[j];
      若找到,执行步骤(3),否则,执行步骤(4)
    

    (3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:

      Work[j]:=Work[j] + Allocation[i,j];
      Finish[i]:=true;
      go to step 2;
    

    (4)如果所有进程的Finish[i] = true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。

  • 常用解除死锁的两种方法是:① 剥夺资源; ② 撤销进程。

###例题:

在银行家算法中,若出现下述资源分配情况:

ProcessAllocationNeedAvailable
P00 0 3 20 0 1 21 6 2 2
P11 0 0 01 7 5 0
P21 3 5 42 3 5 6
P30 3 3 20 6 5 2
P40 0 1 40 6 5 6

试问:
⑴ 该状态是否安全?
⑵ 若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?

答: ⑴该状态是安全的,因为存在一个安全序列< P0P3P4P1P2>。下表为该时刻的安全序列表。

ProcessWorkNeedAllocationWork+AllocationFinish
P01 6 2 20 0 1 20 0 3 21 6 5 4true
P31 6 5 40 6 5 20 3 3 31 9 8 7true
P41 9 8 70 6 5 60 0 1 41 9 9 11true
P11 9 9 111 7 5 01 0 0 02 9 9 11true
P22 9 9 112 3 5 61 3 5 43 12 14 17true

答:⑵若进程P2提出上述请求,系统不能将资源分配给它,因为分配之后系统将进入不安全状态。

P2请求资源:P2发出请求向量Request2(1,2,2,2),系统按银行家算法进行检查:
①Request2(1,2,2,2)≤Need2(2,3,5,6);
②Request2(1,2,2,2)≤Available(1,6,2,2);
③系统暂时先假定可为P2分配资源,并修改P2的有关数据,如下表:

AllocationNeedAvailable
2 5 7 61 1 3 40 4 0 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_长风_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值