麻烦了......竟然忘记了这个。
可复用资源死锁的静态分析
定义一个由若干相对独立的资源构成的集合称为组合资源,而这个集合中的每一个元素称为子资源。
当集合中的元素为相同类型时,称其为同种组合资源。
下面开始可复用资源死锁的静态分析。
可复用资源死锁的静态分析
注意:在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:你看不见我,你看不见我,你看不见我......
网友评论