操作系统——死锁(一文详解死锁,死锁产生的原因和死锁的解决方案)

news2024/12/22 19:23:42

1、什么是死锁?死锁产生的条件?

1.1、什么是死锁?

答: 在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲就是两个或多个进程无限期的阻塞、相互等待的一种状态

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

  • 互斥条件: 一个资源一次只能被一个进程使用;
  • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放
  • 不剥夺条件: 进程获得的资源,在未完全使用完之前,不能强行剥夺;
  • 循环等待条件: 若干进程之间形成一种头尾相接的环形等待资源关系。

1.3、如何处理死锁问题?

  • 忽略该问题:例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就没危险了吧。跟掩耳盗铃有点像;
  • 检测死锁并且恢复;
  • 仔细地对资源进行动态分配,以避免死锁
  • 通过破除死锁四个必要条件之一,来防止死锁产生。

2、死锁的解决办法

  • 预防死锁: 通过破坏死锁四个必要条件之一,来防止死锁产生;
  • 避免死锁: 在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免发生死锁;
  • 检测死锁: 允许进程在运行过程中发生死锁,但是可以通过检测机构及时检测出死锁,然后通过合适的措施,把进程从死锁过程中解脱出来;
  • 解除死锁: 当检测系统中已经发生死锁时,就采用相应措施,将进程从死锁状态中解脱出来。
  • 忽略死锁: 比如:鸵鸟算法,当系统发生死锁时不会对用户造成多大影响,或系统很少发生死锁的场合。

3、预防死锁

3.1、破坏“不抢占”条件

答:当某个进程请求新的资源得不到满足时,便立即释放保持的所有资源,待以后需要时再重新申请。

缺点是实现复杂,抢占资源可能导致部分工作失效,反复申请和释放导致系统开销很大,也可能导致饥饿。

3.2、破坏“请求和保持”条件

答:我们必须保证:当一个进程在请求资源时,它不能持有不可抢占的系统资源。在此,有两种协议可供选择:

  • 第一种协议: 该协议规定,所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源。此时若系统有足够的资源分配给某进程,便可把其需要的所有资源分配给它,这样,该进程在整个运行期间,便不会再提出资源要求,从而破坏了“请求”条件。系统在分配究源时,只要有一种资源不能满足进程的要求,即使其它所需的各资源都空闲也不分配给该进程

    第一种协议虽然简单易行且安全,但是它导致资源被严重浪费,严重的降低了资源的利用率;进程会经常发生饥饿现象。 因此比较推荐第二种协议。

  • 第二种协议: 该协议是对第一种协议的改进,它允许一个进程只获得运行初期所需的资源后,便开始运行。进程运行过程中再逐步释放已分配给自己的、且已用毕的全部资源,然后再请求新的所需资源。

3.3、破坏“循环等待”条件

答:

  • 具体做法: 首先给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源(即编号相同的资源) 一次性申请完;
  • 原理: 一个进程只有已占有小编号的资源时,才有资格申请更大编号的资源。按此规则,已持有大编号资源的进程不可能逆向地回来申请小编号的资源,从而就不会产生循环等待的现象,进而预防死锁的发生。

缺点

  • 不方便增加新的设备,因为可能需要重新分配所有的编号;
  • 进程实际使用资源的顺序可能和编号递增顺序不一致,会导致资源浪费;
  • 必须按规定次序申请资源,用户编程麻烦。

在这里,我们需要解释一下,为什么产生死锁的必要条件是4个,但是在预防死锁的时候,我们没有介绍怎么破坏互斥条件,理由如下:互斥条件是非共享设备所必备的,不仅不能改变,反而还应该加以保护

4、避免死锁(银行家算法)

答:在避免死锁的方法中,把系统的状态分为两种:安全状态(是指系统能按某种顺序如<P1,P2,…,Pn>(称<P1,P2,…Pn>序列为安全序列),来为每个进程分配其所需资源,直到最大需求,使每个进程都可顺序完成。)和不安全状态,当系统处于安全状态时,可以避免死锁的发生,反之,当系统处于不安全状态时,可能导致死锁的发生。

当有一个进程请求一个可用资源时,系统需要对该进程的请求进行计算,若将资源分配给进程后系统仍处于安全状态,才将资源分配给该进程。

5、死锁的检测与解除

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

(1)保存有关资源的请求和分配信息;

(2)提供一种算法,它利用这些信息来检测系统是否进入死锁状态

在这里插入图片描述

