死锁:补充

来源:互联网 发布:网络的弊辩论赛资料 编辑:程序博客网 时间:2024/05/20 08:24

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

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


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

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

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

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

p1:c  d  ^c  a  b  ^d  ^a  ^bp2: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:你看不见我,你看不见我,你看不见我……