您的位置:澳门尼斯人app > 互联网科技 > 死锁的原因,条件和解决办法

死锁的原因,条件和解决办法

发布时间:2019-12-27 14:26编辑:互联网科技浏览(183)

    图片 1

    死锁概念和产生原因

    死锁是指多个进程循环等待彼此占有的资源而无限期的僵持等待下去的局面。原因是:

    • 系统提供的资源太少了,远不能满足并发进程对资源的需求
    • 进程推进顺序不合适,互相占有彼此需要的资源,同时请求对方占有的资源,往往是程序设计不合理

    参考:http://blog.csdn.net/bxyill/article/details/8237339
    1. 死锁的定义:指多个进程因竞争共享资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。

    《“死锁”四个必要条件的合理解释》分为三个部分:

    死锁产生的必要条件

    需要同时具有以下四个条件:

    • 互斥条件:即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有
    • 不可抢占条件:进程所获得的资源在未使用完毕之前,资源申请者不能强行的从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放
    • 占有且等待条件:进程至少已经占有了一个资源,但又申请了一个新的被其他进程所占有的资源,此时处于等待状态
    • 循环等待条件:若干个进程形成环形链,每个都占用对方申请的下一个资源

    安全状态与不安全状态:安全状态指系统能按某种进程顺序来为每个进程分配其所需资源,直至最大需求,使每个进程都可顺利完成。若系统不存在这样一个序列, 则称系统处于不安全状态。

    “死锁”的含义

    死锁的处理策略

    为使系统不发生死锁,必须设法破坏产生死锁的四个必要条件之一,或者允许死锁产生,但当死锁发生时能检测出思索,并有能力实现恢复。
    一般有死锁的预防、死锁避免、死锁的检测与恢复三种方法。
    (1) 死锁预防:破坏导致死锁必要条件中的任意一个就可以预防死锁。例如,要求用户申请资源时一次性申请所需要的全部资源,这就破坏了保持和等待条件;将资源分层,得到上一层资源后,才能够申请下一层资源,它破坏了环路等待条件。预防通常会降低系统的效率。

    (2) 死锁避免:避免是指进程在每次申请资源时判断这些操作是否安全,例如,使用银行家算法。死锁避免算法的执行会增加系统的开销。

    (3) 死锁检测:死锁预防和避免都是事前措施,而死锁的检测则是判断系统是否处于死锁状态,如果是,则执行死锁解除策略。

    (4) 死锁解除:这是与死锁检测结合使用的,它使用的方式就是剥夺。即将某进程所拥有的资源强行收回,分配给其他的进程。


    “死锁”的原因及四个必要条件的合理解释

    死锁预防:

    • 打破互斥条件:允许进程同时访问资源(有些资源就是不可以同时访问的,无实用价值)
    • 打破不可抢占条件:比如给进程设置优先级,高优先级的可以抢占资源(实现困难,降低系统性能)
    • 打破占有且等待条件:实行资源预分配策略,即进程在运行前一次性的向系统申请它所需要的全部资源(不可预测资源的使用,利用率低,降低并发性)
    • 破坏循环等待条件:采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出(限制和编号实现困难,增加系统开销,有些资源暂时不用也需要先申请,增加了进程对资源的占用时间)

    2. 产生死锁的原因:(1)竞争系统资源** (2)**进程的推进顺序不当

    “死锁”的预防和解除

    死锁避免

    允许进程动态的申请资源,但系统在进行资源分配前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源你分配给进程,否则,让进程等待。
    所谓安全状态,是指系统能按某种进程推进顺序,为每个进程分配其所需的资源,直至满足每个进程对资源的最大需求,是每个进程都可以顺序的完成。此时成P1P2P3...为安全序列,如果系统无法找到一个安全序列,则称系统处于不安全状态。
    并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态;反之,只要系统处于安全状态,系统便可以避免进入死锁状态。
    银行家算法是最著名的死锁避免算法。


    1.“死锁”的含义

    死锁的检测

    资源分配图&&死锁定理

    3. 产生死锁的必要条件
    互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。
    请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。
    不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。
    环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。

    所谓死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

    死锁解除

    1)资源剥夺法。挂起某些思索进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源时,而处于资源匮乏的状态。
    2)进程撤销法。强制撤销一个或一部分进程并剥夺这些进程的资源。撤销的原则可以按进程的优先级和撤销进程代价的高低进行。
    3)进程回退法。让一个或多个进程回退到足以回避死锁的地步,进程回退时资源释放资源而不是被剥夺。要求系统保持进程的历史信息,设置还原点。


    2.“死锁”产生的原因以及四个必要条件的合理解释

    4. 解决死锁的基本方法:

    产生死锁的原因可归结为如下两点:

    • 预防死锁:
      资源一次性分配:(破坏请求和保持条件)
      可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)
      资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

    • 避免死锁:
      预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得 较满意的系统性能。由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。

    • 检测死锁
      首先为每个进程和每个资源指定一个唯一的号码;
      然后建立资源分配表和进程等待表,例如:

    • 解除死锁:
      当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:
      剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;
      撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。

    竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足进程的需要时,会引起诸进程的竞争而产生死锁。

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

    产生死锁的四个必要条件:

    1.互斥:存在这样一种资源,它在某个时刻只能被分配给一个执行绪使用;

    2.持有:当请求的资源已被占用从而导致执行绪阻塞时,资源占用者不但无需释放该资源,而且还可以继续请求更多资源;

    3.不可剥夺:执行绪获得到的互斥资源不可被强行剥夺,换句话说,只有资源占用者自己才能释放资源;

    4.环形等待:若干执行绪以不同的次序获取互斥资源,从而形成环形等待的局面,想象在由多个执行绪组成的环形链中,每个执行绪都在等待下一个执行绪释放它持有的资源。

    发现到目前为止,所有的内容都可以在课本书籍、百度、论坛、博客上找到,似乎是教条的罗列。

    我们发现看过多次,但每每需要的时候却总要回头再看~难以摆脱遗忘、记忆的循环~我觉得产生这种现象的原因是因为:停留在机械记忆。

    因为我们的教科书、论坛、博客的内容十有八九在罗列这些概念~但很少有进一步解释、阐释其存在的必然及其内在逻辑。

    或许下面的阐释能让你再遇到这个问题时,可以不翻教科书,不上网百度就能侃侃而谈~

    1.“死锁”产生有几个必要条件?

    “死锁”中“死”音通“四”是四个条件。

    2.“四”锁的必要条件都是指哪些?

    1.资源互斥性-2.持有和等待资源后而且在等待其他资源)-3不可剥夺-4.环形等待(进程之间资源等待形成相互依赖,互不礼让)

    用再通俗的话,进一步解释这个逐渐升级的状况。1-2-3-4是资源分配逐渐条件递进、加强、升级的过程:资源是互斥的每次属于一个进程;

    资源分配了我占着而且我还要申请其他资源;

    我占着的资源你没法拿,你占着的资源我没法拿;

    我申请的资源在你那,你申请的资源在我这,最终形成了一个相互占有、相互等待的僵持局面~

    3.“死锁”的预防和解除

    理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁,消除产生死锁的四个必要条件中的任何一个都可以预防和解除死锁。

    不难看出,在死锁的四个必要条件中,第二、三和四项条件比较容易消除。

    1、静态分配:采用资源静态分配策略,破坏"部分分配"条件;

    2、可剥夺:允许进程剥夺使用其他进程占有的资源,从而破坏"不可剥夺"条件;

    3、有序分配:采用资源有序分配法,破坏"环路"条件。

    本文由澳门尼斯人app发布于互联网科技,转载请注明出处:死锁的原因,条件和解决办法

    关键词: