操作系统之进程—死锁 (六)

1.死锁产生

  • 独占性资源,如磁带机、打印机、绘图仪等硬件设备以及进程表、临界区等软件资源不能同时供多个进程使用,否则容易导致结果混乱、数据错误以及程序崩溃,因此系统一次仅允许一个进程访问独占性资源
  • 如果多个进程共享的资源为独占性资源,处理不当,就可能发生若无外力,进程永远相互等待的情况,这时就说这组进程发生了死锁

死锁例子

   两个同学同时进入只有一种书桌和一张凳子的房间学习,假设必需拥有书桌和凳子,方可学习。    如果在某个时刻,A同学申请得到书桌,而B同学申请到凳子,A和B都希望得到对方的资源,而又不肯放手已经占有的资源,这时就发生了僵持局面。

死锁的定义

  • 操作系统中的死锁指:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的事件,则称一组进程或系统此时发生了死锁
  • 所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵局状态时,若无外力作用,他们都将无法再向前推进

死锁结论

  • 参与死锁的进程最少是两个(两个以上进程才会出现死锁)
  • 参与死锁的进程至少有两个已经占有资源
  • 参与死锁的所有进程都在等待资源
  • 参与死锁的进程是当前系统中所有进程的子集

注意:如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃

处理死锁的基本方法

  • 预防死锁
  • 避免死锁
  • 检测死锁
  • 解除死锁

2.死锁预防 

产生死锁的四个必要条件

  • 互斥条件:进程互斥使用资源
  • 占有和等待条件(部分分配条件):申请新资源时不释放已占有资源
  • 不剥夺条件:一个进程不能抢夺其他进程占有的资源
  • 循环等待条件(环路条件):存在一组进程循环等待资源的现象

注意:前三个条件是死锁产生的必要条件,不是充分条件 第四个条件是前三个条件同时存在时产生的结果 只要破坏这四个条件之一,死锁就可防止

破坏互斥条件

使资源可同时访问而不是互斥使用的办法对于磁盘适用,对于磁带机、打印机等多数资源来说不仅不能破坏互斥使用条件,还要加以保证。

采用剥夺式调度方法

可以破坏第三个条件(不剥夺条件),但剥夺调度方法目前只适用于对主存资源和处理器资源的分配。

静态分配策略 (实用-3)

  • 静态分配是指一个进程必须在执行前就申请它所要的全部资源,并且直到它所要的资源都得到满足后才开始执行。
  • 降低了资源利用率,因为每个进程占有的资源中,有些资源在较后的时间里才使用,有些资源在发生例外时才使用,这样就可能造成一个进程占有了一些几乎不用的资源而使其它想用这些资源的进程产生等待。

层次分配策略(实用-4)

  • 资源被分成多个层次
  • 当进程得到某一层的一个资源后,它只能再申请较高层次的资源
  • 当进程要释放某层的一个资源时,必须先释放占有的较高层次的资源
  • 当进程得到某一层的一个资源后,它想申请该层的另一个资源时,必须先释放该层中的已占资源

3.死锁避免

  • 死锁的预防条件很苛刻,导致系统运行效率低下
  • 死锁的避免,允许系统中同时存在四个必要条件,每当进程提出资源申请时,系统要分析满足该资源请求时系统是否会发生死锁,若不会发生则实施分配,否则拒绝分配。
  • 避免死锁的主要方法是让系统处于安全状态

银行家算法

银行家算法就是避免死锁的一种典型而有效的方法

一个银行家拥有资金M,被N个客户共享,银行家对客户提出下列约束条件:

  • 1)每个客户必须预先说明自己所要求的最大资金量
  • 2)每个客户每次提出部分资金量申请和获得分配
  • 3)如果银行满足了客户对资金的最大需求量,则客户在资金运作后一定可以很快归还资金

银行家算法的基本思想

  • 系统中的所有进程进入进程集合
  • 在安全状态下系统收到进程的资源请求后,先把资源试探性分配给它
  • 系统用剩下的可用资源和进程集合中其他进程还要的资源数作比较,在进程集合中找到剩余资源能满足最大需求量的进程,从而,保证这个进程运行完毕并归还全部资源
  • 把这个进程从集合中去掉, 系统的剩余资源更多了,反复执行上述步骤
  • 最后,检查进程集合,若为空表明本次申请可行,系统处于安全状态,可实施本次分配;否则,有进程执行不完,系统处于不安全状态,本次资源分配暂不实施,让申请进程等待

银行家算法的缺点

很难在进程运行前知道其所需的资源最大量,而且系统中的进程必须是无关的,相互间没有同步要求,进程的个数和分配的资源数目应该是固定的.这些要求事先难以满足,因而银行家算法缺乏实用价值

4.死锁的检测和解除

资源分配图和死锁定理

  • 解决死锁问题的一条途径是死锁检测和解除,这种方法对资源的分配不加任何限制,也不采取死锁避免措施,但系统定时地运行一个“死锁检测”程序,判断系统内是否已出现死锁,如果检测到系统已发生了死锁,再采取措施解除它
  • 操作系统中每一时刻的系统状态都可以用进程—资源分配图来表示,进程—资源分配图是描述进程和资源间申请和分配关系的一种有向图,可用以检测系统是否处于死锁状态

死锁的解除方法

  • 立即结束所有进程的执行,并重新启动操作系统。
  • 方法简单,但以前工作全部作废,损失可能很大
  • 剥夺陷于死锁的进程占用的资源,但并不撤销它, 直至死锁解除
  • 撤销陷于死锁的所有进程,解除死锁继续运行
  • 逐个撤销陷于死锁的进程,回收其资源,直至死锁解除
  • 根据系统保存的检查点,让所有进程回退,直到足以解除死锁
  • 当检测到死锁时,如果存在某些未卷入死锁的进程,而这些进程随着建立一些新的抑制进程能执行到结束,则它们可能释放足够的资源来解除死锁

 

 

 

 

 

 

 

你可能感兴趣的:(操作系统)