0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

死锁的产生因素

科技绿洲 来源:Linux开发架构之路 作者:Linux开发架构之路 2023-11-09 09:37 次阅读

一、死锁的概念

操作系统中的死锁是指:

如果在一个进程集合中的每个进程都在等待只能有该集合中的其它进程才能引起的事件,而无限期陷入僵持的局面称为死锁。

二、死锁的产生因素

1、系统拥有的资源数量

2、资源分配策略

3、进程对资源的使用要求

4、并发进程的推荐顺序

三、死锁的必要条件

1、互斥条件

进程互斥使用资源,一旦某个资源被占用,欲使用该资源的进程必须等待。

2、占有和等待条件(部分分配条件)

进程申请新资源得不到满足而等待时,不释放已占有资源。

3、不剥夺条件

一个进程不能抢夺其它进程占有的资源。

4、循环等待条件(环路条件)

存在一组进程循环等待资源的现象。

前三个条件是死锁产生的必要条件,不是充分条件。第四个条件是前三个条件同时存在时产生的结果。只要破坏这四个条件之一,死锁就可防止。

四、死锁防止

死锁防止通过破坏产生死锁的四个条件之一来实现。

1、破坏互斥条件

使资源可同时访问而不是互斥使用。

该办法对于磁盘适用,对于磁带机、打印机等多数资源不仅不能破坏互斥使用条件,还要加以保证。

2、破坏占有和等待条件

静态分配可以破坏占有和等待条件。

静态分配是指一个进程必须在执行前就申请它所需要的全部资源,并且直到它所需要的资源都得到满足后才开始执行。资源利用率低。

3、破坏不剥夺条件

采用剥夺式调度方法。

当进程申请资源未获准许时,在等待前主动释放资源。剥夺调度方法目前只适用于内存资源和处理器资源。

4、破坏循环等待条件

采用层次分配策略可以破坏循环等待条件。

层次分配策略将资源被分成多个层次,进程按照由低到高的层次顺序申请和得到资源,按照由高到低的层次顺序释放资源。当进程得到某一层的一个资源后,如果需要申请该层的另一个资源,则必须先释放该层中的已占资源。

五、死锁避免

1、避免死锁的策略

死锁避免方法允许系统中同时存在死锁的三个必要条件,即互斥、占有且等待和非抢占;

每当进程提出资源申请时,系统分析满足该资源请求时系统是否会发生死锁,若不会发生则实施分配,否则拒绝分配。

银行家算法就是避免死锁的一种方法。

2、银行家算法思想

一个银行家拥有资金M,被N个客户共享,银行家对客户提出下列约束条件:

① 每个客户必须预先说明自己所要求的最大资金量;

② 每个客户每次提出部分资金量申请和获得分配;

③ 如果银行满足了客户对资金的最大需求量,则客户在资金运作后一定可以很快归还资金。

图片

3、银行家算法在死锁问题上的应用

步骤:

① 系统中的所有进程进入进程集合;

② 在安全状态下对进程请求的资源进行试探性分配;

③ 系统用剩余的可用资源和进程集合中其它进程还要的资源数作比较,找到剩余资源能满足最大需求量的进程A,保证A运行完毕并归还全部资源;

④ 把进程A从集合中去掉,相当于回收其资源。如果进程集合非空,则返回②;

⑤ 若进程集合为空,则系统处于安全状态,可实施本次分配;否则,系统处于不安全状态,本次资源分配暂不实施,申请进程等待。

安全状态与不安全状态:

如果系统能够按某种进程顺序(P1,P2,… … ,Pn)(称< P1,P2,… … ,Pn >序列为安全序列),为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都能顺利完成,则称系统处于安全状态。

如果找不到这样的安全序列,则称系统处于不安全状态。

例:

图片

图片

图片

4、银行家算法的缺点

① 使用银行家算法时,很难在进程运行前知道其所需的资源最大量;② 算法要求系统中的进程必须是无关的,相互间没有同步要求;③ 进程的个数和分配的资源数目应该是固定的;这些要求事先难以满足,因而银行家算法缺乏实用价值。

六、死锁检测与解除

1、死锁检测策略

死锁检测和解除对资源分配不加任何限制,也不采取死锁避免措施,但系统定时运行一个“死锁检测”程序,如果检测到系统发生了死锁,再采取措施解除它。

