死锁综述
死锁问题的本质
死锁是一种高级的占着茅坑不拉屎问题,一般的茅坑拉屎问题,如页面置换,Cache置换等,基本上都是多个对象竞争一个资源。死锁问题是多个对象竞争多个资源,并且满足互斥访问,不剥夺条件,请求并保持(这些条件是提升效率和利用工作器件的非常好的方法,不好删除条件)时就会发生相互等待,无法推进的情况。
本质上来说这是一个政治问题,进程就像是一个个自由公民,他们想做什么你无法预知。四个必要条件是维护公民利益和全国效率的保障,属于宪法和规矩。在这种规矩下公民会陷入一种死锁的不良状态,大家都过于讲规矩导致相互等待。
死锁的必要条件
互斥访问:有些设备只能允许一个进程访问,并且贡献访问容易程序出错
不剥夺条件:剥夺就像批斗地主拿地主财产,要是进程可以随意剥夺别的进程,那么谁也拿不到资源,处理低效率状态。也不是不可以。
请求并保持条件:俗称吃着碗里的看着锅里的,进程可以占有多个资源,相当于社会中的私有制。
循环等待条件:每个进程以获得的资源同时被下一个进程请求,就是死锁的关系状态。
死锁的策略
1、破坏规则条件,最初的梦想,本就与你无关(死锁预防)
既然是由于过于讲规矩导致的问题,那就破坏其中几个规矩。
但是破坏也有代价,这些规矩可以使效率上升,功过73开,随意破坏得到的总体收益不一定高于原先的。
2、操作系统进行一定干预,加一些规则,让进程们不去死锁
2.1、扁鹊他大哥算法,操作系统提前预知,有条件分发资源(死锁避免)
通过继续增加规矩来避免死锁,也就是交给操作系统来做。操作系统通过对资源请求检查来预算以下会不会死锁,不会就分配,会就不分配,属于是扁鹊的大哥了,治已病不治未病,非常高明。
代表是银行家算法:
检验request是否大于need,大于就不分配
检验request是否是否大于available,大于就不分配
(关键)检验request是否满足安全性检验(即分配后的剩余资源仍然可以可以顺序解决掉所有进程)
如果都通过,分配该资源
其中安全性算法的逻辑就像一个武林高手带着一个菜鸟闯荡江湖,菜鸟经常做错事,但是武林高手一般也不会说他,因为高手有实力帮他摆平后,高手也能完成自己的目标。只有菜鸟做到事情太过严重,武林高手都难以自保的时候,这时候武林高手才会呵斥菜鸟不要搬起石头砸自己的脚。
2.2、扁鹊算法,操作系统等到死锁后才来治病(死锁检测和解除)
诊断手段:资源分配图,输入图输出有病没病。

治疗手段:资源剥夺法,撤销进程法,进程回退法等,本质上就是打死其中几个进程,让死锁状态解除。
浙公网安备 33010602011771号