死锁详细解读

目录

死锁(1)

一、死锁的定义

二、产生死锁的原因

三、产生死锁的四个必要条件 

四、解决死锁的方法 

死锁(2)

第三节 死锁避免

一、死锁避免的概念

二、安全状态与安全序列

三、银行家算法

第四节、死锁的检测与解除 

一、死锁的检测和解除

二、死锁检测的算法

三、解除死锁的方法 

死锁(3)

第五节 资源分配图 

一、资源分配图

二、死锁定理 

第六节 哲学家就餐问题 


死锁(1)

在多道程序系统中,同时有多个进程并发执行共享系统资源,从而提高了系统资源利用率,提高了系统的处理能力。
但是,在进行资源分配时会产生一个随机性的错误--死锁。
在许多应用中,如实时控制和监视系统中,遇到死锁会带来很大的危害。

一、死锁的定义

指在多道程序系统中,一组进程中的每一个进程均无限期地等待被该组进程中另一个进程所占用且永远不会释放的资源。
处于死锁状态的进程称为死锁进程。

二、产生死锁的原因

1.资源的概念
(1)永久性资源(可重用资源):如内存、外部设备、处理器等硬件资源;各种数据文件、表格、共享程序代码等软件资源。
(2)临时性资源(消耗性资源):指由某个进程产生、只为另一个进程使用一次或经过短暂时间后便不再使用的资源。
如I/O和时钟中断信号、同步信号、消息等。
2.产生死锁的原因
(1)竞争资源,系统在资源分配时出现失误,进程间对资源的相互争夺而造成僵局。
(2)进程推进顺序不合理(如P、V操作的信号量)
3.死锁的例子
例5.1申请不同类资源产生死锁,进程P1和P2在运行中使用输入、输出设备,假定系统中只有一台输入设备和一台输出设备,则进程P1和P2可能有如下形式:
若进程交替执行,如下:
P1:申请一台输入设备
P2:申请一台输出设备
P1:申请一台输出设备
P2:申请一台输入设备

例5.2申请同类资源产生死锁,假设有一类可重用资源R,如内存,它包含m个页面,由n个进程P1、P2、……Pn(2<=m<=n)共享。假定每个进程按下述顺序一次申请和释放页面:
①申请一个页面
②申请一个页面
③释放一个页面
④释放一个页面
例5.3 P、V操作使用不当产生的死锁,对于第四章生产者--消费者问题,如果把P(mutex)放在P(empty)和P(full)之前,就会产生死锁。
考虑当①empty=0,full=n的情况第一种情况:假设生产者进程占有处理器,此时,执行完P(mutex),再执行P(empty)时,生产者进程阻塞,让出处理器,消费者进程执行P(mutex)也会阻塞,此时产生死锁。
例5.4 对临时性资源的使用不加限制产生的死锁,在进程通信时使用的信件可以看作是一种临时性资源,如果对信件的发送和接收不加限制,则可能引起死锁。
比如,进程P1等待进程P3的信件S3,S3到来后再向进程P2发送信件S1,P2又要等待P1的信件S1到来后再向P3发送信件S2,P3进程也要等待进程P2的信件到来后才能发送信件S3。 

三、产生死锁的四个必要条件 

对于永久性资源,产生死锁的四个必要条件:
①互斥条件(一个资源每次只能被一个进程使用(资源独立));
②不可剥夺条件(进程已获得的资源,在未使用之前,不能强行剥夺(抢夺资源));
③请求和保持条件(一个进程因请求资源而阻塞时,对已获得的资源保持不放(不释放锁));
④循环等待条件(若干进程之间形成一种头尾相接的循环等待的资源关闭(死循环));

四、解决死锁的方法 

①预防死锁;②避免死锁;③检测与解除死锁;④忽略死锁;

死锁(2)

第三节 死锁避免

前面讨论的死锁预防策略,总体上是增加了较强的限制条件,从而使实现较为简单,但却严重地影响了系统性能。

一、死锁避免的概念

基本思想:系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源;如果分配后系统不会发生死锁,则予以分配,否则,不予以分配。

和死锁预防的区别:死锁预防是破坏产生死锁的四个必要条件之一,严格地防止死锁的出现。而死锁避免是在系统运行过程中注意避免死锁的发生,即使死锁的必要条件存在,也不一定发生死锁。

二、安全状态与安全序列

1.安全状态:如果操作系统能保证所有的进程在有限的时间内得到所需的全部资源,则称系统处于“安全状态”,否则说系统是不安全的。
判别:如果存在一个由系统中所有进程构成的安全序列{(P1、P2、……Pn)},则系统处于安全状态。
2.安全序列:系统能按某种进程推进顺序{P1、P2、……Pn},为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。此时称{P1、P2、……Pn}为安全序列。
3.安全状态与不安全状态的关系:系统中不存在安全序列,则称系统为不安全状态。


