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

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

3天内不再提示

操作系统产生死锁的原因_必要条件及处理方法

strongerHuang 来源:strongerHuang 作者:strongerHuang 2020-10-10 09:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

产生死锁的原因

当进程需要以独占的方式访问资源时,可能会发生死锁(Deadlock)。死锁是指两个或以上进程因竞争临界资源而造成的一种僵局,即一个进程等待一个已经被占用且永不释放的资源。若无外力作用,这些进程都无法向前推进。

产生死锁的根本原因是操作系统能够提供的资源个数比要求该资源的进程数要少。

产生死锁的基本原因可以分为两类:资源竞争和进程推进顺序不合理。

在资源竞争场景下,系统所拥有的资源是有限的,不能满足每个进程的需要。

例子:

A有纸,B有笔

A:你不给我笔,我就写不了作业

B:你不给我纸,我就写不了作业

彼此僵持不下……

多个程序同时运行时,进程推进顺序不合理。

例子:

A要前进2步,到桌子前,再后退2步。

但如果执行顺序不合理:A先后退,就永远到不了桌子前,触发不了后续动作,就会死锁。

产生死锁的必要条件

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

互斥条件 涉及的资源是非共享的,即一次只能有一个进程使用。如果有另一个进程申请该资源,那么申请进程必须等待,直到该资源被释放。

不剥夺条件(非抢占) 进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自行释放。

占有并等待(部分分配) 进程每次申请它所需要的一部分资源。在等待一新资源的同时,进程继续占用已分配到的资源。

环路条件(循环等待) 存在一种进程收尾相接的循环链,链中每个进程都在等待下一个进程所持有的资源,造成这组进程处于永远等待状态。

注意:这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立。反之,上述条件只要有一个不满足,就不会发生死锁。所以要避免发生死锁,只需要破坏其必要条件。 死锁的处理策略

对于死锁一般有三种处理策略:预防死锁、避免死锁、死锁的检测及解除

预防死锁

通过设置一些限制条件,破坏死锁的四个必要条件中的一个或几个,让死锁无法发生。 例如,将资源分层,得到上一层资源后才能够申请下一层资源,这样就破坏了环路等待条件。用户申请资源时,要求一次性申请所需要的全部资源,这就破坏了占有并等待条件。当一个已经占有某些不可剥夺资源的进程,请求新的资源而得不到满足时,它必须释放已经占有的所有资源,待以后需要时再重新申请,这就破坏了不剥夺条件。 这些预防死锁的方法破坏了系统的并行性和并发性,通常会降低系统的效率。

避免死锁

该方法同样属于事先预防,但它并不事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在动态分配资源的过程中,用一些算法来防止系统进入不安全状态,避免死锁的发生。

具体策略如下:

1. 如果进程请求的资源会导致死锁,系统就拒绝启动该进程;

2. 如果对一个资源的分配会导致下一步的死锁,系统就拒绝本次分配;

显然要避免死锁,系统必须事先知道所拥有的资源数量及其属性。

一个著名的避免死锁的算法是银行家算法。

银行家算法是DijkstraE W于1968年提出的。之所以称为银行家算法,是因为该算法可用于银行系统。

所谓银行家算法,是指分配资源之前先确定资源分配是否会造成系统死锁。如果会死锁,则不分配,只有确认不会死锁后才进行分配。

银行家算法,需要按如下原则判断是否分配资源:

新进程进入系统时,它必须说明对各类资源的最大需求量,这一数量不能超过系统的资源总数。只有满足这一条件系统才接纳该进程。

当进程申请一组资源时,该算法需要检查进程对各类资源的最大需求量,如果系统现存的各类资源的数量可以满足此时的资源最大需求量时,就分配资源;否则进程必须等待,直到其他进程释放足够的资源为止。

进程需要在一定时间内无条件地归还它所申请的全部资源。

死锁的检测及解除

死锁预防和避免都是对资源分配进行适当限制,属于事前措施,并不利于系统资源的充分共享。而死锁检测不会试图阻止死锁,即在死锁发生前不会做任何操作,只是通过设置的检测机制,检测当前是否发生死锁。若发生死锁,则采取一些措施来解除死锁。

判断死锁的法则主要基于第四条死锁的必要条件:

资源分配路径中没有环路,则系统不会出现死锁

资源分配路径中存在环路,则系统可能出现死锁

如果环路中的每个资料类中都只有一个资源,则系统存在死锁

如果环路中的每个资源类的资源个数不止一个,则环路的存在是产生死锁的必要条件但不是充分条件

解除死锁的方法包括资源剥夺法、进程撤销法、进程回退法、系统重启法等:

资源剥夺法

剥夺陷入死锁的进程所占用的资源,但并不撤销此进程,再将这些资源分配给需要的进程,直至死锁解除。

进程撤销法

一次性撤销陷入死锁的所有进程,回收所有占用的资源,等死锁解除后,再重新运行进程。

逐个撤销陷入死锁的进程,依次回收其资源并重新分配,直至死锁解除。可以优先撤销优先级低、预计剩余执行时间最长、CPU消耗时间少的进程。

进程回退法

让所有的进程回退到系统保存的检查点,这种方法要求系统建立并保存检查点、建立回退机制。

系统重启法 结束所有进程并重启系统。这种方法很简单,但损失很大,先前的工作可能都浪费了。

责任编辑:YYX

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

    关注

    37

    文章

    7328

    浏览量

    128611
  • 死锁
    +关注

    关注

    0

    文章

    25

    浏览量

    8296

