操作系统之避免死锁的方法

2021年4月14日 5点热度 0条评论 来源: 鸟鸟Wink.

一、预防死锁—确保系统不会进入死锁的状态
死锁的预防就是:通过破坏产生死锁的四个必要条件之一,使系统不具备产生死锁的可能。
1、破坏请求条件(静分配)
事先分配资源,在进程执行之前分配所需的全部资源,进程在执行过程中不会出现新的分配请求,便不会产生死锁,简单,易于实现。但会使系统的资源利用率变低。
2、破坏不剥夺条件
进程一旦因为申请资源被阻塞,必须释放已经拥有的全部资源。
但是此进程如果已经得到了当时阻塞时想要的资源,再次接着执行时,可能原来拥有的资源已被占用,又需要申请资源,然后可能又被阻塞,可此时又需要释放已经拥有的资源,多次进入申请–阻塞–释放,周转时间变长,而且每次都需要保持进程状态,造成额外开销,使系统整体性能下降。
3、有序资源分配法
系统将所有资源按类型分配序号并排队,申请/释放资源都按照顺序进行。
所有进程申请资源必须按序号递增的顺序,资源利用率和系统吞吐量较高,但在资源管理和资源申请方面仍有问题。
例如打印机为1、磁带机为2、磁盘为3、等等。
系统要求申请进程:
1、对它所必须使用的而且属于同一类的所有资源,必须一次申请完;
2、在申请不同类资源时,必须按各类设备的编号依次申请。
例如:进程PA,使用资源的顺序是R1,R2;
进程PB,使用资源的顺序是R2,R1;
若采用动态分配有可能形成环路条件,造成死锁。
采用有序资源分配法:R1的编号为1,R2的编号为2;
PA:申请次序应是:R1,R2
PB:申请次序应是:R1,R2
这样就破坏了环路条件,避免了死锁的发生。
另外,还有死锁避免,死锁检测与恢复等。
二、避免死锁 ---- 在使用前进行判断,只允许不会产生死锁的进程申请资源
1、
动态分配资源(进程对资源的申请在执行过程中,需要时在申请)
控制进程不进入不安全区(控制进程的执行次序,资源申请分配的时机)

—OS在处理请求分配资源之前,先计算资源分配的安全性OS把系统的状态分为“安全状态”与“不安全状态”。
—所谓安全状态,是指系统能按某种进程顺序(P1,P…Pn)(称〈P1,P…Pn〉序列为安全序列),来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。如果系统无法找到这样一个安全序列,则称系统处于不安全状态。
—OS根据进程提出资源请求时的资源使用情况,按照一定的算法模拟分配,若认为分配后系统将处于“安全状态”,就实行分配;若认为分配后系统将处于“不安全状态”,就取消分配。从而保证系统处于“安全状态”,使死锁得以避免。
2、如果资源分配后会使系统进入不安全区,即使有资源也不会分配,进程申请资源时,有空闲资源且本次分配不会引起死锁,则分配资源给该进程,否则拒绝分配。当可以找到一个安全序列时系统一定是安全的,而且需要注意的两点是,安全序列不是唯一的,安全序列指的不是进程的执行次序,而是进程分配资源的次序。
3、安全状态举例
假定系统中有三个进程P1、P2和P3, 共有12台磁带机。进程P1总共要求10台磁带机,P2和P3分别要求4台和9台。假设在T0时刻,进程P1、P2和P3已分别获得5台、2台和2台磁带机,尚有3台空闲未分配,如下表所示
由安全状态向不安全状态的转换
如果不按照安全序列分配资源,则系统可能会由安全状态进入不安全状态
例如,在T0时刻以后,P3又请求1台磁带机,若此时系统把剩余3台中的1台分配给P3,则系统便进入不安全状态。因为,此时也无法再找到一个安全序列,例如,把其余的2台分配给P2,这样,在P2完成后只能释放出4台,既不能满足P1尚需5台的要求,也不能满足P3尚需6台的要求,致使它们都无法推进到完成,彼此都在等待对方释放资源,即陷入僵局,结果导致死锁。

4、
避免死锁的实质:使系统不进入“不安全状态”。
—OS采用的安全性检测算法中,较为典型的是“ 银行家算法”。
—系统进入不安全状态,不是肯定会死锁,而是有可能死锁

    原文作者:鸟鸟Wink.
    原文地址: https://blog.csdn.net/scarificed/article/details/115646062
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。