例5.5安全状态与不安全状态,现有12个同类资源供3个进程共享,进程P1总共需要9个资源,但第一次先申请2个;进程P2总共需要10个资源,第一次要求分配5个资源;P3总共需要4个资源,第一次请求2个资源。经过第一次分配后,系统还有3个资源未分配,系统状态如图5-5所示。


该状态是否安全?
答:该状态安全,系统剩余资源3,而P3还需要2个资源,把2个资源分配给P3后,当P3执行完毕,释放4个资源,此时系统资源为5;这5个资源可以分配给P2,P2运行结束,释放10个资源,此时可满足P1进程需求,进程P1执行完毕。存在安全序列{P1,P2,P3}
若进程P1提出再申请一个资源的要求,系统从剩余资源中分配1个给P1后剩余2个资源,如下图所示:


答:该状态不安全,找不到安全序列,因为剩余资源分配给P3进程,P3进程用完后释放,此时剩余资源为4,资源数量不能满足P1和P2进程的需求量,故状态不安全

三、银行家算法

愿意:确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。
操作系统中:保证系统不会进入不安全状态的算法

例5.6银行家算法应用示例:


假定系统中有5个进程{P1,P2,P3,P4,P5}和三类资源{A,B,C},各种资源的数量分别是10,5,7,资源分配情况如图所示
答:存在安全序列{P2,P4,P5,P3,P1},该状态安全
在此状态下,进程P2又提出请求(1,0,2),此时状态如图5-8


答:在此状态下,系统剩余资源不能满足任何进程的请求,P2的请求不予满足,P2等待。
单项选择题
某系统中有3个并发进程,都需要同类资源3个,试问该系统不会发生死锁的最少资源数是()。
A.6  B.7
C.8  D.9
答案:B
解析:3个进程,都需要同类资源3个。假定3个进程都得到了2个,总共得到6个资源,如果再有一个资源,即7个时,系统不会发生死锁。这类问题都可以用这个方法进行计算。

第四节、死锁的检测与解除 

一、死锁的检测和解除

1.死锁的检测和解除:
假如系统为进程分配资源时,不采取任何限制性措施来避免和预防死锁,而是在操作系统运行过程中,不断地监督程序的执行和资源占用情况,判断是否发生死锁,一旦发生死锁,采取专门的措施解除死锁,并以最小代价使系统恢复正常。
2.死锁检测时机
(1)检测的实质:检测算法检测是否存在“循环等待”条件

(2)时机:
①一次资源分配后;②每次调度后;③定时器定时运行检测程序;④当某个进程长期处于阻塞状态或阻塞程序过多时;

二、死锁检测的算法

算法规则:当任一进程Pj申请一个已被占用的资源Ri时,(操作系统)进行死锁检测,反复查找资源分配表和等待进程表,来确定Pj对资源Ri的请求是否导致形成环路,若是,出现死锁。

 

三、解除死锁的方法 

1.剥夺资源,一旦死锁,挂起一些进程,剥夺它们占用的资源给死锁进程,以解除死锁。
2.撤销进程,撤销部分死锁进程,将它们占有的资源分配给另一些死锁进程,直到死锁解除为止。
可以一次撤销所有死锁进程,也可以逐个撤销。

死锁(3)

第五节 资源分配图 

一、资源分配图

1.作用:描述系统中资源分配和申请情况,对死锁进行分析并采取对策
2.SRAG定义:是一张有向图,可定义为一个二元组,即,SRAE=(V,E),其中V是顶点的集合,包括进程集合、资源集合,E是有向边的集合,是一个有序对<Pi,ri>,如图5-10所示:
矩形表示资源,圆点表示资源的数据量,箭头从矩形内圆点出发,表示该资源被占用;箭头从其他处指向矩形,表示有进程请求资源。
圆形表示进程,矩形内的箭头指向进程,表示进程占用该资源;进程的箭头指向资源,表示申请该资源。

 

二、死锁定理 

1.作用:判定死锁的法则
2.死锁定理:(1)如果资源分配图中没有环路,则系统无死锁
(2)如果资源分配图中出现了环路,则可能存在死锁。具体判断如下:
①如果处于环路中的每个资源类中均包含一个资源实例(表示矩形内的圆点数量),则环路存在意味死锁的存在。此时,环路是死锁的充分必要条件。如下图:


如果处于环路中的每个资源类中实例的个数不全为1,则环路存在是死锁的必要条件而非充分条件。如图5-11和图5-12所示:
存在两个环路P1->r1->P2->r2->P3->r3->P1,环路P2->r2->P3->r3->P2。P1、P2、P3都陷入了死锁。


存在环路P1->r1->P3->r2->P1,但无死锁。


