死锁综述

死锁问题的本质

死锁是一种高级的占着茅坑不拉屎问题,一般的茅坑拉屎问题,如页面置换,Cache置换等,基本上都是多个对象竞争一个资源。死锁问题是多个对象竞争多个资源,并且满足互斥访问,不剥夺条件,请求并保持(这些条件是提升效率和利用工作器件的非常好的方法,不好删除条件)时就会发生相互等待,无法推进的情况。

 

本质上来说这是一个政治问题,进程就像是一个个自由公民,他们想做什么你无法预知。四个必要条件是维护公民利益和全国效率的保障,属于宪法和规矩。在这种规矩下公民会陷入一种死锁的不良状态,大家都过于讲规矩导致相互等待。

 

死锁的必要条件

互斥访问:有些设备只能允许一个进程访问,并且贡献访问容易程序出错

不剥夺条件:剥夺就像批斗地主拿地主财产,要是进程可以随意剥夺别的进程,那么谁也拿不到资源,处理低效率状态。也不是不可以。

请求并保持条件:俗称吃着碗里的看着锅里的,进程可以占有多个资源,相当于社会中的私有制。

循环等待条件:每个进程以获得的资源同时被下一个进程请求,就是死锁的关系状态。

死锁的策略

1、破坏规则条件,最初的梦想,本就与你无关(死锁预防)

既然是由于过于讲规矩导致的问题,那就破坏其中几个规矩。

但是破坏也有代价,这些规矩可以使效率上升,功过73开,随意破坏得到的总体收益不一定高于原先的。

2、操作系统进行一定干预,加一些规则,让进程们不去死锁

2.1、扁鹊他大哥算法,操作系统提前预知,有条件分发资源(死锁避免)

通过继续增加规矩来避免死锁,也就是交给操作系统来做。操作系统通过对资源请求检查来预算以下会不会死锁,不会就分配,会就不分配,属于是扁鹊的大哥了,治已病不治未病,非常高明。

代表是银行家算法:

  检验request是否大于need,大于就不分配

  检验request是否是否大于available,大于就不分配

  (关键)检验request是否满足安全性检验(即分配后的剩余资源仍然可以可以顺序解决掉所有进程)

  如果都通过,分配该资源

其中安全性算法的逻辑就像一个武林高手带着一个菜鸟闯荡江湖,菜鸟经常做错事,但是武林高手一般也不会说他,因为高手有实力帮他摆平后,高手也能完成自己的目标。只有菜鸟做到事情太过严重,武林高手都难以自保的时候,这时候武林高手才会呵斥菜鸟不要搬起石头砸自己的脚。

2.2、扁鹊算法,操作系统等到死锁后才来治病(死锁检测和解除)

诊断手段:资源分配图,输入图输出有病没病。

 

 

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

 

posted @ 2022-08-08 16:03  srid  阅读(67)  评论(0)    收藏  举报