操作系统(八) 死锁

  如果一个正在等待的进程所申请的资源被其他等待进程占有,那么该等待进程有可能无法改变状态,这种情况称为死锁。

  当一组进程的每个进程等待一个事件,而这一事件只能由这一组进程的另一进程引起,则这组进程处于死锁状态。

 

一、系统模型

  系统拥有一定数量的资源,资源分成多种类型,每种类型有一定数量的实例。

  进程在使用资源前必须申请资源,在使用资源之后必须释放资源。

  开发多线程应用必须特别关注这个问题,因为多个线程可能因为竞争共享资源而容易产生死锁。

 

二、死锁的特点

  1、必要条件

  • 互斥:至少有一个资源必须处于非共享模式,即一次只有一个进程使用。如果另一资源申请该资源,那么申请进程必须延迟直到该资源释放为止。
  • 占有并等待:一个进程必须至少占有一个资源,并等待另一资源,而该资源为其他进程所占有。
  • 非抢占:资源不能被抢占,只有在进程完成其任务之后,才会释放其资源。
  • 循环等待:一组进程中一个进程等待的资源被另一个进程占有。

 

  2、资源分配图

  死锁问题可以用系统资源分配图的有向图进行更精确的描述。

  资源分配图中有两种节点和两种边。节点为:系统活动进程、系统所有资源;边为:申请边和分配边。

 

  可以证明,如果资源分配图中没有环,那么系统就没有进程死锁,如果有环,就可能存在死锁。

  如果每个资源有多个实例,那么有环不一定会出现死锁。这时只是必要条件。

  死锁出现的充要条件:

  如果每个资源类型只有一个实例,那么有环就意味着出现死锁;

  如果环涉及到一组资源类型,而每个类型只有一个实例,那么就出现了死锁

 

三、死锁的处理方法

  从原理上分析,有三种方式可以处理死锁:

  • 可以使用协议预防或避免死锁,确保系统不会进入死锁状态;
  • 可允许系统进入死锁状态,然后检测它,加以恢复;
  • 忽视这个问题,认为死锁不可能在系统内发生。

 

  死锁预防,确保至少一个必要条件不成立;

  死锁避免,要求系统事先得到有关进程申请资源和使用资源的额外信息,有了这些额外信息,可确定:对于一个申请,进程是否应等待。

 

四、死锁预防

  出现死锁有四个必要条件,确保至少一个不成立,就能预防死锁发生。

五、死锁避免

  死锁避免算法比预防算法要求低些,只要事先了解进程使用资源的情况即可。

  1、安全状态——按特定顺序为进程分配资源

  2、资源分配图算法

  3、银行家算法——需要知道每个进程所请求的每种资源的最大数量。

 

六、死锁检测

  一个系统如果既没有死锁预防也没有死锁避免,则应该提供:

  • 一个用来检查系统状态从而确定是否出现死锁的算法;
  • 一个用来从死锁状态中恢复的算法;

七、死锁恢复

  1、进程终止;

  2、资源抢占

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2018-03-24 20:24  爆炸的果核  阅读(309)  评论(0编辑  收藏  举报