死锁相关问题分析

1、死锁定义:死锁是进程死锁的简称,是两个或两个以上进程无限期地等待永远都不会发生的条件,系统处于停滞状态。
    注:死锁不仅可发生在硬件资源上,由于设计不当,也有可能发生在软件资源的使用上。
2、产生死锁的必要条件
        在系统中,如果以下4个问题同时成立,死锁就会发生
        (1)互斥条件:必须有一个资源以非共享的方式被进程持有;更确切的说,同时只有一个进程可以使用该资源。如果另一个进程请求这个资源,那么该进程必须等待这个资源被释放。
        (2)持有并等待条件:进程至少必须持有一个资源且等待获取另外的当前被其他进程持有的资源。
        (3)不可抢占条件:不可以抢占资源。已分配给某进程的资源不可被抢占,资源的释放只能是由持有者进程完成工作后自动释放。
        (4)循环等待条件:系统必然存在一条由两个或两个以上的进程组成的循环链,链中的每一个进程都在等待相关进程所占用的资源。
        注:这4个条件必须全部成立时死锁才会发生。循环等待条件意味着持有等待条件,因此这4个条件并不是完全独立的。
3、死锁处理方法之预防死锁
        如2所述,只有4个必要条件同时成立才会发生死锁。只要保证其中一个条件不会成立,就可以预防死锁。
        (1)互斥条件:必须确保对不可共享资源的互斥条件,例如多个进程不可以共享一台打印机。也就是说,可共享资源不要求互斥访问,这样共享资源就不会包含在死锁中。
        注:通常很难通过阻止互斥条件来预防死锁问题,有些资源本来就是不可已共享的。
        (2)持有并等待条件:为了确保不会发生持有并等待条件,必须确保:不论进程何时请求资源,它都不可以持有其他任何资源。
        策略一:要求进程在开始前请求并获取所有所需的资源你,以保证它在运行期间不再需要请求另外的资源。实质为资源的静态分配,也称为预分资源策略。
        策略二:允许进程只有在不占用任何资源的情况下请求资源。进程可以请求一些资源并使用它们,在它们请求其他资源之前必须释放当前持有的所有资源。也称为空资源请求策略。
        注:进程在执行前不可能知道它所需要的全部资源,进程在执行过程中是动态的、不可预测的。
        (3)不可抢占条件:不可抢占已分配给进程的资源。为确保该条件不会发生,可采用一下策略:
        策略一:持有一些资源并请求另外的资源的进程如果不能立刻获取所请求的资源,那么当前持有进程的所有资源被抢占(释放)。只有这个进程可以获取它的旧资源和所请求的资源时,才可以重新运行。
         策略二:抢占等待者的资源:如果一个进程请求一些资源,先检查这些资源是否可用,可用则分配,不可用就检查是否被分配给其他等待其他资源的进程,若如此,则从这些等待进程前瞻所需资源。
        (4)循环等待条件:确保该条件不会发生:实行资源有序分配策略,对所有资源进行分类排序,并要求进程以递增的顺序请求资源,避免进程请求、占用资源,不会出现环路。
4、死锁处理方法之避免死锁
        a、安全状态:如果系统能够以某些顺序为每一个进程分配资源(可满足进程的最大需求)并依然可以死避免死锁,那么系统的状态是安全的。
        b、资源分配图算法
        c、银行家算法
        注:这两个算法不在此叙述,之后有需求单独处理。
 
 
参考书籍:操作系统原理与实践  邹鹏  高等教育出版社
原文地址:https://www.cnblogs.com/chump-zwl/p/6962772.html