死锁:补充

作者: 贪婪的君子 | 来源:发表于2017-05-28 10:57 被阅读21次

    麻烦了......竟然忘记了这个。

    可复用资源死锁的静态分析


    定义一个由若干相对独立的资源构成的集合称为组合资源,而这个集合中的每一个元素称为子资源
    当集合中的元素为相同类型时,称其为同种组合资源

    下面开始可复用资源死锁的静态分析。


    可复用资源死锁的静态分析

    注意:在A5步骤中如果发现环路中有相同的进程,则不能同时到达,环路不成立(一个进程无法同时处于两种状态),如果环路中有相同的被占有资源,则不能同时到达,环路不成立(一个资源同一时刻只能分配 给一个进程)。

    举个栗子:
    设可复用资源集合R = { A,B,C,D,E,F,G },进程P1,P2,P3有关资源活动如下:

    p1:c  d  ^c  a  b  ^d  ^a  ^b
    p2:d  e  ^d  b  f  ^e  ^b  ^f  
    p3:c  e  ^e  f  a  ^e  ^f  ^a
    //符号^表示释放资源
    

    做出结点状态:


    结点状态图

    画出有向弧:


    资源申请有向弧

    找到其中的环路:(P1:b:a,d)->(P2:f:e,b)->(P3:a:c,f)
    发现没有相同进程,没有相同的被占用资源,于是进一步分析,环路上的状态是否可到达。

    找到环路上对应的状态:


    环路上的状态

    推出由前一步是否能够到达此状态:

    从前一步推是否能够到达此状态
    我们发现各个进程到达环路上的状态时,都要经过一步资源申请,同时到达环路状态,意味着资源申请可以同时被满足,那么我们回退到各个资源申请的前一步,即c图这个状态也是可以同时到达的(既然申请资源都能被满足,那么去除这些资源的申请更加会有利于进程的推进)。
    我们现在假设P1先到达c图的状态,此时P2处于d命令前或者是d命令前,如果处于d命令前,那么P2是不可以得到d资源的(被进程P1占有),如果是处于d命令前,那么P1是不可以到达c图的状态的,由此推出P1不能比P2先到达
    同理,我们可以继续推出P3先于P2到达,P1先于P3到达。这是一个矛盾的状态,说明三个进程是不可以同时到达c图的状态的,无法到达c图的状态,那么环路的状态也是不可以同时到达的,故而该系统无死锁的可能性。

    同种组合资源死锁的必要条件


    必要条件,不是充分条件,即死锁发生后系统一定会出现的情况。

    系统已经死锁了,那根据我们所了解的死锁状态,死锁进程所需要的资源总量>=系统中剩余的资源总量+其他进程所占有的资源总量,这就是死锁的必要条件了。

    还有一种比较麻烦的推导形式,这里就不叙述了。

    小结


    死锁问题很重要(记不清这是说第几遍了),但是有时候不需要特地的去预防死锁,或者通过一系列麻烦的算法去解锁,就像鸵鸟一样把头埋在地里,假装没看见,以为没什么危险就是了,毕竟像我们平时用电脑发现窗口无响应时的做法一样,等一会儿不就好了?(死锁产生的影响不是很严重时可以这样做)

    开会的时候
    领导:这个项目都有谁经手过?
    内心OS:你看不见我,你看不见我,你看不见我......

    相关文章

      网友评论

        本文标题:死锁:补充

        本文链接:https://www.haomeiwen.com/subject/pkacfxtx.html