2.4_4 死锁的检测和解除

news2024/11/17 19:53:09

文章目录

  • 2.4_4 死锁的检测和解除
    • (一)死锁的检测
    • (二)死锁的解除
  • 总结

2.4_4 死锁的检测和解除

image-20240310130016505

  如果系统中既不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁。在这种情况下,系统应当提供两个算法:

  1.死锁检测算法:用于检测系统状态,以确定系统中是否发生了死锁。

  2.死锁解除算法:当认定系统中已经发生了死锁,利用该算法可将系统从死锁状态中解脱出来。

(一)死锁的检测

  为了能对系统是否已发生了死锁进行检测,必须:

  1.用某种数据结构来保存资源的请求和分配信息;

  2.提供一种算法,利用上述信息来检测系统是否已进入死锁状态。

image-20240310130651129

image-20240310130823583

  注:如果学习过数据结构中的“图”,则可以尝试着具体定义一下这个数据结构。

  如果系统中剩余的可用资源数足够满足进程的需求,那么这个进程暂时是不会阻塞的,可以顺利地执行下去。

  例如上图中的进程P1,它申请了1个R2资源,此外,R2资源此时分配了1个给P2进程。所以,P1进程对于R2资源的请求是可以被满足的,不会被阻塞,可以顺利执行下去。

  但是,对于P2进程请求R1来说,由于此时R1资源已经分配出去了2个给P1、1个给P2,那么P2对于R1资源再次的请求1个,就无法被满足。

  如果这个进程执行结束了把资源归还系统,就可能使某些正在等待资源的进程被激活,并顺利地执行下去。

  刚才说了,P1对于R2资源的请求是可以顺利执行的。那么等到P1执行完毕,就会归还它所使用的资源。

  :某个进程在进行请求资源、使用完毕、归还资源之后,该进程所对应的“请求边”、“分配边”就可以从图中删去,如下图所示。

image-20240310131504901

  刚刚我们说了,P2对于R1资源的请求是无法满足、阻塞的。然而,当此时P1归还系统资源后,R1资源的数量又足够满足P2了,因此P2就会被唤醒,并正常执行。

  同理,等P2执行完之后,它也会归还所有的资源。所以,我们也可以把P2相连的边全部删去,如下图所示。

image-20240310131658586

  如果按上述过程分析,最终能消除所有边,就称这个图是可完全简化的。此时一定没有发生死锁(相当于能找到一个安全序列)。

  其本质其实和上一小节银行家算法的过程是一致的。我们经过比对,发现P1能够满足,于是把P1加入安全序列,让P1执行,执行完毕归还资源。归还资源后,我们再次经过比对,发现P2能够满足,于是把P2加入安全序列,让P2执行……

  如果最终不能消除所有边,那么此时就是发生了死锁

  最终还连着边的那些进程就是处于死锁状态的进程


例子

image-20240310132113753

  如图。此时,可以顺利执行的,只有P3进程。当P3执行完毕之后,归还资源。

image-20240310132212631

  此时,可以发现,P1想要申请R2资源,但无法满足,因此P1会被阻塞;P2想要申请R1资源,但无法满足,因此P2也会被阻塞。

  我们无法消除这些边,系统发生了死锁。


检测死锁的算法

  1.在资源分配图中,找出既不阻塞又不是孤点的进程Pi。消去它所有的请求边和分配边,使之成为孤立的结点。在下图中,P1是满足条件的进程结点,于是将P1的所有边消去。

  “不阻塞”的意思是,这个进程申请的资源数量足够满足它的需求,比如像P1进程就是不阻塞的进程,而P2进程就是阻塞的进程。

  “孤点”的意思是,这个图中,没有任何边与这个结点相连,则这个结点就是孤点。下图中,P1、P2此时都不是孤点。

  因此,此时满足“既不阻塞、又不是孤点”的进程,就是P1进程。

image-20240310132945411

  2.进程Pi所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来的阻塞进程可能变为非阻塞进程。在下图中,P2就满足这样的条件。同理,依旧按照“1”中的处理逻辑对其进行简化。

  按照第1步中的逻辑,进行同样的操作。在下图中,“既不阻塞、又不是孤点”的进程就是P2,我们消去它所有的请求边和分配边即可。

image-20240310133106785

  最终,若能消去图中所有的边,则称该图是可完全简化的

image-20240310133325679

  死锁定理:如果某时刻系统的资源分配图是不可完全简化的,那么此时系统死锁

  至此,我们已经解决了第一步问题——我们已经可以有办法检测出“系统是否发生了死锁”。

  接下来,我们就可以想办法——“怎么解除死锁”。

