关于死锁的简单知识
计算机中的独占性资源,在任意时刻它们只能被一个进程使用,比如磁带,打印机等。为了避免工作混乱,操作系统可以授权一个进程临时排斥其他进程访问某种资源的能力。这样一来,死锁问题也随之产生。死锁可能发生在进程之间,机器之间,数据库系统中。
大部分死锁都与资源相关。资源分为可抢占式资源和不可抢占式资源,一般来说,可抢占式资源发生死锁的概率较低。
资源死锁的4个必要条件:
1)互斥条件:指进程对所分配到的资源进行排它性使用,每个资源要么是分配给一个进程,要么是可用的。
2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
3)不可抢占条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
4)环路等待条件:指在发生死锁时,必然存在一个进程-资源的环形链,每个进程都在等待下一个进程的资源。
死锁发生时,这四个条件一定是同时满足的,如果任何一个不成立,死锁就不会发生。
对于基础的情况,我们可以通过资源分配图来判断有没有发生死锁,只需要按照请求和释放的次序一步步进行,每一步之后都检查是否包含了环路,如果有环路,就有死锁,反之,就没有。
而处理死锁,有以下几种方法:
1)死锁检测和恢复 在这种情况下,系统并不阻止死锁的发生,先是允许死锁,在检测到死锁发生后,采取措施进行恢复。
可以利用抢占恢复,回滚恢复,还可以通过杀死进程来恢复,可能代价也比较大。
2)仔细对资源进行分配,动态的避免死锁。
有一个2进程避免死锁的资源轨迹图,避开阴影部分;还有著名的银行家算法。
3)通过破坏引起死锁的4个条件之一,防止死锁产生。
破坏互斥条件:尽量少分配那些不是绝对必须的资源
破坏请求和保持条件:规定进程在开始前请求所需的全部资源。此方法目前认为是最好的。
破坏不可抢占条件:对一些资源进行合理的虚拟化,使用面较窄。
破坏环路等待条件;对资源按照顺序编号。
posted on 2017-08-21 21:31 kekoukele987 阅读(314) 评论(0) 编辑 收藏 举报