关于死锁的知识整理

死锁的规范定义

      如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。

 

死锁举例

资源死锁:

  假如两个进程都准备将扫描的文件记录到CD上,可用资源只有扫描仪一台,CD刻录机一台。A进程请求使用扫描仪,并被授权使用,B进程首先请求使用CD刻录机,也被授权使用。现在A要请求使用刻录机,该请求在B释放刻录机前被拒绝,A处于阻塞状态;而B在该情况下,非但不放弃刻录机的使用权,还继续请求使用扫描仪。于是,A和B都处于阻塞状态,并且一直处于这种状态。

通信死锁:

  A进程向B进程发送请求信息,然后阻塞直至B回复。假如此时请求信息丢失,A将阻塞以等待回复,而B会阻塞等待一个向其发送命令的请求,因此发生死锁。

活锁:

  轮询可用于进入临界区或存取资源。设想这样的场景,进程A以R1,R2的顺序请求资源,B以R2,R1的顺序请求资源。假设A请求R1并得到了其使用权,此时,B也请求R2也得到了其使用权,A进程将会一直轮询请求R2,B轮询请求R1。虽然A和B都没有处于阻塞状态,但是A与B都将不会再有任何进展,从现象上看出现了死锁,称为活锁。

 

可抢占资源与不可抢占资源

  可抢占资源可以从拥有它的进程中抢占而不会产生副作用,如存储器就是一类可抢占资源;不可抢占资源是指在不引起相关计算失败的情况下,无法从占有它的进程处抢占过来。一般来说,死锁和不可抢占资源有关。

 

资源死锁的四个必要条件

互斥条件:每个资源要么已经分配给一个进程,要么就是可用的

占有和等待条件:已经得到某个资源的进程可以再次请求新的资源

不可抢占条件:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式释放

环路等待条件:死锁发生时,系统中一定有由两个或者两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源

 

死锁检测

(1)检测资源分配图中是否有环,有环则存在死锁,此种方法适用于没种资源类型一个资源的情况。

(2)基于资源矩阵的检测算法,适用于没种类型多个资源。

 

死锁恢复的方法

(1)利用抢占恢复

(2)利用回滚恢复

(3)通过杀死进程恢复

 

死锁预防

死锁避免从本质上说是不可能的,因为它需要获知未来的请求,而这些请求一般是不可知的。考虑死锁产生的4个必要条件,只要破坏其中至少一个,那么死锁将不会发生。

互斥条件:使用假脱机技术

占有和等待条件:开始就请求全部资源

不可抢占条件:抢占资源

环路等待条件:对资源按序编号,按序请求

 

参考书籍《现代操作系统》

 

 

 

posted @ 2012-03-23 11:44  粗暴的香蕉  阅读(435)  评论(0)    收藏  举报