5.1、检测死锁的算法中

  • 在资源分配图中,找出既不阻塞又非独立的进程结点Pi,在顺利的情况下,Pi可以得到所需的资源而继续运行,直至完成,然后释放它所占有的所有资源。这相当于消去它所有的请求边和分配边,使之称为孤立的结点。
  • 进程Pi所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来的阻塞进程可能变为非阻塞进程。然后重复上面的过程,消去请求边和分配边。
  • 若能消去图中所有的边,使得图中的进程结点变为孤立点,则称该图是可完全简化的,否则称该图是不可完全简化的。

有文献证明: 所有的简化顺序都将得到相同的不可简化图。
死锁定理表明: 如果某时刻系统的资源分配图是不可完全简化的,那么此时系统死锁

5.2、解除死锁

  • 抢占资源: 从一个或者多个进程中抢占足够多数量的资源,分配给死锁进程,以解除死锁。
  • 终止进程法(包括终止所有死锁进程和逐个终止进程): 终止系统中的一个或多个死锁进程,纸质打破循环环路,使系统从死锁状态中解脱出来。
  • 进程回退法。

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

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

相关文章

Python:Virtual Environment——venv

文章目录 1 基本信息2 创建虚拟环境3 venv如何工作 1 基本信息 venv支持构建轻量级虚拟环境 包含独立的位于其site文件夹中的python package venv构建在base Python上在虚拟环境中执行pip会将package安装在当前的隔离环境中一个venv包含&#xff1a; 独立的Python解释器、libr…

在线预览编辑PDF::RAD PDF for ASP.NET

RAD PDF for ASP.NET作为功​​能最齐全的基于 HTML 的 PDF 查看器、编辑器和 ASP.NET 表单填充器&#xff0c;RAD PDF 为传统 PDF 解决方案提供了灵活而强大的替代方案。与 Adob​​e Acrobat Reader 不同&#xff0c;RAD PDF 几乎可以在任何现代网络浏览器中运行&#xff0c;…

推荐5款靠谱好用,无广告不流氓的软件

​ 话不多说&#xff0c;直入正题&#xff0c;全都是靠谱好用&#xff0c;无广告不流氓的好软件&#xff0c;可以先点赞收藏&#xff0c;以后慢慢用。 1.视频压缩工具——Moo0 VideoMinimizer ​ Moo0 VideoMinimizer是一款绿色免安装的视频压缩工具&#xff0c;它可以让你轻…

深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别 计算机竞赛

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数&#xff1a;2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 4 MobileNetV2网络5 损失函数softmax 交叉熵5.1 softmax函数5.2 交叉熵损失函数 6 优化器SGD7 学…

干货!工业级3D开发工具HOOPS的开发环境探讨——3D模型格式转换篇

HOOPS产品主要应用于3D模型的转换、显示、处理和发布&#xff0c;包括HOOPS Exchange、HOOPS Communicator、HOOPS Visualize和HOOPS Publish等4种产品&#xff0c;其中&#xff1a; HOOPS Exchange主要应用于模型的文件格式转换。HOOPS Communicator主要应用于WEB端模型显示。…

百济神州财报解读:第三季度扭亏为盈,胜利来晚了?

短短几年时间&#xff0c;从国产创新药一哥&#xff0c;到如今唯一一家在纳斯达克、港交所、上交所三地上市的生物科技公司&#xff0c;飞速的发展和超强的融资能力&#xff0c;早已让百济神州成为了一面反映“创新药企”发展状况的镜子。 因此&#xff0c;百济神州的业绩也牵…

Python测试开发中Django和Flask框架的区别

在谈Python中Django框架和Flask框架的区别之前&#xff0c;我们需要先探讨如下几个问题。 1、为什么要使用框架&#xff1f; 为了更好地阐述这个问题&#xff0c;我们把开发一个应用的过程进行类比&#xff0c;往往开发一个应用&#xff08;web应用、系统应用&#xff09;跟建…

c#桥接模式详解

基础介绍&#xff1a; 将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。适用于不希望在抽象和实现部分之间有固定的绑定关系的情况&#xff0c;或者类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充的情况。 将抽象部分与实现部分分离&#xff0c;…

动静态库。

gcc去 1、默认路径/usr/include里面去找 2、当前目录去找 但是mymath.h根本不在这里面&#xff0c;所以就报错了 你可以在.c中 #include “./lib/include/” 指明头文件在哪里&#xff0c;但是不推荐 &#xff0c;建议在gcc时处理

