死锁详细解读

news2024/12/26 13:07:44

目录

死锁(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.coloradmin.cn/o/1031169.html

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

相关文章

怎样找到NPM里面开源库下载地址

场景 最近帮忙找一个开源库地址。这里以vue/language-core为例子。 解决 https://registry.npmmirror.com/vue/language-core/1.8.13这里就是如下格式&#xff1a; https://registry.npmmirror.com/{包名}/{版本号}打开这个页面后&#xff0c;得到开源库下载地址&#xff0c…

【GIT问题解决】---- 在【.gitignore】中添加了忽略文件或文件夹后不生效

1. 出现问题 在已经提交过的 GIT 管理的项目中&#xff0c;在 .gitignore 文件中新增一些忽略的文件或者文件夹&#xff0c;或者直接新建 .gitignore 文件之后&#xff0c;新增的内容不生效。 2. 实例截图 3. 实例描述 lifecycle.js 文件已新增到 .gitignore 文件中&#xf…

RapidSSL的便宜单域名https证书

RapidSSL是Geotrust https证书品牌中的一款入门级https证书品牌&#xff0c;目前属于Digicert的子品牌。它是一款提供高性价比和广泛适用范围的https证书&#xff0c;无论是个人还是企业用户都可以轻松申请并快速验证。今天就随SSL盾小编了解RapidSSL旗下的单域名https证书。 …

【HCIE】04.网络安全技术

端口隔离 在同一VLAN中可以隔离二层与三层通信&#xff0c;让同VLAN内的设备可以通信或者不可以通信。 定义一个端口隔离组&#xff0c;在一个组内无法互访&#xff0c;不在一个组里面可以进行互访 port-isolate enable group1 //使能端口隔离功能 port-isolate mdoe all //全…

Windows系统部署WebDAV服务结合内网穿透实现公网访问,轻松共享文件与资源

windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】 文章目录 windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访…

ES9,ES10

文章目录 ES9新特性对象的剩余参数与扩展运算符正则表达式命名捕获组Promise.finally()异步遍历器 ES10新特性Object.fromEntriestrimStart() and trimEnd()Symbol 对象的 description 属性可选的 catch ES9新特性 对象的剩余参数与扩展运算符 对象的剩余参数 let obj {nam…

【Android】线程下载资源保证资源到位采用了 OkHttp的三方网络下载 文件缓存策略

背景 使用 SVGA的三方的url播放方式会比较慢&#xff0c;至少延迟3s以上才会出现svga效果&#xff0c;所以改变策略&#xff1a;将线上的svga全部下载到本地进行播放&#xff0c;那么就得将采用网络缓存的方式实现效果。 实现 那么就得实现以下几点&#xff1a; 初次下载缓…

文件内容显示

一.浏览普通文件 .1. 文件内容查看 1.1.1. cat 命令 作用&#xff1a;查看文件内容&#xff0c;适合数据量较少 格式&#xff1a;cat -参数 文件名 参数&#xff1a; -n&#xff1a;显示行号&#xff0c;加上 -b&#xff1a;文件中所有非空行增加行号&#xff0c;编号从1开始…

Leetcode | 304. 二维区域和检索 - 矩阵不可变

304. 二维区域和检索 - 矩阵不可变 文章目录 [304. 二维区域和检索 - 矩阵不可变](https://leetcode.cn/problems/range-sum-query-2d-immutable/)题目官方题解&#xff1a;二维前缀和 题目 给定一个二维矩阵 matrix&#xff0c;以下类型的多个请求&#xff1a; 计算其子矩形…

DA3 网站的第10位用户信息读取

目录 1.题目描述 2.输入描述 3.输出描述 4.题目分析 5.通过代码 1.题目描述 现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID …

绘图系统五:数据产生

文章目录 AxisFrame组件源码模式序列化导入数据获取文件信息导入文本导入二进制数据 &#x1f4c8;一 三维绘图系统 &#x1f4c8;二 多图绘制系统&#x1f4c8;三 坐 标 轴 定 制 &#x1f4c8;四 定制绘图风格源码地址 Python打造动态绘图系统 AxisFrame组件 AxisFrame是存…

热电偶的工作原理

当有两种不同的导体或半导体A和B组成一个回路&#xff0c;其两端相互连接时&#xff0c;只要两结点处的温度不同&#xff0c;一端温度为T&#xff0c;称为工作端或热端&#xff0c;另一端温度为T0 &#xff0c;称为自由端&#xff08;也称参考端&#xff09;或冷端&#xff0c;…

使用递归思想遍历二叉树

二叉树的遍历主要有两种方式&#xff1a;深度优先遍历和广度优先遍历 这篇主要讲使用深度优先遍历来遍历二叉树 深度优先遍历有以下三种 前、中、后序遍历&#xff0c;这三种遍历方式的主要区别是中间节点的位置所在的顺序 前序遍历&#xff1a;中间节点在叶子节点前面 中序遍历…

EPLAN_001#常用功能(一)

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

ElasticSearch进阶:一文全览各种ES查询在Java中的实现

ElasticSearch进阶&#xff1a;一文全览各种ES查询在Java中的实现 ElasticSearch进阶&#xff1a;一文全览各种ES查询在Java中的实现 es基本语句详解 查询语句详解 前言 ElasticSearch第一篇&#xff1a;ElasticSearch基础&#xff1a;从倒排索引说起&#xff0c;快速认知ES …

Setup exvim enviroment

1. 官方网站 exvim官方网站 sudo apt-get install ctags id-utils cscope silversearcher-ag 2. vundle管理plugins 【NOTE】按照官网安装步骤&#xff0c;会安装一些默认plugins。 查看和修改.vimrc.plugins 打开默认未安装的plugins&#xff0c;比如airline. 打开plugi…

2023华为杯研究生数学建模竞赛E题思路分析+代码+论文

如下为C君撰写的2023华为杯研究生数学建模竞赛E题思路分析&#xff0c;代码论文见文末。 E题思路 出血性脑卒中临床智能诊疗建模 一、 背景介绍 出血性脑卒中指非外伤性脑实质内血管破裂引起的脑出血&#xff0c;占全部脑卒中发病率的10-15%。其病因复杂&#xff0c;通常因脑…

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 创建自定义组件…

动态代理原理和设计模式详解

一、什么是代理模式代理模式是一种设计模式&#xff0c;提供了对目标对象额外的访问方式&#xff0c;即可以通过代理访问目标对象&#xff0c;这样可以在不修改原目标对象的前提下&#xff0c;提供额外的方式进行访问&#xff0c;扩展目标对象的功能。 通俗的说&#xff0c;例…

html学习综合案例1

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简介</title> </head> <body>…