(二)死锁的解除

  一旦检测出死锁的发生,就应该立即解除死锁。

  注意:系统中有死锁的发生,并不代表着系统中所有的进程都是死锁状态。我们在用死锁检测算法化简资源分配图后,还连着边的那些进程就是死锁进程


解除死锁的主要方法

  1.资源剥夺法

  挂起(即暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但是应防止被挂起的进程长时间得不到资源而饥饿。

  注意:既然“挂起某些死锁进程”,那么我们要挂起的进程就不能是非死锁进程。如下图,此时P1、P2处于死锁,而P3并不是死锁。因此我们就不能挂起P3,而只能挂起P1或者P2。

image-20240310133803975

  2.撤销进程法(或称终止进程法

  强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。这种方式的优点是实现简单,但所付出的代价可能会很大。因为有些进程可能已经运行了很长时间,已经接近结束了,一旦被终止可谓是功亏一篑,以后还得从头再来。

  3.进程回退法

  让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史信息,设置还原点。

  如上图中,对于P1进程,我们可以让它回退到“P1只持有1个R1资源”的时候。回退到此,便能够保证P2进程顺利执行下去,从而解决死锁问题。

思考:如何决定“对谁动手”

  即,无论使用上述三种方法中的哪一种,总之,我们要对哪个死锁进程下手?或者说,让哪个进程做出牺牲?——剥夺它的资源 / 终止它 / 回退它。

  可以从以下这些角度来做出考虑。

  1.进程优先级。

  优先级低的,我们可以对它下手。

  2.已执行多长时间。

  执行时间越长,说明对它下手,所付出的代价可能会更大。所以我们可以选择“已执行时间”更短的进程。

  3.还要多久能完成。

  对于“马上就能完成了”的资源,我们可以保证它的继续运行,转而去牺牲别的进程。

  4.进程已经使用了多少资源。

  如果一个进程已经拥有了很多资源的话,那么我们把它剥夺,就会释放出很多资源,从而让原本死锁的局面最大程度地得到缓解。因此,我们可以对“此时拥有资源最多”的进程下手。

  5.进程是交互式的还是批处理式的。

  “交互式”就意味着这个进程当前是正在与用户进行交互的。如果对交互式进程下手,把它干掉的话,那么用户体验就会变差。

  而对于批处理式的进程,它只是计算机自身在进行一系列的处理,而用户对它的反馈并不那么在意。所以我们可以优先对“批处理进程”下手。

总结

image-20240310135017294

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1509554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CrossOver24软件免费电脑虚拟机,快速在Mac和Linux上运行Windows软件

当然,除了之前提到的核心技术、兼容性和性能优化外,CrossOver2024还具有其他一些值得关注的性能特点: CrossOver Mac-安装包下载如下:https://wm.makeding.com/iclk/?zoneid50028 CrossOver linux-安装包下载如下:ht…

信息系统项目管理师--质量管理

国际标准化组织(ISo) 对质量 (Quality) 的定义是:“反映实体满⾜主体明确和隐含需求的能⼒的特性总和”。 国家标准对质量的定义为:“⼀组固有特性满⾜要求的程度”。固有特性是指在某事或某物中本来就有的, 尤其是那种永久的可区分的特征。对产品来说, 例如⽔泥的化学成分、强…

设计模式九:装饰器模式

文章目录 1、装饰器模式2、示例3、装饰器模式与适配器模式4、装饰器模式和代理模式5、java io流的装饰器模式 1、装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构…

大数据开发-Hive介绍以及安装配置

文章目录 数据库和数据仓库的区别Hive安装配置Hive使用方式Hive日志配置 数据库和数据仓库的区别 数据库:传统的关系型数据库主要应用在基本的事务处理,比如交易,支持增删改查数据仓库:主要做一些复杂的分析操作,侧重…

WPF(2)命令绑定

效果是&#xff1a;当TextBox控件的Text属性为空时show按钮不可用&#xff0c;有值时show按钮可用 项目结构 界面代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://sc…

普发Pfeiffer Prisma QMS200四极质谱计内部电路图装配3D图电路板接口详细注解

普发Pfeiffer Prisma QMS200四极质谱计内部电路图装配3D图电路板接口详细注解

面向对象(精髓)变继承关系为组和关系(_Decorator模式)

在软件开发中&#xff0c;设计模式是解决常见问题的可重用解决方案。在面向对象编程中&#xff0c;继承和组合是两种常用的代码复用方式。然而&#xff0c;随着软件需求的不断变化&#xff0c;我们需要更灵活的设计方式来应对不断变化的需求。在本文中&#xff0c;我们将讨论从…

全面的 DevSecOps 指南:有效保护 CI/CD 管道的关键注意事项

数字化转型时代带来了对更快、更高效、更安全的软件开发流程的需求。DevSecOps&#xff1a;一种将安全实践集成到 DevOps 流程中的理念&#xff0c;旨在将安全性嵌入到开发生命周期的每个阶段 - 从代码编写到生产中的应用程序部署。DevSecOps 的结合可以带来许多好处&#xff0…

程序人生 - 爬虫者,教育也!

作为一个站长&#xff0c;你是不是对爬虫不胜其烦&#xff1f;爬虫天天来爬&#xff0c;速度又快&#xff0c;频率又高&#xff0c;服务器的大量资源被白白浪费。 看这篇文章的你有福了&#xff0c;我们今天一起来报复一下爬虫&#xff0c;直接把爬虫的服务器给干死机。 本文有…

RStudio更换R语言版本

今天下载R语言用于读取.xlsx文件的readxl包时&#xff0c;RStudio提示该包是使用R-4.3.3版本构建&#xff0c;而我现在使用的是R-4.3.2版本&#xff0c;所以需要升级一下R语言版本&#xff0c;这里先下载最新版本的R语言&#xff0c; 下载地址&#xff1a;The Comprehensive R…

HTML 学习笔记 总结

总结 【标签按照功能进行分类】&#xff1a; <!DOCTYPE html>&#xff1a;声明为 HTML5 文档 <html>&#xff08;双标记、块标记&#xff09;&#xff1a;是 HTML 页面的根元素&#xff0c;定义 HTML 文档 <head>&#xff08;双标记、块标记&#xff09;&a…

机器学习-04-分类算法-01决策树

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法开篇与决策树部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…

【Linux杂货铺】操作系统

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 冯诺依曼体系结构 &#x1f4c2; 拓展问题&#xff1a;程序为什么要被加载到内存&#xff1f; &#x1f4c2; 主机与主机的交互 &#x1f4c1; 操作系统的概念 &#x1f4c2; 作用 &#x1f4c2; 理解“管理” &#x…

基于Python实现电商订单的数据分析

基于Python实现电商订单的数据分析 数据集&#xff1a;技术&#xff1a;功能&#xff1a;创新点&#xff1a;明确需求和目的&#xff1a; 数据集&#xff1a; 项目使用一家全球超市4年内的电商销售订单数据&#xff0c;数据集名为superstore_dataset2011-2015.csv。数据集共有…

线性代数(一)——向量基础

向量基础 1、向量和线性组合2、向量的模和点乘3、矩阵4、参考 线性代数的核心是向量的加和乘两种运算的组合&#xff0c;本篇博客为线性代数的一个引子&#xff0c;主要从向量、线性组合和矩阵逐步引出线性代数的相关知识。 1、向量和线性组合 首先介绍的是向量相关&#xff0…

使用nexus3搭建npm私有仓库

一、下载解压安装包 下载地址&#xff1a;nexus-3.66.0-02-win.zip 二、安装并运行私服 在cmd中进入到文件夹中的bin目录下运行一下命令 nexus.exe /run等几分钟启动后&#xff0c;浏览器访问&#xff1a;默认端口8081 http://127.0.0.1:8081/ #修改端口在etc文件下 nexus-…

Oracle集群ASM磁盘扩容

先通过lsblk来查看集群两端磁盘是否扩容成功 lsblk -a查看自己两边磁盘UUID是否相同(for i in 后面为磁盘sd后字母名) for i in x y z aa ab ac ad ae do echo "KERNEL\"sd*\", SUBSYSTEM\"block\", PROGRAM\"/lib/udev/scsi_id --whitelist…

javaEE4(预习第3章,做课后习题1:简答)

1、简答 &#xff08;1&#xff09;Jsp页面翻译成的Servlet类的源文件在哪里可以找到&#xff1f;servlet实例是每次请求页面都会创建一个&#xff0c;还是只有一个&#xff08;单例&#xff09;&#xff1f; tomcat工作目录下的work目录下 只有一个 页面中定义变量加和不加…

扫雷小游戏制作教程:用HTML5和JavaScript打造经典游戏

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

smart-doc 社区 Committer 晋升公告

我们非常荣幸地宣布&#xff0c;经过 PMC 委员会的提名和讨论&#xff0c;社区成员李星志&#xff08;GitHub ID: netdied&#xff09;、陈琪&#xff08;GitHub ID: chenqi146&#xff09;和李兵&#xff08;GitHub ID: abing22333&#xff09;正式晋升为同程旅行 smart-doc 开…