关于死锁的简单知识

计算机中的独占性资源,在任意时刻它们只能被一个进程使用,比如磁带,打印机等。为了避免工作混乱,操作系统可以授权一个进程临时排斥其他进程访问某种资源的能力。这样一来,死锁问题也随之产生。死锁可能发生在进程之间,机器之间,数据库系统中。

大部分死锁都与资源相关。资源分为可抢占式资源和不可抢占式资源,一般来说,可抢占式资源发生死锁的概率较低。


资源死锁的4个必要条件:

1)互斥条件:指进程对所分配到的资源进行排它性使用,每个资源要么是分配给一个进程,要么是可用的。

2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

3)不可抢占条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

4)环路等待条件:指在发生死锁时,必然存在一个进程-资源的环形链,每个进程都在等待下一个进程的资源。

死锁发生时,这四个条件一定是同时满足的,如果任何一个不成立,死锁就不会发生。

对于基础的情况,我们可以通过资源分配图来判断有没有发生死锁,只需要按照请求和释放的次序一步步进行,每一步之后都检查是否包含了环路,如果有环路,就有死锁,反之,就没有。

而处理死锁,有以下几种方法:

1)死锁检测和恢复  在这种情况下,系统并不阻止死锁的发生,先是允许死锁,在检测到死锁发生后,采取措施进行恢复。

  可以利用抢占恢复,回滚恢复,还可以通过杀死进程来恢复,可能代价也比较大。

2)仔细对资源进行分配,动态的避免死锁。

  有一个2进程避免死锁的资源轨迹图,避开阴影部分;还有著名的银行家算法。

3)通过破坏引起死锁的4个条件之一,防止死锁产生。

  破坏互斥条件:尽量少分配那些不是绝对必须的资源

  破坏请求和保持条件:规定进程在开始前请求所需的全部资源。此方法目前认为是最好的。

  破坏不可抢占条件:对一些资源进行合理的虚拟化,使用面较窄。

  破坏环路等待条件;对资源按照顺序编号。

原文地址:https://www.cnblogs.com/kekoukele987/p/7406793.html