进程-资源分配图是描述进程和资源间申请与分配关系的一种有向图,可用以检测系统是否处于死锁状态。

2、进程-资源分配图的结构

进程-资源分配图由进程结点P、资源结点R和有向边组成。

有向边:

① 请求边:

从进程指向资源的有向边Pi→Rj为请求边,表示进程Pi申请资源类Rj中的一个资源。

② 分配边:

从资源指向进程的有向边Rj→Pi为分配边,表示Rj类中的一个资源已分配给进程Pi。

图片

3、进程-资源分配图与死锁判断的关系

① 如果进程-资源分配图中无环路

——>则此时系统没有发生死锁

② 如果进程-资源分配图中有环路,且每个资源类中仅有一个资源

——>则系统中发生了死锁,此时,环路是系统发生死锁的充要条件,环路中的进程便为死锁进程

③ 如果进程-资源分配图中有环路,且涉及的资源类中有多个资源

——>则环的存在只是产生死锁的必要条件而不是充分条件

4、死锁的检测和解除方法

死锁定理

系统为死锁状态的充分条件是:当且仅当该状态的进程-资源分配图是不可完全简化的。该充分条件称为死锁定理。

简化进程-资源分配图

① 从进程-资源分配图中找到一个既不阻塞又非独立的进程,消去所有与该进程相连的有向边,相当于该进程能够执行完成而释放资源,回收资源使之成为孤立结点。

② 然后将所回收的资源分配给其它进程,再从进程-资源分配图中找到下一个既不阻塞又非独立的进程,消去所有与该进程相连的有向边,使之成为孤立结点。

③ 不断重复该过程,直到所有进程成为孤立结点,则称该图是可完全化简的;否则称该图是不可完全化简的。

死锁检测实例:

图片

问题求解:

解决思路:无法应用死锁判定原则,需要化简。按照P1、P2和P3的顺序逐一考察每个进程,判断其是否孤立和阻塞。

① P1、P2和P3三个进程均不孤立,接下来需要判断它们是否阻塞。

② P1:该进程请求资源R1,而R1仅有的一个资源已经分配给P2,所以P1阻塞;

③ 该进程请求资源R2,而R2仅有的一个资源已经分配给P3,所以P2阻塞。

④ 该进程请求资源R3,而R3的两个资源已经分别分配给P1和P2,所以P3阻塞。

结论:进程-资源分配图无法完全化简,因此进程集合发生死锁。

5、死锁检测算法与死锁避免算法比较

① 死锁检测算法考虑了检查每个进程还需要的所有资源能否满足要求;

死锁避免算法则仅根据进程的当前申请资源量来判断系统是否进入了不安全状态。

② 死锁检测算法处理的进程-资源图中可以同时存在多个进程的请求边。

在银行家算法中,一次仅允许一个进程提出资源请求,做安全分析并分配资源后,才允许下一个进程提出资源请求。

6、死锁的解除方法

① 立即结束所有进程的执行,并重新启动操作系统。以前工作全部作废,损失可能很大。

② 剥夺陷于死锁的进程占用的资源,但并不撤销它,直至死锁解除。

③ 撤销陷于死锁的所有进程,解除死锁继续运行。

④ 逐个撤销陷于死锁的进程,回收其资源,直至死锁解除。

⑤ 根据系统保存的检查点,使所有进程回退,直到足以解除死锁。

⑥ 当检测到死锁时,如果存在某些未卷入死锁的进程,且它们会进一步建立一些新的抑制进程能执行到结束,则它们可能释放足够的资源来解除死锁。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6284

    浏览量

    121880
  • 死锁
    +关注

    关注

    0

    文章

    25

    浏览量

    8046
  • 磁盘
    +关注

    关注

    1

    文章

    338

    浏览量

    24882
  • 进程
    +关注

    关注

    0

    文章

    193

    浏览量

    13876
