转载地址:

死锁的四个必要条件

操作系统中有若干进程并发执行,它们不断申请、使用、释放系统资源,虽然系统的进
程协调、通信机构会对它们进行控制,但也可能出现若干进程都相互等待对方释放资源才能
继续运行,否则就阻塞的情况。此时,若不借助外界因素,谁也不能释放资源,谁也不能解
除阻塞状态。根据这样的情况,操作系统中的死锁被定义为系统中两个或者多个进程无限期
地等待永远不会发生的条件,系统处于停滞状态,这就是死锁。

死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。

产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 占有且等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不可强行占有:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁。

死锁的解除与预防:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
的情况下占用资源。因此,对资源的分配要给予合理的规划

处理死锁的基本方法:

*死锁预防:通过设置某些限制条件,去破坏死锁的四个条件中的一个或几个条件,来预防发生死锁。但由于所施加的限制条件往往太严格,因而导致系统资源利用率和系统吞吐量降低。

*死锁避免:允许前三个必要条件,但通过明智的选择,确保永远不会到达死锁点,因此死锁避免比死锁预防允许更多的并发。

*死锁检测:不须实现采取任何限制性措施,而是允许系统在运行过程发生死锁,但可通过系统设置的检测机构及时检测出死锁的发生,并精确地确定于死锁相关的进程和资源,然后采取适当的措施,从系统中将已发生的死锁清除掉。

*死锁解除:与死锁检测相配套的一种措施。当检测到系统中已发生死锁,需将进程从死锁状态中解脱出来。常用方法:撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程。死锁检测盒解除有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。

二 死锁预防:破坏死锁的四个条件中的一个或几个。

(1)互斥:它是设备的固有属性所决定的,不仅不能改变,还应该加以保证。

(2)占有且等待:

为预防占有且等待条件,可以要求进程一次性的请求所有需要的资源,并且阻塞这个进程直到所有请求都同时满足。这个方法比较低效。

(3)不可抢占:

预防这个条件的方法:

*如果占有某些资源的一个进程进行进一步资源请求时被拒绝,则该进程必须释放它最初占有的资源。

*如果一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另外一个进程,要求它释放资源。

(4)循环等待:通过定义资源类型的线性顺序来预防。

*如果一个进程已经分配了R类资源,那么接下来请求的资源只能是那些排在R类型之后的资源类型。该方法比较低效。

三 死锁避免:

(1)两种死锁避免算法:

*进程启动拒绝:如果一个进程的请求会导致死锁,则不启动该进程。

*资源分配拒绝:如果一个进程增加的资源请求会导致死锁,则不允许此分配(银行家算法)。

(2)银行家算法:

1.如果request<=need,转向步骤2;否则认为出错,因为请求资源大于需要资源。

2.如果request<=available,转向步骤3,;否则尚无足够资源,进程p阻塞;

3.系统尝试为把资源分配给进程P,并修改available、allocation和need的数值。

4.系统执行安全性算法,检查此次分配后系统是否处于安全状态,若安全,才正式将资源分配给进程P,否则将本次试探性分配作废,让进程P等待。

*安全状态:系统能按照某种进程顺序,为每个进程分配资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利完成。

(3)安全性算法:

1.设置两个向量:

*工作向量work:表示系统可提供给进程继续运行的所需的各类资源的数目,执行安全算法开始时,work=available。

*finish:表示系统是否有足够资源分配给进程,使之运行完成。开始时先做finish[i]=false;当有足够资源分配给进程时再令finish[i]=true。

2.从进程集合找到一个满足下列条件的进程:

*finish[i]=false;

*need<=work;

*若找到执行步骤3;否则执行步骤4;

3.当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:

*work=work+allocation§;

*finish[i]=true;

*循环执行步骤2;

4.如果所有进程的finish=true,则表示系统处于安全状态;否则,系统处于不安全状态。

四 死锁检测和解除

(1)死锁检测算法。

(2)死锁的解除:

*两种常用的死锁解除方法:剥夺资源和撤销进程。

【计算机系统】死锁的四个必要条件相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 死锁的四个必要条件及处理死锁

    什么是死锁? 如果一个进程集合里面的每个进程都在等待只能由这个集合中的其他一个进程(包括他自身)才能引发的事件,这种情况就是死锁. 这个定义可能有点拗口,下面用一个简单例子说明. 资源A.B,进程C. ...

  9. 多线程产生死锁的四个必要条件

    多线程产生死锁的四个必要条件 1.互斥条件:任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请 者等待直到资源被占有者释放. 2.不可剥夺条件:进程所获得的资 ...

最新文章

  1. SEO查询指令,非常值得你收藏!
  2. 基于RESTful API 怎么设计用户权限控制?
  3. Go开发之路 -- Go语言基本语法 - 作业
  4. 一门杀人于无形的艺术——社会工程
  5. 3.3 目标检测-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  6. 从更底层研究C\C++动态内存分配
  7. 【深度学习的数学】2-11 用Excel体验梯度下降法(用python实现)
  8. idea的jsp如何显示语法高亮_如何啃下Python学习中的三块硬骨头?
  9. background相关属性
  10. java 向文件写数据结构_Java Note 数据结构(5)映射
  11. 【华为OD机试真题 JS】事件推送
  12. linux 压缩除去某些文件夹,Linux tar压缩时 排除某个文件/文件夹
  13. “晨光”老矣,尚能饭否?
  14. Uniapp微信小程序实现简易生成表单生成器
  15. 首批学习Java的人,如今怎么样了?
  16. python中print横向打印
  17. UPS 静态旁路开关
  18. python绘画酷炫图片代码_第二天用python绘画一些简单图片
  19. ACM-计算几何之Leyni, LOLI and Line——hrbust1104
  20. [bzoj3711]Druzyny

热门文章

  1. 赣州计算机考研考场,2021年赣州市考研/研究生考试考点分布
  2. TP-Link 不回应,安全工程师公开了其路由器漏洞
  3. mysql select 指定列_MySQL使用select语句查询指定表中指定列(字段)的数据
  4. 微信官方首次表态:微信公众平台不是营销工具
  5. realsense SDK 安装
  6. 域控服务器怎么导出,windows 2003 域控服务器导出全部hash的方法
  7. 微信小程序中使用阿里iconfont
  8. Android 4.2版本 华为EmotionUI1.6 开发者选项 开启
  9. Java 造轮子例子
  10. java-配置代理访问外网谷歌苹果外网