什么是死锁?(整理)

上一篇 / 下一篇  2012-11-22 11:29:12 / 个人分类:基础扫盲

参考链接:http://metc.gdut.edu.cn/os/oscai/chapter2/pages/ch29.htm
 
死锁:指多个进程因为竞争共享资源而造成的一种僵局,若没有外力作用,这些进程永远不会向前推进。
一般的死锁主要是由于大家一起竞争不可剥夺资源而引起的。
 
进程的安全状态和不安全状态:
1、安全状态:系统能按照某种顺序来为每个进程分配其所需要的资源,直至达到最大需求,使得每个进程都可顺利完成。
2、不安全状态:系统中不存在上述这样一个序列。
 
产生死锁的原因和必要条件:
一、原因:
1、竞争系统资源:在不释放手上资源的同时申请别人正在使用的资源,形成环路,就会产生抱死
2、进程的推进顺序不当,进入了不安全区域,使得进程推进产生死锁
 
二、产生死锁的必要条件:
1、互斥条件:进程要求对所分配的资源进行排他性控制,即在一段时间内某资源只能被一个进程所占用
2、请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放
3、不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时自己释放
4、环路等待条件:在发生死锁时,必然存在一个进程-资源的环形链(抱死)
 
解决死锁的基本方法:
只要能够使得上述4个条件其中之一不满足即可。
一、预防死锁:
1、资源一次性分配(即破坏请求和保持条件)
2、可剥夺资源:当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)
3、资源有序分配法:系统给每类资源赋予一个编号,每一个进程按照编号递增的顺序请求资源,释放则相反(递减,破坏环路等待条件)
 
二、避免死锁:
  上面几个预防死锁的策略,会严重损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得满意的性能。
  避免死锁主要是允许进程动态的申请资源,因而,系统在进行资源分配之前,预先计算好资源分配的安全性。若本次分配会导致系统进入不安全状态,则将资源分配给该进程;否则,进程等待。其中,代表算法有“银行家算法”。
 
三、检测死锁
  首先为每个进程和资源指定一个唯一的号码。
  然后建立资源分配表和进程等待表。
  通过检测算法,检测是否存在死锁。
 
四、解除死锁
  当发现有进程死锁后,便立即将它从死锁状态解脱出来,常用方法有:
1、剥夺资源:从其他进程剥夺足够数量的资源给死锁进程,以解除死锁状态
2、撤销进程:可以直接撤销死锁进程或者代价最小的进程,直到有足够的资源可用,死锁状态消除为止。
  代价标准有:优先级、运行代价、进程重要性、进程价值等。
 
 
 
 
 
 
 
 

TAG:

 

评分:0

我来说两句

Open Toolbar