收藏 人收藏

    评论

    相关推荐

    嵌入式系统死锁和活锁含义理解

    等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。1. 死锁的预防在数据库中,产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象
    发表于 09-14 17:19

    哪些因素影响了FPGA的并行多通道激励信号产生

    并行测试的实现途径分为软件方式和硬件方式。用软件方式实现并行测试,关键是对测试任务的分解和调度,但可能会产生竞争或者死锁现象。因此,在测试资源有限并且任务分解和调度算法不成熟的情况下,用软件实现并行测试会很困难。那么,为什么说对多通道并行激励信号的需求也是影响并行测试的关
    发表于 08-13 08:08

    FPGA并行多通道信号产生模块有什么特点?

    并行测试的实现途径分为软件方式和硬件方式。用软件方式实现并行测试,关键是对测试任务的分解和调度,但可能会产生竞争或者死锁现象。因此,在测试资源有限并且任务分解和调度算法不成熟的情况下,用软件实现并行
    发表于 08-16 06:50

    对ADC总精度产生影响的因素有哪些?

    深入研究一下对ADC总精度产生影响的因素有哪些?
    发表于 04-12 06:06

    死锁dead lock的原因是什么?

    死锁dead lock的原因是什么?
    发表于 10-08 06:38

    死锁是什么?产生死锁的主要原因有哪些

    嵌入式系统设计师十二:进程管理③进程管理:死锁死锁概念:进程管理是操作系统的核心,但如果设计不当,就会出现死锁的问题。如果一个进程在等待一个不可能的事,则进程就死锁了。而如果一个或多个
    发表于 12-22 07:34

    如何去处理嵌入式软件产生死锁的情况呢

    嵌入式软件产生死锁的必要条件及原因有哪些?如何去处理嵌入式软件产生死锁的情况呢?
    发表于 12-24 06:12

    基于排序的避免死锁的方法

    针对多数据库事务下批量更新记录时产生死锁的问题,提出了一种新的数据更新方法。这种处理方法采用预先对要批量更新的记录进行排序,使所有的记录都能按某一个固定的顺
    发表于 12-30 13:04 9次下载

    DIN中的死锁避免和死锁恢复

    DIN中的死锁避免和死锁恢复 由于存在占用资源者申请另一个资源的情形,在DIN中由于拓扑结构本身存在环状路径,所以
    发表于 02-23 14:47 841次阅读
    DIN中的<b class='flag-5'>死锁</b>避免和<b class='flag-5'>死锁</b>恢复

    如何解决PIC单片机硬件死锁的问题

    “CMOS的可控硅效应”而产生死锁现象, 依我各人的观点,应与 “CMOS的可控硅效应”无关,但很多大虾皆认为是“CMOS的可控硅效应”所引起的。
    发表于 02-22 15:23 2843次阅读

    如何解决I2C器件死锁的问题?

    如何解决I2C器件死锁的问题? I2C总线是一种流行的串行通信协议,在许多嵌入式系统中使用。I2C可以连接多个从属设备到一个主控设备上,简化了系统设计和管理。然而,当I2C总线上的从属设备出现死锁
    的头像 发表于 09-12 11:18 1536次阅读

    Linux内核死锁lockdep功能

    死锁是指两个或多个进程因争夺资源而造成的互相等待的现象,如进程A需要资源X,进程B需要资源Y,而双方都掌握对方所需要的资源,且都不释放,这会导致死锁。 在内核开发中,时常要考虑并发设计,即使采用正确
    的头像 发表于 09-27 15:13 364次阅读
    Linux内核<b class='flag-5'>死锁</b>lockdep功能

    死锁的现象及原理

    组件如何放入自己的项目里?把代码末两个Debug部分删除,在你的项目里添加下面两句代码即可使用死锁检测组件。 init_hook (); start_check (); 1. 死锁的现象以及
    的头像 发表于 11-10 16:32 215次阅读
    <b class='flag-5'>死锁</b>的现象及原理

    死锁的现象以及原理

    前言 本文将从0到1写一个死锁检测组件。源码:deadlock_success.c 组件如何放入自己的项目里?把代码末两个Debug部分删除,在你的项目里添加下面两句代码即可使用死锁检测组件
    的头像 发表于 11-13 16:30 273次阅读
    <b class='flag-5'>死锁</b>的现象以及原理

    java死锁产生的条件

    Java死锁是指多个线程因为互相等待对方释放资源而无法继续执行的情况。当线程处于死锁状态时,程序会无限期地等待资源,无法继续执行下去,从而导致整个系统的停滞。要理解并避免Java死锁产生
    的头像 发表于 12-04 13:42 186次阅读