可以使用资源分配图简化方法,来检测系统是否为死锁状态。步骤如下:(1)在资源分配中,找出一个既不阻塞又非独立的进程节点Pi。在顺利的情况下,Pi可获得所需资源而继续运行,直至运行完毕,再释放其占有的全部资源,这相当于消去Pi的请求边和分配边,使之成为孤立的节点。
(2)将Pi释放的资源分配给申请它的进程,若该进程能顺利运行完,释放资源,再次称为孤立节点。
(3)重复(1)(2)步,直到找不到符合条件的进程节点。经过简化后,若能消去所有的边,则该图可完全简化,系统不存在死锁;否则不可能完全简化,存在死锁。

 

第六节 哲学家就餐问题 

1.问题描述(1)有五个哲学家围坐在一圆桌旁,每人面前有一只碗,碗里有面条,每两人之前放一只筷子;
(2)每个哲学家的行为都是思考,感到饥饿,然后吃饭;
(3)为了吃饭,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子;
2.算法描述,为每个筷子设置一个互斥信号量
semaphore chopstick[5]={1,1,1,1,1}

3.存在问题:死锁
4.改进:采用资源有序分配算法,给每个筷子编号,规定每个哲学家先拿编号小的筷子再拿编号大的筷子。哲学家i(1<=i<=4)不变,第五个哲学家的程序改进如下:

 

 

 

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

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

相关文章

Python 打印所有水仙花数

