死锁

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

产生条件

  • 互斥条件:资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。
  • 不可剥夺条件:进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放。
  • 请求和保持条件:进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
  • 环路等待条件:在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请,也就是前一个进程占有后一个进程所深情地资源。

  以上给出了导致死锁的四个必要条件,只要系统发生死锁则以上四个条件至少有一个成立。事实上环路等待的成立蕴含了前三个条件的成立,似乎没有必要列出然而考虑这些条件对死锁的预防是有利的,因为可以通过破坏四个条件中的任何一个来预防死锁的发生。

产生原因

(1)竞争资源引起进程死锁
  现象:系统中供多个进程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象

  • 可剥夺资源和不可剥夺资源:可剥夺资源是指某进程在获得该类资源时,该资源同样可以被其他进程或系统剥夺,不可剥夺资源是指当系统把该类资源分配给某个进程时,不能强制收回,只能在该进程使用完成后自动释放
  • 竞争不可剥夺资源:系统中不可剥夺资源的数目不足以满足诸进程运行的要求,则发生在运行进程中,不同的进程因争夺这些资源陷入僵局。
    举例说明: 资源A,B; 进程C,D
    资源A,B都是不可剥夺资源:一个进程申请了之后,不能强制收回,只能进程结束之后自动释放。内存就是可剥夺资源。进程C申请了资源A,进程D申请了资源B。接下来C的操作用到资源B,D的资源用到资源A。但是C,D都得不到接下来的资源,那么就引发了死锁。
  • 竞争临时资源

(2)进程推进顺序不当发生死锁

处理死锁的基本方法

  1. 预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件
  2. 避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁
  3. 检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉
  4. 解除死锁:该方法与检测死锁配合使用

死锁预防

我们可以通过破坏死锁产生的4个必要条件来 预防死锁,由于资源互斥是资源使用的固有特性是无法改变的。

  • 破坏“不可剥夺”条件:一个进程不能获得所需要的全部资源时便处于等待状态,等待期间他占有的资源将被隐式的释放重新加入到 系统的资源列表中,可以被其他的进程使用,而等待的进程只有重新获得自己原有的资源以及新申请的资源才可以重新启动,执行。
  • 破坏“请求与保持条件”:第一种方法静态分配即每个进程在开始执行时就申请他所需要的全部资源。第二种是动态分配即每个进程在申请所需要的资源时他本身不占用系统资源。
  • 破坏“环路等待”条件:采用资源有序分配其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小编号的进程才能申请较大编号的进程。

银行家算法:
  银行家算法是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
  我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。
为保证资金的安全,银行家规定:
  (1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;
  (2) 顾客可以分期贷款,但贷款的总数不能超过最大需求量;
  (3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;
  (4) 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.
  操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。

死锁及其四个必要条件相关推荐

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

    面试问题之操作系统:死锁的四个必要条件和解决办法 参考文章: (1)面试问题之操作系统:死锁的四个必要条件和解决办法 (2)https://www.cnblogs.com/yichengming/p/ ...

  2. 死锁的4个必要条件和处理策略

    1.死锁的例子:       资源A.B,进程C.D描述如下: 资源A和资源B,都是不可剥夺资源, 现在进程C已经申请了资源A,进程D也申请了资源B, 进程C接下来的操作需要用到资源B,而进程D恰好也 ...

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

    死锁的四个必要条件互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源.非剥夺条件(N ...

  4. 高并发之——死锁,死锁的四个必要条件以及处理策略

    一.什么是死锁 多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力.然而,并发执行也带来了新的问题--死锁. 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局(D ...

  5. 死锁的四个必要条件以及处理策略

    一.什么是死锁 死锁是指两个或两个以上的进程(线程)在运行过程中因争夺资源而造成的一种僵局. 例如,某计算机系统中只有一台打印机和一台输入设备,进程P1正占用输入设备,同时又提出使用打印机的请求,但此 ...

  6. 【计算机系统】死锁的四个必要条件

    转载地址: 死锁的四个必要条件 操作系统中有若干进程并发执行,它们不断申请.使用.释放系统资源,虽然系统的进 程协调.通信机构会对它们进行控制,但也可能出现若干进程都相互等待对方释放资源才能 继续运行 ...

  7. 死锁——什么是死锁 死锁的四个必要条件 避免死锁

    1 什么是死锁 死锁的定义是:在一个进程组内,每个进程都在等待只有其他进程才能引发的事件,那么该进程组处于死锁状态. 有两个线程(或者更多的线程),每个线程都在等待被其他线程占用的资源. 比如:线程A ...

  8. 操作系统(1) - 死锁的四个必要条件及避免

    一.什么是死锁 死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进. 二.死锁产生的原因 1. 系统资源的竞争 系统资源的竞争导致系统资源不足,以及资源分配 ...

  9. 关于死锁,死锁的四个必要条件的总结

    什么是死锁? 死锁,指的是多个进程再运行期间因争夺资源而产生的一种僵局,若无外力作用(破坏死锁),程序将无法运行. 死锁产生的四个必要条件 互斥条件: 进程要求对所分配的资源(如打印机)进行排他性控制 ...

最新文章

  1. 面向B端市场,Mana VR团队将推出VR交互产品
  2. c语言遍历exe的目录,如何用纯C获取一个文件目录。
  3. DataBinding 学习系列(2)详解DataBinding在xml中的使用
  4. api报错 javaee maven_JavaEE关于Maven的配置与学习
  5. plex实现流媒体服务器_如何从Plex Media Server离线查看下载和同步媒体
  6. ctrl c 失效了_[安卓+PC双端]超C女仆无馬中字
  7. 2020年1月数据库流行度排行:从万里挑二到波澜不惊
  8. Linux按照行数、大小切分文件
  9. 七个顶级的心理寓言(转载)
  10. 经典排序算法 - 归并排序Merge sort
  11. C++调用 Json解析与处理库
  12. 【工具】JAVA 在单元读取文件并比较
  13. c语言烟花代码vc,C语言烟花程序
  14. DayDayUp:罗振宇—2018.12.31年终秀——《时间的朋友》跨年演讲重点概览【文字+视频】
  15. cpu爆了怎么排查和处理_怎么清理cpu,怎样可以证明cpu坏没坏-
  16. LM317稳压芯片在工程中的应用
  17. matlab fisher检验,FISHER线性判别MATLAB实现.doc
  18. ae制h5文字动画_对于8个华丽的HTML5文字动画特效图文赏析
  19. node安装后的设置(node_global和node_cache)
  20. 通讯桥接器NET30-FX在三菱编程软件GX Works2中的应用

热门文章

  1. 使用思维导图的好处有哪些 怎样快速绘制思维导图
  2. BP神经网络最大训练次数,bp神经网络训练时间
  3. test test first
  4. TP-Link无线路由器HTTP/TFTP后门漏洞
  5. [软件评测第八期]看图猜成语
  6. java jdbc mysql_java jdbc
  7. oracle有没有boolean类型,oracle有Boolean类型
  8. boolean 类型不建议用 is 开头
  9. 修改自定义导航栏按钮文字内容的方法
  10. 积分兑换商城如何才能更有活力?