操作系统中不安全状态为何并非一定转为死锁?

​ 这个问题出自与避免死锁中的安全状态和非安全状态,在讨论之前,先来解释下安全状态和非安全状态。

1.系统安全状态

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

​ 如果系统中无法找到一个安全序列,则称系统处于不安全状态

​ 我们通过一个例子来说明安全性。假定系统中有三个进程P1、P2和P3,共有12台磁带机。进程P1总共要求10台磁带机,P2和P3分别要求4台和9台。假设在T0时刻,进程P1、P2和P3已分别获得5台、2台和2台磁带机,尚有3台空闲未分配,如下表所示:

资源分配图

​ 对于上题,我们可以知道T0时刻系统是安全的,因为这是存在一个安全序列(P2,P1,P3)。

​ 如果不按照安全序列分配资源,则系统可能会有安全状态进入不安全状态。例如在T0时刻后T1时刻,P3又请求一台磁带机,如果此时分配资源给进程P3,此时的资源分配如下表所示:

资源分配图

​ 我们可以看到,在T1时刻,无法找到一个安全序列,因此在T1时刻系统处于不安全状态。

2.不安全状态和死锁的关系

​ 由上述描述,我们可以得出一个结论,只要系统处于安全状态,系统便不会进入死锁状态;但是另一句话:当系统处于不安全状态时,并非所有不安全状态都必然转换为死锁,就有点懵了。

安全状态与不安全状态图

​ 对于系统处于不安全状态,为什么不是一定会转为死锁状态?按照死锁的发生的四个必要条件:互斥条件、请求和保持条件、不可抢占条件、循环等待条件,只要其中的一个条件不满足就不会发生死锁,这也是预防死锁的理论依据。如果系统中已经设置了预防死锁的策略,那么死锁就不会产生,也就不需要避免死锁算法了,因此,设置了避免死锁策略(或者说是银行家算法)的OS,应当不会破坏四个必要条件中的任一个,这样所施加的限制条件较弱,以期望获得更好的系统性能。

​ 由上面的描述,我就在想,如果系统处于安全状态,因为临界资源的不可抢占性,高优先级进程也无法剥夺已经分配出去的进程,那么系统是怎么样才可以让如何推进都无法顺利执行完毕的“死局”得到“一线生机”呢?

​ 经过自己的思考(通过结论推过程----’囧‘),和翻看了网上的许多讨论后,觉得以下几点是比较靠谱的:

​ 可能一:进程在执行过程中,可能会提前终止。当进程处于不安全状态的时候,因为OS当前资源紧缺或者进程执行过程发生异常,导致某些进程没有继续申请资源而被终止(被kill或异常终止),这样被终止的进程就会释放资源,让OS避开这次死锁。

​ 可能二:进程在正常运行过程中,可能会提前释放部分资源。这一点,可能有些同学会疑惑,是不是破坏了请求和保持条件?其实并没有破坏了请求和保持条件,因为破坏请求和保持条件,需要OS必须保证做到:当一个进程在申请资源时,不得持有任何不可抢占资源,所以进程释放掉自己持有的部分资源是没有破坏请求和保持条件的。

​ 可能三:进程实际需要的最大资源小于声明的最大需求资源。在安全性检查算法中,使用的数据结构是需求矩阵Need和当前资源数Available,Need由最大需求矩阵Max减去已经分配的Allocation求得,Max是进程事先对自身所需资源的一个最坏情况下的预估(因为要满足运行,必定是>=实际需要的),但是在实际执行的情况中,可能进程实际上用不到这么多的资源,所以有可能就是这相差的资源数可以保证系统并非必然转换为死锁。

​ 可能四:进程申请的资源为可消耗性资源。这一点可能许多同学会懵,怎么还跑出了这么一个可消耗性资源的事,我们在资源分类的时候就讲过,资源分为可重用性资源和可消耗性资源,对于可消耗性资源,是可以在进程运行过程中产生的(比如消息),因此对于某些阻塞的进程,虽然当前资源不足,但有可能在有限的时间内可以申请到得以运行完成的资源(可消耗性资源,由别的进程执行过程中产生),因此可以释放掉自己持有的资源,让其他进程因此也可以执行完毕。

​ 以上四点是我个人总结的几点原因,个人感觉每种可能都对,查看外文文档,解释偏向于可能三,不过博主自己觉得一、二、四也是对的,毕竟答案不唯一,理论上可行就可以是答案。

3.关于死锁定理的讨论

​ 另,这里也讨论一下死锁定理:S为死锁状态的充分条件是:当且仅当S状态的资源分配图是不可完全简化的(其中S为OS在某一时刻的状态)。对于这句话,许多同学都理解错了,死锁定理实际的推导关系为:S为死锁状态==>S状态的资源分配是不可完全简化。

​ 对于死锁检测使用的方法:当资源分配图不可完全简化时,就认定系统处于死锁状态。其实是不一定对的,即当资源分配不可完全简化时,系统并非一定转换为死锁状态。其原因和上面的不安全状态相似,这也是为什么要把这里不是充要条件放到这里一起讨论。

4.总结

​ 以上所有观点都是自己的个人观点,如果有哪位大佬有不同的看法或者还有可能五、六、七,都欢迎评论区留言讨论,还请不吝赐教。


​ 又到了分隔线以下,本文到此就结束了,本文内容全部都是由博主自己进行整理并结合自身的理解进行总结,如果有什么错误,还请批评指正。

​ 本文纯属探讨理论上的可能,另,原创不易,如果能解答你的疑惑,还请点赞支持。

​ 如有兴趣,还可以查看我的其他几篇博客,都是OS的干货,喜欢的话还请点赞、评论加关注^_^。

操作系统武功修炼心法

发布了35 篇原创文章 · 获赞 268 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_34666857/article/details/104122776
今日推荐