"""打印三位水仙花数介绍&#xff1a;水仙花数是指一个 n 位数&#xff0c;它的每个位上的数字的 n 次幂之和等于它本身。例如&#xff0c;153 是一个三位的水仙花数&#xff0c;因为 (1**3) (5**3) (3**3) 153。下面是一个 Python 程序&#xff0c;用于生成…

LabVIEW开发基于物联网的多功能功率分析仪

LabVIEW开发基于物联网的多功能功率分析仪 根据技术规则&#xff0c;电气元件网络中的单个被创建为在标称正弦波振动制造频率下运行。失真顺序的电流和电压波与正弦波不同&#xff0c;它们或多或少地扭曲成形状。它是由交流网络中非线性组件的存在引起的&#xff0c;例如静态转…

32:TX Text Control ActiveX/ASP.NET/WinForms/WPF Crack

TX Text Control ActiveX 32.0 添加操作“普通”样式表的能力。 2023 年 9 月 14 日 - 15:38新版本 特征 脚注- 在文档中插入与 Microsoft Word 兼容的脚注。脚注是一种文字处理功能&#xff0c;允许用户在页面底部插入附加信息。 可编辑的[普通]样式表- 添加了操作[普通]样式的…

为什么tomcat要自定义线程池实现?

背景 最近在研究tomcat调优的问题&#xff0c;开发人员做过的最多的tomcat调优想必就是线程池调优了&#xff0c;但是tomcat并没有使用jdk自己的线程池实现&#xff0c;而是自定了了线程池&#xff0c;自己实现了ThreadPoolExecutor类位于org.apache.tomcat.util.threads包下 …

TikTok的全球影响:跨文化、跨国界的短视频文化

随着TikTok的崛起&#xff0c;短视频文化正在以前所未有的方式迅速传播&#xff0c;跨足了不同国家和文化的边界。本文将探讨TikTok的全球影响&#xff0c;以及它如何促进了跨文化交流和文化融合。 短视频&#xff1a;跨越语言和文化的沟通工具 TikTok的短视频格式具有独特的跨…

步步为营,如何将GOlang引用库的安全漏洞修干净

文章目录 引场景构建第一步、直接引用的第三方库升级修复策略1.确认是否为直接引用的第三方库2.找到需要升级的版本是否为release版本 第二步、间接引用的第三方库升级修复策略那么问题来了&#xff0c;我们这么间接引用库的对应的直接引用库是哪个呢&#xff1f; &#xff08;…

Vue构建SPA项目实现路由

目录 前言 一、Vue CLI简介 1.什么是Vue CLI 2.Vue CLI的特点 二、SPA项目搭建 1.安装Vue CLI 2.使用脚手架vue-cli来构建项目 ​编辑 3.项目结构说明 4.什么是*.vue文件 三、基于SPA完成路由并嵌套路由 1.基于SPA完成路由 1. 1在src下的components 创建自定义组件…

vue项目升级webpack

vue项目升级webpack 目录 1. vue项目中影响webpack版本的是什么 2.理解package.json中库前缀^和~区别 3.升级webpack4到5操作 1. vue项目中影响webpack版本的是什么 答案是&#xff1a;vue/cli-service版本 2.理解package.json中库前缀^和~区别 x.y.z x代表大版本&#xf…

Spark-3.2.4 高可用集群安装部署详细图文教程

目录 一、Spark 环境搭建-Local 1.1 服务器环境 1.2 基本原理 1.2.1 Local 下的角色分布 1.3 搭建 1.3.1 安装 Anaconda 1.3.1.1 添加国内阿里源 1.3.2 创建 pyspark 环境 1.3.3 安装 spark 1.3.4 添加环境变量 1.3.5 启动 spark 1.3.5.1 bin/pyspark 1.…

vue2中年份季度选择器(需要安装element)

调用 <!--父组件调用--><QuarterCom v-model"quart" clearable default-current/> 组件代码 <template><div><span style"margin-right: 10px">{{ label }}</span><markstyle"position:fixed;top:0;bottom:0…

EPLAN_001#常用功能(一)

一、栅格设置、背景颜色设置 二、插入设备图标&#xff08;快捷键 Insert&#xff09; 按TAB旋转方向 三、 通过左CTRLENTER输入 四、移动属性文本、复制格式 CTRLB 可以移动设备图形中的相关文本&#xff08;或者右键—文本—移动属性文本&#xff09; 很对多个文本的&#xf…

干货 | 汽车行业研发效能提升的挑战与实践案例

在 9 月 15 日的第七届 CSN 大会上&#xff0c;思码逸研发效能专家王艳萍受邀分享了《汽车行业研发效能提升的挑战与实践案例》。演讲包含了思码逸对多家汽车企业服务过程中总结出的行业痛点、解决方案&#xff0c;以及实践案例。 以下为演讲实录&#xff1a; 思码逸与很多知名…

spring的ThreadPoolTaskExecutor装饰器传递调用线程信息给线程池中的线程

概述 需求是想在线程池执行任务的时候&#xff0c;在开始前将调用线程的信息传到子线程中&#xff0c;在子线程完成后&#xff0c;再清除传入的数据。 下面使用了spring的ThreadPoolTaskExecutor来实现这个需求. ThreadPoolTaskExecutor 在jdk中使用的是ThreadPoolExecutor…

Python实现MYSQL蜜罐

1 LOAD DATA INFILE介绍 首先开启一个Mysql&#xff0c;看一下mysql是如何读取主机文件的。 1.1 linux搭建mysql 1&#xff09;docker运行mysql 2&#xff09;启动Mysql docker run -itd…

【开发工具】idea 的全局搜索快捷键(Ctrl+shift+F)失效

文章目录 前言1. 取消 输入法的快捷键&#xff08;推荐使用&#xff09;2.更改 idea的快捷键3. 热键占用总结 前言 当你发现在idea 中看到用于全局搜索的快捷键就是 CtrlshiftF&#xff0c;可是怎么按都不管用的时候&#xff0c;你就不要再执着于自己的操作继续狂点电脑按键了…

Lnmp架构之mysql数据库实战1

1、mysql数据库编译 编译成功 2、mysql数据库初始化 配置数据目录 全局文件修改内容 生成初始化密码并进行初始化设定 3、mysql主从复制 什么是mysql的主从复制&#xff1f; MySQL的主从复制是一种常见的数据库复制技术&#xff0c;用于将一个数据库服务器&#xff08;称为主…

解决Permission is not allowed后基于Ubuntu23.04安装配置docker与docker-compose

参考&#xff1a;Docker官网-Install Docker Engine on Ubuntu 虚拟机里安装ubuntu-23.04-beta-desktop-amd64&#xff0c;开启SSH(换源、备份)&#xff0c;配置中文以及中文输入法等 基于CentOS7安装配置docker与docker-compose 一、 Install using the Apt repository 1.…

线性代数的本质(七)——特征值和特征向量

特征值和特征向量 本章特征值和特征向量的概念只在方阵的范畴内探讨。 相似矩阵 Grant&#xff1a;线性变换对应的矩阵依赖于所选择的基。 一般情况下&#xff0c;同一个线性变换在不同基下的矩阵不同。仍然以平面线性变换为例&#xff0c;Grant 选用标准坐标系下的基向量 i…

fastjson远程命令执行

fastjson远程代码执行 漏洞原因&#xff1a;fastjson在对json字符串反序列化的时候&#xff0c;会读取到type的内容&#xff0c;将json内容反序列化为java对象并调用这个类的setter方法。 1、搭建rmi服务 直接利用jndi-exploit工具 2、抓包改为POST。开启nc监听、发包 PO…

贸易战的影响:跨境电商的“黑洞”风险与机遇

当今全球贸易局势充满了不确定性和动荡。贸易战的阴云笼罩下&#xff0c;跨境电商企业面临着前所未有的挑战&#xff0c;但与此同时&#xff0c;也蕴藏着巨大的机遇。本文将深入探讨贸易战对跨境电商的影响&#xff0c;以及企业在这个新现实中如何应对风险并寻找机遇。 贸易战的…