精华内容
下载资源
问答
  • 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生死锁,这些永远在互相等的进程称为死锁进程
  • 进程死锁原因

    2016-03-14 08:51:53
    死锁是指两个或多个并发进程中,如果每个进程有某种资源而又都等待别的进程释放它们现有保持着的...产生死锁根本原因是系统能够提供的资源个数比要求该资源的进程少,具体原因如下 系统资源不足 系统推进顺序非法
    死锁是指两个或多个并发进程中,如果每个进程有某种资源而又都等待别的进程释放它们现有保持着的资源,否则就不能向前推进。此时,每个进程都占用了一定的资源但是又不能向前推进,称这一组进程产生了死锁。简单的说就是两个或多个进程无止境的等待着,永远不会成立的条件的一种系统状态。
    
    产生死锁的根本原因是系统能够提供的资源个数比要求该资源的进程少,具体原因如下
    系统资源不足
    系统推进顺序非法
    展开全文
  • 进程死锁

    2020-12-26 11:51:19
    根本原因是:资源有限且分配不当; 竞争资源 资源分为可重用资源和消耗性资源。可重用资源在被释放后可立即分配给其他进程再次使用,如处理器、主存和各种外设等硬件资源以及文件、数据库、信号量等各种软件资源。...

    概念

    若系统中存在一组进程(两个或两个以上),且它们中的每一个都无限等待被该组进程中另一进程所占用的且永远无法释放的资源,这种现象称这一组进程处于死锁状态。

    产生死锁的原因

    根本原因是:资源有限且分配不当;

    1. 竞争资源
      资源分为可重用资源和消耗性资源。可重用资源在被释放后可立即分配给其他进程再次使用,如处理器、主存和各种外设等硬件资源以及文件、数据库、信号量等各种软件资源。消耗资源是指可以产生、被进程使用以及使用后就消失的资源,如中断、信号、消息等。可重用资源又进一步分为可剥夺资源和不可剥夺资源。可剥夺资源若已经分配给某进程且还没有被使用完毕,被剥夺后不会对该进程的运行造成有害影响。如 处理器、主存。不可剥夺资源有打印机、数据库、文件等。
    2. 进程推进顺序不当,资源数量不够也未必一定产生死锁。

    产生死锁的必要条件

    1. 互斥条件。某个资源在一段时间内只能由一个进程占用,一旦将其分配给给某进程后,必须等待该进程使用完成且主动释放它之后,才能再次分配给其他进程使用。
    2. 占有且等待条件。进程已占有至少一个资源,又申请新的资源。
    3. 不可剥夺条件:一个进程所占有的不可剥夺资源在它使用完之前,系统不能剥夺,只能由改进措施用完之后主动释放。
    4. 循环等待条件:系统中若干个进程之间对资源的占有和请求形成了循环等待的关系。

    处理死锁的基本方法

    预防死锁

    1. 破坏占有且等待条件
      保证一个进程在申请资源时不能占有其他资源。实现思路如下:
    • 静态分配资源。
      进程在获得全部资源后,才能开始执行。
      缺点:1. 进程获得的某些资源可能很长时间都不会使用,会严重降低资源利用率。2. 如果进程需要多个常用资源,可能产生饥饿现象。
    • 要求进程在不占有资源时才可以申请资源。这种相对于静态资源可以一定程度上提高资源利用率和一定程度上减少进程启动运行的延迟。
    1. 破坏不可剥夺条件(无语,,,你给人剥夺了傻子都知道不会死锁了)
    2. 破坏循环且等待条件。
      按序分配资源。对系统中所有资源类型进行线性排序并编号,通常会根据大部分进程对资源类型的使用顺序进行排序;规定如果进程整个生命周期中需要申请两个及以上资源时,则必须按序号递增顺序申请资源;如果进程需要多个同类型资源,则必须同时一起申请。

    避免死锁

    避免死锁与预防死锁同属于”预防“策略,但并不是事先规定进程申请资源的限制以破坏产生死锁的必要条件。只是在进行资源分配时动态地检测资源分配状态,判断是否能满足进程本地资源请求,防止系统进入不安全状态。
    银行家算法。

    检测和解除死锁

    死锁检测时机:

    1. 每当进程请求资源且不得不满足时就检测。这样比较浪费CPU。
    2. 周期性检测
    3. 根据CPU利用率确定是否进行检测,当系统CPU利用率低于某个阈值时进行死锁检测。

    死锁解除:

    1. 撤销进程
    • 撤销所有死锁进程
    • 一次只撤销一个死锁进程直到解除死锁为止。但是CPU开销较大,因为每撤销一个进程都需要运行死锁检测算法以确定死锁是否已经解除。
    1. 抢占资源
      逐步抢占部分死锁进程的资源给其他进程使用,并挂起被抢占资源的进程,直到解除死锁为止。需要考虑以下几个问题:
    • 在选择被抢占资源的进程时要考虑代价问题,比如进程的优先级、进程的交互性、进程所占有资源的数量、各资源已为进程所做的工作。
    • ”回滚“问题。当一个进程被抢占部分资源后,这些资源之前为进程所做的工作都作废了。因此应该将进程回滚到以前的某个安全状态。
    • 避免饥饿现象。系统往往基于某种原则来选择被抢占进程,某一个进程可能总是被选为被抢占者。
    展开全文
  • 进程死锁及解决办法 来自:...fromSearch&isFromSearchEngine=yes 一、要点提示 (1)掌握死锁的概念和产生死锁的根本原因。 (2)理解产生死锁的必要条件--以下四个条件同时具备:互斥条...

    进程死锁及解决办法

    来自:http://blog.163.com/yanenshun@126/blog/static/128388169200982444858590/?fromdm&fromSearch&isFromSearchEngine=yes

     一、要点提示

    (1) 掌握死锁的概念和产生死锁的根本原因

    (2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件

    (3) 记住解决死锁的一般方法,掌握死锁的预防和死锁的避免二者的基本思想

    (4) 掌握死锁的预防策略中资源有序分配策略

    (5) 理解进程安全序列的概念,理解死锁与安全序列的关系

    (6) 了解银行家算法

    (7) 了解资源分配图

    (8) 了解死锁的检测及恢复的思想

     

     二、内容简介

      在计算机系统中有很多一次只能由一个进程使用的资源,如打印机,磁带机,一个文件的I节点等。在多道程序设计环境中,若干进程往往要共享这类资源,而且一个进程所需要的资源不止一个。这样,就会出现若干进程竞争有限资源,又推进顺序不当,从而构成无限期循环等待的局面。这种状态就是死锁。系统发生死锁现象不仅浪费大量的系统资源,甚至导致整个系统崩溃,带来灾难性后果。所以,对于死锁问题在理论上和技术上都必须给予高度重视。

    8.1 死锁的概念  

      死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。它是计算机操作系统乃至并发程序设计中最难处理的问题之一。实际上,死锁问题不仅在计算机系统中存在,在我们日常生活中它也广泛存在。

    1.什么是死锁

      我们先看看这样一个生活中的例子:在一条河上有一座桥,桥面较窄,只能容纳一辆汽车通过,无法让两辆汽车并行。如果有两辆汽车A和B分别由桥的两端驶上该桥,则对于A车来说,它走过桥面左面的一段路(即占有了桥的一部分资源),要想过桥还须等待B车让出右边的桥面,此时A车不能前进;对于B车来说,它走过桥面右边的一段路(即占有了桥的一部分资源),要想过桥还须等待A车让出左边的桥面,此时B车也不能前进。两边的车都不倒车,结果造成互相等待对方让出桥面,但是谁也不让路,就会无休止地等下去。这种现象就是死锁。如果把汽车比做进程,桥面作为资源,那麽上述问题就描述为:进程A占有资源R1,等待进程B占有的资源Rr;进程B占有资源Rr,等待进程A占有的资源R1。而且资源R1和Rr只允许一个进程占用,即:不允许两个进程同时占用。结果,两个进程都不能继续执行,若不采取其它措施,这种循环等待状况会无限期持续下去,就发生了进程死锁。  

      在计算机系统中,涉及软件,硬件资源都可能发生死锁。例如:系统中只有一台CD-ROM驱动器和一台打印机,某一个进程占有了CD-ROM驱动器,又申请打印机;另一进程占有了打印机,还申请CD-ROM。结果,两个进程都被阻塞,永远也不能自行解除。

      所谓死锁,是指多个进程循环等待它方占有的资源而无限期地僵持下去的局面。很显然,如果没有外力的作用,那麽死锁涉及到的各个进程都将永远处于封锁状态。从上面的例子可以看出,计算机系统产生死锁的根本原因就是资源有限且操作不当。即:一种原因是系统提供的资源太少了,远不能满足并发进程对资源的需求。这种竞争资源引起的死锁是我们要讨论的核心。例如:消息是一种临时性资源。某一时刻,进程A等待进程B发来的消息,进程B等待进程C发来的消息,而进程C又等待进程A发来的消息。消息未到,A,B,C三个进程均无法向前推进,也会发生进程通信上的死锁。另一种原因是由于进程推进顺序不合适引发的死锁。资源少也未必一定产生死锁。就如同两个人过独木桥,如果两个人都要先过,在独木桥上僵持不肯后退,必然会应竞争资源产生死锁;但是,如果两个人上桥前先看一看有无对方的人在桥上,当无对方的人在桥上时自己才上桥,那麽问题就解决了。所以,如果程序设计得不合理,造成进程推进的顺序不当,也会出现死锁。

    2.产生死锁的必要条件

      从以上分析可见,如果在计算机系统中同时具备下面四个必要条件时,那麽会发生死锁。换句话说,只要下面四个条件有一个不具备,系统就不会出现死锁。

        〈1〉互斥条件。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进程主动释放它之后,其它进程才能占有该资源。这是由资源本身的属性所决定的。如独木桥就是一种独占资源,两方的人不能同时过桥。

        〈2〉不可抢占条件。进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。如过独木桥的人不能强迫对方后退,也不能非法地将对方推下桥,必须是桥上的人自己过桥后空出桥面(即主动释放占有资源),对方的人才能过桥。

        〈3〉占有且申请条件。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。还以过独木桥为例,甲乙两人在桥上相遇。甲走过一段桥面(即占有了一些资源),还需要走其余的桥面(申请新的资源),但那部分桥面被乙占有(乙走过一段桥面)。甲过不去,前进不能,又不后退;乙也处于同样的状况。

        〈4〉循环等待条件。存在一个进程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。就像前面的过独木桥问题,甲等待乙占有的桥面,而乙又等待甲占有的桥面,从而彼此循环等待。

      上面我们提到的这四个条件在死锁时会同时发生。也就是说,只要有一个必要条件不满足,则死锁就可以排除。

    8.2 死锁的预防  

      前面介绍了死锁发生时的四个必要条件,只要破坏这四个必要条件中的任意一个条件,死锁就不会发生。这就为我们解决死锁问题提供了可能。一般地,解决死锁的方法分为死锁的预防,避免,检测与恢复三种(注意:死锁的检测与恢复是一个方法)。我们将在下面分别加以介绍。

      死锁的预防是保证系统不进入死锁状态的一种策略。它的基本思想是要求进程申请资源时遵循某种协议,从而打破产生死锁的四个必要条件中的一个或几个,保证系统不会进入死锁状态。

       〈1〉打破互斥条件。即允许进程同时访问某些资源。但是,有的资源是不允许被同时访问的,像打印机等等,这是由资源本身的属性所决定的。所以,这种办法并无实用价值。

       〈2〉打破不可抢占条件。即允许进程强行从占有者那里夺取某些资源。就是说,当一个进程已占有了某些资源,它又申请新的资源,但不能立即被满足时,它必须释放所占有的全部资源,以后再重新申请。它所释放的资源可以分配给其它进程。这就相当于该进程占有的资源被隐蔽地强占了。这种预防死锁的方法实现起来困难,会降低系统性能。    

        〈3〉打破占有且申请条件。可以实行资源预先分配策略。即进程在运行前一次性地向系统申请它所需要的全部资源。如果某个进程所需的全部资源得不到满足,则不分配任何资源,此进程暂不运行。只有当系统能够满足当前进程的全部资源需求时,才一次性地将所申请的资源全部分配给该进程。由于运行的进程已占有了它所需的全部资源,所以不会发生占有资源又申请资源的现象,因此不会发生死锁。但是,这种策略也有如下缺点:

    (1)在许多情况下,一个进程在执行之前不可能知道它所需要的全部资源。这是由于进程在执行时是动态的,不可预测的;

    (2)资源利用率低。无论所分资源何时用到,一个进程只有在占有所需的全部资源后才能执行。即使有些资源最后才被该进程用到一次,但该进程在生存期间却一直占有它们,造成长期占着不用的状况。这显然是一种极大的资源浪费;

    (3)降低了进程的并发性。因为资源有限,又加上存在浪费,能分配到所需全部资源的进程个数就必然少了。    

     

    (4)打破循环等待条件,实行资源有序分配策略。采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出。进程占用了小号资源,才能申请大号资源,就不会产生环路,从而预防了死锁。这种策略与前面的策略相比,资源的利用率和系统吞吐量都有很大提高,但是也存在以下缺点:

    (1)限制了进程对资源的请求,同时给系统中所有资源合理编号也是件困难事,并增加了系统开销;

    (2)为了遵循按编号申请的次序,暂不使用的资源也需要提前申请,从而增加了进程对资源的占用时间。

    8.3 死锁的避免  

      上面我们讲到的死锁预防是排除死锁的静态策略,它使产生死锁的四个必要条件不能同时具备,从而对进程申请资源的活动加以限制,以保证死锁不会发生。下面我们介绍排除死锁的动态策略--死锁的避免,它不限制进程有关申请资源的命令,而是对进程所发出的每一个申请资源命令加以动态地检查,并根据检查结果决定是否进行资源分配。就是说,在资源分配过程中若预测有发生死锁的可能性,则加以避免。这种方法的关键是确定资源分配的安全性。

     

    1.安全序列

      我们首先引入安全序列的定义:所谓系统是安全的,是指系统中的所有进程能够按照某一种次序分配资源,并且依次地运行完毕,这种进程序列{P1,P2,...,Pn}就是安全序列。如果存在这样一个安全序列,则系统是安全的;如果系统不存在这样一个安全序列,则系统是不安全的。

      安全序列{P1,P2,...,Pn}是这样组成的:若对于每一个进程Pi,它需要的附加资源可以被系统中当前可用资源加上所有进程Pj当前占有资源之和所满足,则{P1,P2,...,Pn}为一个安全序列,这时系统处于安全状态,不会进入死锁状态。  

      虽然存在安全序列时一定不会有死锁发生,但是系统进入不安全状态(四个死锁的必要条件同时发生)也未必会产生死锁。当然,产生死锁后,系统一定处于不安全状态。 

    2.银行家算法

      这是一个著名的避免死锁的算法,是由Dijstra首先提出来并加以解决的。 

      [背景知识] 

      一个银行家如何将一定数目的资金安全地借给若干个客户,使这些客户既能借到钱完成要干的事,同时银行家又能收回全部资金而不至于破产,这就是银行家问题。这个问题同操作系统中资源分配问题十分相似:银行家就像一个操作系统,客户就像运行的进程,银行家的资金就是系统的资源。

      [问题的描述]

      一个银行家拥有一定数量的资金,有若干个客户要贷款。每个客户须在一开始就声明他所需贷款的总额。若该客户贷款总额不超过银行家的资金总数,银行家可以接收客户的要求。客户贷款是以每次一个资金单位(如1万RMB等)的方式进行的,客户在借满所需的全部单位款额之前可能会等待,但银行家须保证这种等待是有限的,可完成的。

      例如:有三个客户C1,C2,C3,向银行家借款,该银行家的资金总额为10个资金单位,其中C1客户要借9各资金单位,C2客户要借3个资金单位,C3客户要借8个资金单位,总计20个资金单位。某一时刻的状态如图所示。

      

    C1 2(7)
    C2 2(1)
    C3 4(4)
    余额2
    C1 2(7)
    C3 4(4)

     

    余额4

    C1 2(7)
    余额8

     

    余额10

     

        (a)

     

         (b)

     

         (c)

     

         (d)

     

                                           银行家算法示意

      对于a图的状态,按照安全序列的要求,我们选的第一个客户应满足该客户所需的贷款小于等于银行家当前所剩余的钱款,可以看出只有C2客户能被满足:C2客户需1个资金单位,小银行家手中的2个资金单位,于是银行家把1个资金单位借给C2客户,使之完成工作并归还所借的3个资金单位的钱,进入b图。同理,银行家把4个资金单位借给C3客户,使其完成工作,在c图中,只剩一个客户C1,它需7个资金单位,这时银行家有8个资金单位,所以C1也能顺利借到钱并完成工作。最后(见图d)银行家收回全部10个资金单位,保证不赔本。那麽客户序列{C1,C2,C3}就是个安全序列,按照这个序列贷款,银行家才是安全的。否则的话,若在图b状态时,银行家把手中的4个资金单位借给了C1,则出现不安全状态:这时C1,C3均不能完成工作,而银行家手中又没有钱了,系统陷入僵持局面,银行家也不能收回投资。

      综上所述,银行家算法是从当前状态出发,逐个按安全序列检查各客户谁能完成其工作,然后假定其完成工作且归还全部贷款,再进而检查下一个能完成工作的客户,......。如果所有客户都能完成工作,则找到一个安全序列,银行家才是安全的。

      从上面分析看出,银行家算法允许死锁必要条件中的互斥条件,占有且申请条件,不可抢占条件的存在,这样,它与预防死锁的几种方法相比较,限制条件少了,资源利用程度提高了。

    这是该算法的优点。其缺点是:

       〈1〉这个算法要求客户数保持固定不变,这在多道程序系统中是难以做到的。   

       〈2〉这个算法保证所有客户在有限的时间内得到满足,但实时客户要求快速响应,所以要考虑这个因素。  

        〈3〉由于要寻找一个安全序列,实际上增加了系统的开销。

     

     

    8.4 死锁的检测与恢复  

     

      一般来说,由于操作系统有并发,共享以及随机性等特点,通过预防和避免的手段达到排除死锁的目的是很困难的。这需要较大的系统开销,而且不能充分利用资源。为此,一种简便的方法是系统为进程分配资源时,不采取任何限制性措施,但是提供了检测和解脱死锁的手段:能发现死锁并从死锁状态中恢复出来。因此,在实际的操作系统中往往采用死锁的检测与恢复方法来排除死锁。

      死锁检测与恢复是指系统设有专门的机构,当死锁发生时,该机构能够检测到死锁发生的位置和原因,并能通过外力破坏死锁发生的必要条件,从而使得并发进程从死锁状态中恢复出来。

    1.放大观看>>)

     

      图中所示为一个小的死锁的例子。这时进程P1占有资源R1而申请资源R2,进程P2占有资源R2而申请资源R1,按循环等待条件,进程和资源形成了环路,所以系统是死锁状态。进程P1,P2是参与死锁的进程。

      下面我们再来看一看死锁检测算法。算法使用的数据结构是如下这些:      

          占有矩阵A:n*m阶,其中n表示并发进程的个数,m表示系统的各类资源的个数,这个矩阵记录了每一个进程当前占有各个资源类中资源的个数。

           申请矩阵R:n*m阶,其中n表示并发进程的个数,m表示系统的各类资源的个数,这个矩阵记录了每一个进程当前要完成工作需要申请的各个资源类中资源的个数。

           空闲向量T:记录当前m个资源类中空闲资源的个数。

           完成向量F:布尔型向量值为真(true)或假(false),记录当前n个并发进程能否进行完。为真即能进行完,为假则不能进行完。

           临时向量W:开始时W:=T。

    算法步骤:

         (1)W:=T,

         对于所有的i=1,2,...,n,

         如果A[i]=0,则F[i]:=true;否则,F[i]:=false

         (2)找满足下面条件的下标i:

         F[i]:=false并且R[i]〈=W

         如果不存在满足上面的条件i,则转到步骤(4)。

         (3)W:=W+A[i]

         F[i]:=true

         转到步骤(2)

         (4)如果存在i,F[i]:=false,则系统处于死锁状态,且Pi进程参与了死锁。什麽时候进行死锁的检测取决于死锁发生的频率。如果死锁发生的频率高,那麽死锁检测的频率也要相应提高,这样一方面可以提高系统资源的利用率,一方面可以避免更多的进程卷入死锁。如果进程申请资源不能满足就立刻进行检测,那麽每当死锁形成时即能被发现,这和死锁避免的算法相近,只是系统的开销较大。为了减小死锁检测带来的系统开销,一般采取每隔一段时间进行一次死锁检测,或者在CPU的利用率降低到某一数值时,进行死锁的检测。 

    2.死锁的恢复  

      一旦在死锁检测时发现了死锁,就要消除死锁,使系统从死锁状态中恢复过来。  

        (1)最简单,最常用的方法就是进行系统的重新启动,不过这种方法代价很大,它意味着在这之前所有的进程已经完成的计算工作都将付之东流,包括参与死锁的那些进程,以及未参与死锁的进程。

        (2)撤消进程,剥夺资源。终止参与死锁的进程,收回它们占有的资源,从而解除死锁。这时又分两种情况:一次性撤消参与死锁的全部进程,剥夺全部资源;或者逐步撤消参与死锁的进程,逐步收回死锁进程占有的资源。一般来说,选择逐步撤消的进程时要按照一定的原则进行,目的是撤消那些代价最小的进程,比如按进程的优先级确定进程的代价;考虑进程运行时的代价和与此进程相关的外部作业的代价等因素。 

      此外,还有进程回退策略,即让参与死锁的进程回退到没有发生死锁前某一点处,并由此点处继续执行,以求再次执行时不再发生死锁。虽然这是个较理想的办法,但是操作起来系统开销极大,要有堆栈这样的机构记录进程的每一步变化,以便今后的回退,有时这是无法做到的。

    展开全文
  • 一:什么是进程死锁1:定义:如果多个进程同时占有对方需要的资源而同时请求对方的资源,而在它们得到请求之前是不会释放自己所占有的资源,那么就会导致死锁的产生,也就是进程不能实现同步。2:进程是具有一个独立...

    一:什么是进程死锁

    1:定义:如果多个进程同时占有对方需要的资源而同时请求对方的资源,而在它们得到请求之前是不会释放自己所占有的资源,那么就会导致死锁的产生,也就是进程不能实现同步。

    2:进程是具有一个独立功能的程序关于某个数据集合的一次运行活动。其基本状态有三种,即ready(就绪),runing(运行),wait(等待)。

    3:死锁是指,在两个或多个并发进程中,如果每个进程持有某种资源而又等待别的进程释放他们现在保持着的资源。此时,每个进程都占有了一定的资源,但是又不能继续向前推进,执行后面的程序代码,称这一组进程产生了死锁。

    二:产生死锁的原因

    1:根本原因是系统能够提供的资源个数比要求该资源个数的进程少。

    2:具体原因:(1):竞争资源(系统资源不足):当系统中供多个进程共享的资源,eg:打印机,公用队列,其数目不足以满足进程的需要,会引起诸进程的竞争而产生死锁。

    (2):进程间推进顺序非法:进程在运行过程中,请求和释放资源的顺序不当,也同样会导致进程死锁。

    三:死锁条件   

        死锁的每一次发生,必然都具备这四个以下条件:

    1:互斥条件:指进程对所分配到的资源进行排他性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其他进程请求资源,则只能等待,直至占有资源的进程用毕释放。简而言之,即资源不能共享,只能由一个资源使用。

    2:请求与保持条件:指进程已经至少保持一个资源,但又提出来对新的资源的请求,而该资源已经被其它进程占用,此时请求进程阻塞,但又对自己已获得的资源保持不放。

    3:非剥夺条件:指进程已经获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己来释放。

    4:循环等待条件:指发生进程死锁时,必然存在一个由进程组成的资源环形链。系统中的若干进程组成环路,该环路中的每个进程都在等待相邻的进程正占用的资源。

    四:处理死锁的方法归结为以下四种:

    1:预防死锁:事先预防的方法。通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个,来预防发生死锁。该方法较易实现且已经广泛使用,但所施加的限制条件往往都会太严格,可能会导致资源利用率和系统吞吐量降低。

    2:避免死锁:事先预防的方法。但它并不采用各种限制条件和措施去破坏产生死锁的四个必要条件,而是在资源动态分配的过程中,采用某种方法防止系统进入不安去区,从而避免发送死锁。

    3:检测死锁:事先不采取任何限制措施,也不检查系统是否进入不安全区,该方法允许死锁发生。但可以通过系统设置的检测机构,及时检测出死锁的发生,并精确的确定与死锁有关的进程和资源,然后采取措施,将已经发生的死锁清除掉。

    4:解除死锁:死锁的检测和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但实现难度最大。

    五:详解预防死锁

    1:预防死锁:因为独占资源必须以互斥方式进行访问,所以预防死锁只能从破坏死锁条件后面的三个条件下手。

    2:破坏互斥条件:破坏互斥条件即允许多个进程同时访问资源。由于多数资源的必须互斥访问这一固有特性不能改变,因此,死锁的预防通过破坏这个必要条件实现在很多场合是行不通 的。例如,打印机资源必须互斥使用,否则几个进程同时使用,每个进程各打印一行,这种输出信息的方式显然是不能被用户接受的。

    3:破坏占有和等待条件: 采用资源静态分配法可破坏这一条件,该方法是指在进程运行前,一次性地请分配它运行所需的全部资源。若系统有足够的资源分配给某一进程,则一次性地将其所需资源分配给该进程,这样,在进程运行期间便不会再提出任何资源请求,从而使等待条件不成立。如果分配时有一种资源要求不能满足,则进程需要的其他资源也先不分配给进程,从而避免进程在等待期间占用任何资源,破坏了占用条件,从而避免死锁的发生。 该方法控制简单且容易实现,但由于进程运行期间对所需资源的全部占用,使得某些使用时间很短的资源被长时间占用,这样会严重影响系统资源的充分利用,导致资源利用率降低,同吋也影响到未获得全部资源的进程推迟运行。

    4: 破坏不可剥夺条件: 采用剥夺式控制方法可以破坏该条件,该方法是使一个已保持了某些资源的进程,由于新的资源要求目前得不到满足,它必须先暂时释放已保持的所有资源(一种剥夺式),然后去等待,以后再一起向系统提出巾请,这样也能防止死锁。这种方法实现起来相对很难,为了保护进程自动放弃资源的现场以及后来的再次恢复,需要付 出高昂的代价,并且这种方法只适用于处理机和存储器资源,对其他资源,此法不宜使用。

    5: 破坏循环等待条件: 采用资源顺序分配法可破坏该条件。这种分配方法的基本思想是:把系统的全部资源分成多个层次,一个进程得到某一层的一个资源后,它只能再请较高一层的资 源;当一个进程要释放某层的一个资源时,必须先释放所占有的较高层的资源;当一个进程获得了某一层的一个资源后,它想再申请该层中的另一个资源,就必须先 释放在该层中巳占有的资源。或者说,进程释放资源的顺序是按照中请资源的相反顺序进行的。这样可以预防循环等待现象的发生,因此不会发生死锁。使用该方法 要特別注意的问题是对资源所处层次的安排。在通常情况下,把各进程经常用到的、比较普遍的资源安排在较低的层次上,把重要且相对匮乏的资源安排在较高的层 次上,以便实现对各资源的最大限度的利用。该方法相对于前面介绍的方法,在资源利用率和系统吞吐量上都有明显的改善。但也存在一些缺陷。 (1)低层次的资源必须在进程请求分配髙层次的资源之前提前申请,这对于暂时不需使用的低层次资源来说,会因空闲等待而产生浪费。 (2)各类设备的资源层次一经设定,便不能经常随意改动,这就限制了新类型设备的增加。 (3)各资源的层次是按照大多数进程使用资源的顺序设置的。对于资源使用与此层次相闪配的进程,资源能得到有效的利用,否则,资源的浪费现象将仍然存在。 如果出现死锁,进程便永远不能完成,并且阻碍使用系统资源,阻止了其他作业开始执行。因此让系统进程不再出现死锁是那么的重要,需要引起我们的关注哦。

    六:避免死锁和预防死锁的比较

    死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。死锁产生的四个条件是死锁产生的必要条件,也就是死锁产生必须具备的条件,而不是存在这四个条件就一定产生死锁。那么逻辑上只要规避其中一个条件,死锁就不会产生,显然,规避第四个条件是可行的。死锁的预防支持多个进程并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。具体方法如下:

    1:如果一个进程当前请求的资源会导致死锁,系统就拒绝启动该进程。

    2:如果一个资源的分配会导致下一步的死锁,系统就拒绝本次的分配。显然要避免死锁,必须要事先知道系统拥有的资源数量及其属性。

    展开全文
  • 此时称系统处于死锁状态或系统产生死锁,这些永远在互相等的进程称为死锁进程. 二、 死锁产生的四个必要条件 •互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果...
  • 从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位,进程有五方面的特点:第一:动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。第二: 并发性:任何进程都可以...
  • 果所申请的资源被其他等待进程占有,那么该等待进程有可能永远处于等待状态而无法改变该状态,这便是所谓的系统进程死锁。那么,有什么办法能让系统进程不死锁吗? 其实,想要系统不死锁的根本办法便是要将产生死锁...
  •   一、 什么是死锁 死锁是指两个或两个以上的进程在执行过程中,因...此时称系统处于死锁状态或系统产生死锁,这些永远在互相等的进程称为死锁进程. 二、 死锁产生的四个必要条件 •互斥条件:指进程对所分配...
  • 1.进程同步与互斥的区别? 互斥:某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。互斥无法限制访问者对资源的访问顺序即访问时无序的。如:接学家就餐问题,每个人手中只有一个筷子。 同步:基于...
  • 进程死锁及解决办法

    2014-08-19 23:49:54
    (1) 掌握死锁的概念和产生死锁根本原因。 (2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。 (3) 记住解决死锁的一般方法,掌握死锁的预防...
  • 原因: 1、系统资源不足 2、进程推进顺序非法 必要条件: ...产生死锁根本原因是系统能够提供的资源个数比请求该资源的进程数要少。 转载于:https://www.cnblogs.com/luo841997665/p/4666362.html...
  • 进程死锁概念

    2015-09-16 15:19:01
    死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。它是计算机操作系统乃至并发程序设计中最难处理的问题之一。实际上,死锁问题不仅在计算机系统中存在,在我们日常生活中它也广泛存在。 ...
  • 死锁根本原因

    2020-08-01 12:21:54
    死锁根本原因出现死锁要满足的条件预防死锁 出现死锁要满足的条件 1、互斥使用:即当资源被一个线程使用时,别的线程不能使用 2、 不可抢占:资源求生者不能强制从资源占有者手中夺取资源 3、占有且等待:占有且...
  • (1) 掌握死锁的概念和产生死锁根本原因。 (2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。 (3) 记住解决死锁的一般方法,掌握死锁的预防...
  • 进程死锁及解决方案

    千次阅读 2013-07-22 11:04:21
    (1) 掌握死锁的概念和产生死锁根本原因。 (2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。 (3) 记住解决死锁的一般方法,掌握死锁的预防和...
  • 1.什么是死锁死锁是指两个或两个以上的进程在执行进程中,因争夺资源而...2.产生死锁的主要原因: 2.1 系统资源不足 2.2 进程运行推进的顺序不合适 2.3 资源分配不当 死锁demo演示,以及死锁分析排查!! ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,360
精华内容 6,544
关键字:

产生进程死锁的根本原因