面试问题之操作系统:死锁的四个必要条件和解决办法

死锁概念及产生原理

  概念:多个并发进程因争夺系统资源而产生相互等待的现象。

  原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。

  本质原因:

  1)系统资源有限

  2)进程推进顺序不合理

死锁产生的4个必要条件

  1、互斥:某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。

  2、占有且等待:一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源。

  3、不可抢占:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的资源抢过来。

  4、循环等待:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。

  当以上四个条件均满足,必然会造成死锁,发生死锁的进程无法进行下去,它们所持有的资源也无法释放。这样会导致CPU的吞吐量下降。所以死锁情况是会浪费系统资源和影响计算机的使用性能的。那么,解决死锁问题就是相当有必要的了。

避免死锁的方法

1、死锁预防-----确保系统永远不会进入死锁状态

  产生死锁需要四个条件,那么,只要这四个条件中至少有一个条件得不到满足,就不可能发生死锁了。由于互斥条件是非共享资源所必须的,不仅不能改变,还应加以保证,所以,主要是破坏产生死锁的其他三个条件。

  a、破坏“占有且等待”条件

    方法1:所有的进程在开始运行之前,必须一次性地申请其在整个运行过程中所需要的全部资源。

    优点:简单易实施且安全

    缺点:因为某项资源不满足,进程无法启动,而其他已经满足了的资源也不会得到利用,严重降低了资源的利用率,造成资源浪费。使进程经常发生饥饿现象。

    方法2:该方法是对第一种方法的改进,允许进程只获得运行初期需要的资源,便开始运行,在运行过程中逐步释放掉分配到的已经使用完毕的资源,然后再去请求新的资源。这样的话,资源利用率会得到提高,也会减少进程的饥饿问题。

  b、破坏“不可抢占”条件

    当一个已经持有了一些资源的进程在提出新的资源请求没有得到满足时,它必须释放已经保持的所有资源,待以后需要使用的时候再重新申请。这就意味着进程已占有的资源会被短暂地释放或者说是被抢占了。

    该方法实现起来比较复杂,且代价也比较大。释放已经保持的资源很有可能会导致进程之前的工作实效等,反复的申请和释放资源会导致进程的执行被无限的推迟,这不仅会延长进程的周转周期,还会影响系统的吞吐量。

  c、破坏“循环等待”条件

    可以通过定义资源类型的线性顺序来预防,可将每个资源编号,当一个进程占有编号为i的资源时,那么它下一次申请资源只能申请编号大于i的资源。如图所示:

这样虽然避免了循环等待,但是这种歌方法是比较低效的,资源的执行速度回变慢,并且可能在没有必要的情况下拒绝资源的访问,比如说,进程c想要申请资源1,如果资源1并没有被其他进程占有,此时将它分配个进程c是没有问题的,但是为了避免产生循环等待,该申请会被拒绝,这样就降低了资源的利用率。

2、避免死锁------在使用前进行判断,只允许不会产生死锁的进程申请资源

死锁避免是利用https://blog.csdn.net/guaiguaihenguai/article/details/80303835

原文地址:https://www.cnblogs.com/yichengming/p/11450413.html

时间: 2024-11-10 08:26:45

面试问题之操作系统:死锁的四个必要条件和解决办法的相关文章

iOS开发----操作系统----死锁的四个必要条件

1)互斥条件:一段时间内某资源被使用时不能被其他进程使用. 2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求, 而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放. 3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放. 4)循环等待条件:指在发生死锁时,必然存在一个进程--资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0 正在等待一个P1占用的资源:P1正在等待P2占用的资源,--,Pn正在

死锁的四个必要条件以及怎样处理

一. 什么是死锁? 如果一个进程集合里面的每个进程都在等待这个集合中的其他一个进程(包括自身)才能继续往下执行,若无外力他们将无法推进,这种情况就是死锁,处于死锁状态的进程称为死锁进程 二. 死锁产生的原因? 1.因竞争资源发生死锁 现象:系统中供多个进程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象 (1)可剥夺资源和不可剥夺资源:可剥夺资源是指某进程在获得该类资源时,该资源同样可以被其他进程或系统剥夺,不可剥夺资源是指当系统把该类资源分配给某个进程时,不能强

死锁的四个必要条件和处理

1.产生死锁的原因主要是:(1) 因为系统资源不足.(2) 进程运行推进的顺序不合适.(3) 资源分配不当等.如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁.其次,进程运行推进顺序与速度不同,也可能产生死锁.2.产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用.(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放.(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺.(4) 循

死锁的四个必要条件,及处理方法

死锁的四个必要条件互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源.非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺.循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源.处理死锁的策略1.忽略该问题.例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下.为什么叫鸵鸟算法呢,因为传

【掌柜悠哉】Win8,Win10操作系统,打开反击工具崩溃的解决办法

2015年12月30日,微软对win8,win10进行了强制更新,其中有个补丁对ie浏览器有冲突,而反击工具又用到了ie浏览器,所以,就造成了,打开反击工具就崩溃的问题. 下面是解决办法: 第一步:找到[控制面板]并进入,如下图: 第二步:如下图: 第三步:如下图: 第四步:如下图: 注意,需要卸载的更新是:KB3132372  ,不要卸载错了哦.卸载后,再打开反击工具,就可以正常使用了.赶快试试吧. 这个补丁对各种软件影响都很大,这个是新闻链接:http://www.pcpop.com/doc

【转】牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. 进程通信的几种方式. 4. 线程同步几种方式.(一定要会写生产者.消费者问题,完全消化理解) 5. 线程的实现方式. (也就是用户线程与内核线程的区别) 6. 用户态和核心态的区别. 7. 用户栈和内核栈的区别. 8. 内存池.进程池.线程池.(c++程序员必须掌握) 9. 死锁的概念,导致死锁的原因. 10. 导致死锁的四个必要条件. 11. 处理死锁

在Linux下线程死锁的四个条件

一.死锁的原因和必要条件 1.死锁的概念 一般情况下,如果同一个线程先后两次调用lock,在第一次调用时,由于锁已经被占,该线程会挂起等待别的线程释放锁,然而锁正是被自己占着的,该线程又被挂起,没有机会释放锁,因此,就永远处于挂起等待状态了,这叫做死锁(Deadlock).另种典型的死锁情形是这样:线程A获 得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线程A和B都永

死锁产生的四个必要条件及如何避免死锁

在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统 的处理能力.然而,多个进程的并发执行也带来了新的问题--死锁.所谓死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进. 死锁产生的原因 1) 系统资源的竞争 通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在 运行过程中,会因争夺资源而陷入僵局,如磁带机.打印机等.只有对不可剥夺资源的竞争 才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的. 2)

死锁产生的四个必要条件及处理死锁的策略

什么是死锁? 如果一个进程集合里面的每个进程都在等待只能由这个集合中的其他一个进程(包括他自身)才能引发的事件,这种情况就是死锁. 这个定义可能有点拗口,下面用一个简单例子说明. 资源A.B,进程C.D描述如下: 资源A和资源B,都是不可剥夺资源, 现在进程C已经申请了资源A,进程D也申请了资源B, 进程C接下来的操作需要用到资源B,而进程D恰好也在申请资源A, 进程C.D都得不到接下来的资源,那么就引发了死锁.然后套用回去定义:如果一个进程集合里面(进程C和进 程D)的每个进程(进程C和进程D