Skip to content

避免死锁

目录


参考资料:


避免死锁同样是属于事先预防的策略,但并不是事先采取某种限制措施,破坏产生死锁的必要条件,而是在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。这种方法所施加的限制条件较弱,可能获得较好的系统性能,目前常用此方法来避免发生死锁。

系统安全状态

在死锁避免方法中,把系统的状态分为安全状态和不安全状态。当系统处于安全状态时,可避免发生死锁。反之,当系统处于不安全状态时,则可能进入到死锁状态。

安全状态

在该方法中,允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,才可将资源分配给进程,否则,令进程等待。

所谓安全状态,是指系统能按某种进程推进顺序(P1,P2,...,Pn)为每个进程 Pi 分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。此时称(P1,P2,...,Pn)为安全序列。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。

虽然并非所有不安全状态都必然会转为死锁状态,但当系统进入不安全状态后,就有可能进入死锁状态。反之,只要系统处于安全状态,系统不会进入死锁状态。因此,避免死锁的实质在于,系统在进行资源分配时,应使系统不进入不安全状态。

安全状态之例

假定系统中有三个进程 P1、P2 和 P3,共有 12 台磁带机。

进程 P1 总共要求 10 台磁带机,P2 和 P3 分别要求 4 台和 9 台。

假设在 T0 时刻,进程 P1、P2 和 P3 已分别获得 5 台、2 台和 2 台磁带机,尚有 3 台空闲未分配,如下表所示:

进程最大需求已分配可用
P11053
P242
P392

经分析发现,在 T0 时刻系统是安全的,因为这时存在一个安全序列(P2,P1,P3),即只要系统按此进程序列分配资源,就能使每个进程都顺利完成。

例如,将剩余的磁带机取 2 台分配给 P2,使之继续运行,待 P2 完成便可释放出 4 台磁带机,于是可用资源增至 5 台;以后再将这些全部分配给进程 P1,使之运行,待 P1 完成后,将释放出 10 台磁带机,P3 便能获得足够的资源,从而使 P1、P2、P3 每个进程都能顺利完成。

利用银行家算法避免死锁

银行家算法的思想:每当一个新进程在进入系统时,它必须申明在运行过程中,可能需要每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,再进一步计算在将这些资源分配给进程后,是否会使系统处于不安全状态。如果不会,才将资源分配给它,否则让进程等待。

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1