死锁检测和解除

   若系统为进程分配资源时不采取任何措施,则应该是提供死锁检测和解除的手段。

 1.资源分配图:

     系统死锁,可利用资源分配图来描述。

       如上图, 用圆圈代表一个进程,用框代表一类资源。由于一种类型的资源可能有多个,用框中的一个点代表一类资源中的一个资源。从

   进程到资源的有向边叫请求边,表示该进程申请一个单位的该类资源;从资源到进程的边叫分配边,表示该类资源已经有一个资源被分配

    给了该进程。

2.死锁定理:

       可以通过将资源分配图简化的方法来检测系统状态  S  是否为死锁状态。简化方法如下:

       (1)、在资源分配图中,找到既不阻塞又不是孤点的进程 Pi(即找出一条有向边与它相连,且该有向边对应资源的申请数量小于等于系统中

                    已有空闲资源数量)。消去它所有的请求边和分配边,使之成为孤立的结点。

                    在这里要注意一个问题,判断某种资源是否有空闲,应该用它的资源数量减去它在资源分配图中的出度。

       (2)、进程 Pi 所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来的阻塞进程可以变为非阻塞进程。根据(1)中的方法进行一系列

                   简化后,若能消去图中所有的边,则称该图是可完全简化的。

          S为死锁的条件是:当且仅当 S 状态的资源分配图是不可完全简化的,该条件为死锁定理

3.死锁解除:

          一旦检测出死锁,就应立即采取相应的措施,以解除死锁。死锁解除的主要方法有:

         (1)、资源剥夺法。挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源,而处于

                     资源匮乏的状态。

         (2)、撤销进程法。强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行。

         (3)、进程回退法。让一(或多)个进程回退足以回避死锁的地步,进程回退时自愿释放资源而不是被剥夺。要求系统保持进程的历史信息,设置

                       还原点。


版权声明:本文为lierming__原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。