原文标题:操作系统产生死锁的原因和处理策略

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    I2C死锁的问题

    在实际使用过程中,I2C比较容易出现的一个问题就是死锁死锁在I2C中主要表现为:I2C死锁时表现为SCL为高,SDA一直为低。 在I2C主设备进行读写操作的过程中,主设备在开始信
    发表于 12-04 06:00

    龙蜥操作系统装机量突破1000万

    11月17日,以“生态共融·智驱未来”为主题的2025龙蜥操作系统大会(OpenAnolis Conference)在北京成功举办。千余位全球技术大咖、业界精英和行业开发者齐聚一堂,深入探讨AI时代下操作系统产业发展的新趋势、新挑战与新路径,共话龙蜥社区引领
    的头像 发表于 11-20 11:40 500次阅读

    EV10AS180A模数转换器支持哪些操作系统

    应用。EV10AS180A转换器本身并不直接依赖或支持特定的操作系统,其核心功能是完成模拟信号到数字信号的转换,属于硬件层面的数据处理设备。硬件独立性:EV10AS180A作为一款高性能ADC,其工作原理
    发表于 11-18 09:18

    单片机的操作系统

    。 ‌ ‌ RT-Thread ‌:国产开源系统,集成GUI、网络协议栈、文件系统等组件,兼容POSIX接口,适合物联网设备。 ‌ 嵌入式操作系统 ‌ μClinux ‌:针对无MMU处理
    发表于 11-14 06:18

    嵌入式实时操作系统的特点

    任务的系统。 实时嵌入式操作系统与传统的桌面操作系统相比,更注重对实时任务的响应和精确控制。它们在资源利用、可靠性、可预测性、任务调度和中断处理等方面提供了更加严格的要求和机制。 实时
    发表于 11-13 06:30

    如何选择合适的实时操作系统

    选择合适的实时操作系统(RTOS,Real-Time Operating System)可能会影响你在不同行业的职业发展路径。
    的头像 发表于 09-09 14:47 790次阅读

    树莓派操作系统:版本、特性及设置完整指南!

    树莓派操作系统是什么?树莓派操作系统是由树莓派基金会专为树莓派开发的官方操作系统。它基于DebianLinux发行版,并针对树莓派的ARM架构进行了专门优化。树莓派操作系统有多个版本,
    的头像 发表于 07-28 18:26 815次阅读
    树莓派<b class='flag-5'>操作系统</b>:版本、特性及设置完整指南!

    鸿道Intewell操作系统:人形机器人底层操作系统

    操作系统的实时性赋能东土科技的鸿道(Intewell)工业操作系统作为国内唯一通过汽车、工业控制、医疗、轨道交通四项功能安全认证的系统,为标准体系中的技术层架构提供了底层支持。其微内核虚拟化架构可将人形机器人电子架构成本降低50
    的头像 发表于 05-16 14:44 544次阅读

    鸿道Intewell操作系统的Linux实时拓展方案

    鸿道Intewell操作系统是科东软件自主研发的新型工业实时操作系统,历经30多年研发积累,采用业界领先的微内核架构,具备高实时、高安全及强扩展的特性,是目前国内唯一通过汽车、工业控制、医疗仪器、轨道交通四项功能安全认证的操作系统
    的头像 发表于 02-27 10:08 616次阅读
    鸿道Intewell<b class='flag-5'>操作系统</b>的Linux实时拓展方案

    DAC7564输出死锁是什么原因引起的?

    我用DAC7564输出,发现DAC7564会不定时的出现某通道输出死锁的现象(就是输出固定在某一值,不能再改变了)。断电重启后又正常了。 是用IO口模拟的SPI,在发送命令前关中断,发送完后再开中断。 请问指点一下,这种情况可能是什么原因引起的?用这个芯片要注意什么
    发表于 02-05 08:44

    【「鸿蒙操作系统设计原理与架构」阅读体验】01-初始华为鸿蒙

    的诞生创造了条件,同时也提出了新的要求。 操作系统是连接计算机硬件和软件的桥梁,在计算机系统中处于非常重要的位置。在计算机世界里,硬件资源之间、软件资源之间,以及硬件资源和软件资源之间的基本交互逻辑,需要
    发表于 01-25 11:05

    国产银河麒麟操作系统V10和星光麒麟V1.0操作系统如何选择?

    国产银河麒麟操作系统和星光麒麟操作系统都是由中国电子旗下科技企业麒麟软件有限公司(简称“麒麟软件”)开发的国产自主可控的操作系统。麒麟软件介绍:麒麟软件以安全可信操作系统技术为核心,面
    的头像 发表于 01-24 09:14 4210次阅读
    国产银河麒麟<b class='flag-5'>操作系统</b>V10和星光麒麟V1.0<b class='flag-5'>操作系统</b>如何选择?

    云服务器选择什么操作系统好?

    云服务器选择什么操作系统好?选择云服务器操作系统需考虑业务需求、兼容性、安全性、易用性及成本。Linux系统如CentOS、Ubuntu和Debian因稳定、免费且社区支持强大而受欢迎;WindowsServer适合运行特定Wi
    的头像 发表于 01-21 10:56 734次阅读

    deepin操作系统介绍

    希望从自己的能力和对桌面操作系统的理解,能给 Linux 的用户与开发者更多的选择。我们也相信 deepin 能够得到更多用户的认可与喜爱,成为开源世界的最佳选择。  一、 deepin 操作系统 先说 Linux 操作系统,它
    的头像 发表于 12-23 09:08 3219次阅读
    deepin<b class='flag-5'>操作系统</b>介绍

    2024中国操作系统大会盛大启幕

    2024 中国操作系统大会在北京中国大饭店盛大启幕。作为操作系统行业高规格的年度盛会和信息技术应用创新产业的风向标,大会已迈入第五届。本届大会以“创变·求真”为主题,旨在探讨以生成式 AI 为代表的虚拟技术为操作系统和基础软件领
    的头像 发表于 12-11 14:36 793次阅读