求推荐哪个好用的ERP或CRM软件?有ERP、CRM一体化的软件吗?

推荐好用的ERP或CRM软件&#xff1f;那么&#xff0c;有软件能够实现ERP、CRM一体化吗&#xff1f; 当然有&#xff0c;我们公司就在使用这样一个一体化平台。 只要你能够准确地理解业务逻辑&#xff0c;即使没有编程经验和代码基础&#xff0c;也能够利用简道云轻松创建各种…

c++ 经典服务器开源项目Tinywebserver如何运行

第一次直接按作者的指示&#xff0c;运行sh ./build.sh,再运行./server&#xff0c;发现不起作用&#xff0c;localhost:9006也是拒绝访问的状态&#xff0c;后来摸索成功了发现&#xff0c;运行./server之后&#xff0c;应该是启动状态&#xff0c;就是不会退出&#xff0c;而…

Idea 编译SpringBoot项目Kotlin报错/Idea重新编译

原因应该是一次性修改了大量的文件, SpringBoot项目启动Kotlin报错, Build Project也是同样的结果, 报错如下 Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.1.13. Build-&…

C语言--数组的长度计算【详细解释】

一.数组的长度计算公式 我们都知道字符串有特定的函数strlen,而数组没有&#xff0c;&#xff08;虽然字符串也是一种特殊的数组&#xff09; 但是&#xff0c;类似于这样的数组&#xff1a; int arr[]{12,89,1,5,31,78,45,12,12,0,45,142,21,12}&#xff1b; 我们很难一眼…

AI歌姬,C位出道,基于PaddleHub/Diffsinger实现音频歌声合成操作(Python3.10)

懂乐理的音乐专业人士可以通过写乐谱并通过乐器演奏来展示他们的音乐创意和构思&#xff0c;但不识谱的素人如果也想跨界玩儿音乐&#xff0c;那么门槛儿就有点高了。但随着人工智能技术的快速迭代&#xff0c;现在任何一个人都可以成为“创作型歌手”&#xff0c;即自主创作并…

诚迈科技旗下智达诚远亮相2023世界新汽车技术合作生态展

11月10日-12日&#xff0c;2023世界新汽车技术合作生态展在昆山盛大举行&#xff0c;这是中国汽车产业史上首次真正以零部件为主体的新汽车供应链展。诚迈科技子公司智达诚远作为智能汽车操作系统领军企业&#xff0c;携引领跨域融合时代的峰昇操作系统FusionOS亮相大会&#x…

微信智能机器人开发-基于E云管家,实现强大的个微管理

本文介绍了如何利用E云管家开发一个功能丰富的微信智能机器人。E云管家是一个开发协议&#xff0c;为微信机器人提供了强大的功能支持&#xff0c;包括关键字回复、自动通过好友和自动发朋友圈等特性。我们将通过一个简单的示例演示如何在E云管家下实现这些功能&#xff0c;并附…

Find My滑雪板|苹果Find My技术与滑雪板结合,智能防丢,全球定位

滑雪板运动是一项越来越受年轻人青睐的运动&#xff0c;随着年轻人的消费能力不断提高&#xff0c;滑雪板市场也会得到更多的机会和发展空间。滑雪板市场规模是一个不断增长的市场&#xff0c;目前市场规模已经相当大。根据统计数据显示&#xff0c;全球滑雪板市场规模约为26亿…

蓝桥杯每日一题2023.11.14

题目描述 题目分析 此题目的最终目标是将字母都填上数使等式符合条件&#xff0c;实际我们发现可以使用搜索将所有符合条件的进行判断&#xff08;答案&#xff1a;29&#xff09; 由于小数可能会出现错误故我们将其进行简单变化进行搜索 #include<bits/stdc.h> using…

申请SSL证书常见问题

在申请SSL证书过程中&#xff0c;很可能会遇到一些问题&#xff0c;有些需要技术人员进行协助解决&#xff0c;而有些可能自己能解决了&#xff0c;那我们在申请SSL证书过程中到底会遇到哪些常见问题呢&#xff0c;一起来看看吧&#xff01; 1.申请SSL证书时需要注意什么吗&…

解决:element ui表格表头自定义输入框单元格el-input不能输入问题

表格表头如图所示&#xff0c;有 40-45&#xff0c;45-50 数据&#xff0c;且以输入框形式呈现&#xff0c;现想修改其数据或点击右侧加号增加新数据编辑。结果不能输入&#xff0c;部分代码如下 <template v-if"columnData.length > 0"><el-table-colu…