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

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

  • 银行家算法中的数据结构:
    ① 可利用资源向量 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
    原文作者:银行家问题
    原文地址: https://blog.csdn.net/wsq119/article/details/82219128
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