2-4进程管理-死锁

news2025/1/11 6:03:12

文章目录

  • 一.死锁的概念
  • 二.死锁的处理策略
    • 1.死锁预防:破坏必要条件,让死锁无法发生
    • 2.避免死锁:在动态分配资源的过程中,用一些算法防止系统进入不安全状态
      • (1)银行家算法
      • (2)系统安全状态
      • (3)银行家算法代码角度
    • 3.死锁的检测和解除:只检测当前系统有没有发生死锁,若有,采取一些措施解除
      • (1)资源分配图
      • (2)死锁定理
      • (3)死锁解除

一.死锁的概念

1.什么是死锁?
多个进程因竞争资源而造成的一种僵局(相互等待),若无外力作用,这些进程都将无法向前推进
2.为什么会产生死锁?
由于系统中存在一些不可剥夺资源,当两个或两个以上进程占有自身的资源并请求对方的资源时,会导致每个进程都无法向前推进
3.死锁产生的原因
系统资源的竞争、进程推进顺序非法、信号量使用不当
4.死锁产生的必要条件
(1)互斥条件
进程要求分配的资源是排他性的,即最多只能同时供一个进程使用
(2)不剥夺条件
进程在使用完资源之前,资源不能被强制夺走
(3)请求并保持条件
占有自身本来拥有的资源并要求其他资源
进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
(4)循环等待条件
存在一种进程资源的循环等待链,链中每个进程已获得的资源同时被链中下一个进程所请求
5.死锁、饥饿、死循环
在这里插入图片描述

二.死锁的处理策略

1.死锁预防:破坏必要条件,让死锁无法发生

(1)破坏互斥条件
将互斥使用的资源改为共享设备。
如两个进程互斥访问打印机,利用SPOOLing技术,由一个输出进程接收两进程的打印数据,然后依次发给打印机,将打印机改为了共享设备。

但并不是所有的资源都可以改造成可共享使用的资源。并且为了系统安全,很多地方还必须保护这种互斥性。因此,很多时候都无法破坏互斥条件。

  • SPOOLing技术(假脱机技术)
    为了缓和CPU的高速性和I/O设备低速性之间的矛盾,引入了脱机输入/输出技术。SPOOLing技术是操作系统中采用的一项将独占设备改造成共享设备的技术
  • 特点:提高了I/O的速度,将独占设备改造为共享设备、实现了虚拟设备功能
  • 组成:输入井和输出井、输入缓冲区和输出缓冲区、输入进程和输出进程

(2)破坏不剥夺条件
①主动释放。当某个进程请求新的资源得不到满足时,它必须立即释放保持的所有资源,待以后需要时再重新申请。也就是说,即使某些资源尚未使用完,也需要主动释放,从而破坏了不可剥夺条件。
②强行剥夺。当某个进程需要的资源被其他进程所占有的时候,可以由操作系统协助,将想要的资源强行剥夺。这种方式一般需要考虑各进程的优先级(比如:剥夺调度方式,就是将处理机资源强行剥夺给优先级更高的进程使用)

缺点:
①实现起来比较复杂
②释放已获得的资源可能造成前一阶段工作的失效。因此这种方法一般只适用于易保存和恢复状态的资源,如CPU。
③反复地申请和释放资源会增加系统开销,降低系统吞吐量。④若采取主动释放,只要暂时得不到某个资源,之前获得的那些资源就都需要放弃,以后再重新申请。如果一直发生这样的情况,就会导致进程饥饿。

(3)破坏请求并保持条件
可以采用静态分配方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不让它投入运行。一旦投入运行后,这些资源就一直归它所有,该进程就不会再请求别的任何资源了。

缺点:有些资源可能只需要用很短的时间,因此如果进程的整个运行期间都一直保持着所有资源,就会造成严重的资源浪费,资源利用率极低。另外,该策略也有可能导致某些进程饥饿。

(4)破坏循环等待条件
可采用顺序资源分配法。首先给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源(即编号相同的资源)一次申请完。即:一个进程只有已占有小编号的资源时,才有资格申请更大编号的资源。按此规则,已持有大编号资源的进程不可能逆向地回来申请小编号的资源,从而就不会产生循环等待的现象。

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

2.避免死锁:在动态分配资源的过程中,用一些算法防止系统进入不安全状态

(1)银行家算法

在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。

系统中有5个进程P0-P4,3种资源R0-R2,初始数量为(10,5,7),则某一时刻的情况可表示如下:

当前剩余可分配(3,3,2)
在这里插入图片描述
①P0不满足,P1满足,分配给P1并回收,剩余(5,3,2)
②P0不满足,P2不满足,P3满足,分配给P3并回收,剩余(7,4,3)
③P0满足,分配并回收,剩余(7,5,3)
④P2满足,分配并回收,剩余(10,5,5)
⑤P4满足,分配并回收,剩余(10,5,7)

共五次循环检查即可将5个进程都加入安全序列中,最终可得一个安全序列。该算法称为安全性算法。

(2)系统安全状态

所谓安全序列,就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个。如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有进程都无法顺利的执行下去。

如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,就可能发生死锁。

(3)银行家算法代码角度

在这里插入图片描述
(3-1)基本定义
假设系统中有n个进程,m种资源。
①每个进程在运行前先声明对各种资源的最大需求数,则可用一个n* m的矩阵表示所有进程对各种资源的最大需求数。最大需求矩阵Max,Max[i,j]=K表示进程Pi最多需要K个资源Rj
②n*m的分配矩阵Allocation表示对所有进程的资源分配情况
③Max-Allocation=Need矩阵,表示各进程最多还需要多少各类资源。
④用一个长度为m的一维数组Available表示当前系统中还有多少可用资源
⑤用一个Allocation表示对所有进程的资源分配情况
⑥某进程Pi向系统申请资源,可用一个长度为m的一维数组Requesti表示本次申请的各种资源量

(3-2)分配过程
因为它所需要的资源数已超过它所宣布的最大值。可用银行家算法预判本次分配是否会导致系统进入不安全状态:
①检查此次申请是否超过了之前声明的最大需求数。如果Requesti[j]<=Need[i,j] (0≤j≤m)则继续,否则认为出错
②检查此时系统剩余的可用资源是否还能满足这次请求。如果Requesti[j]<=Available[j](0≤j≤m),则继续。否则表示尚无足够资源,Pi必须等待。
③系统给进程Pi进行资源预分配,并修改相应的数据:Available=Available-Requesti,Allocation[i, j] = Allocation[i, j] + Requesti[j],Need[i, j] = Need[i, j] – Requesti[j]
④操作系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式分配;否则,恢复相应数据,让进程阻塞等待。

3.死锁的检测和解除:只检测当前系统有没有发生死锁,若有,采取一些措施解除

(1)资源分配图

圆圈代表一个进程,框代表一类资源,框中的一个圆代表一类资源中的一个资源。

①请求边:从进程到资源的有向边称为请求边,表示该进程申请一个单位的该类资源
②分配边:从资源到进程的边称为分配边,表示该类资源已有一个资源分配给了该进程

图中,进程P1已经分得了两个R1资源,并又请求一个R2资源;进程P2分得了一个R1资源和一个R2资源,并又请求一个R1资源。
在这里插入图片描述

(2)死锁定理

R2只分配了1个,剩1个,P1请求R2可以满足
在这里插入图片描述
回收P1资源,删除P1的出边和入边。
P2请求可以满足。
在这里插入图片描述
回收P2,删除P2的出边和入边
在这里插入图片描述
若最终能消除所有边,就称这个图是可完全简化的。此时一定没有发生死锁(相当于能找到一个安全序列)。如果最终不能消除所有边,那么此时就是发生了死锁。最终还连着边的那些进程就是处于死锁状态的进程。

(3)死锁解除

①资源剥夺法:挂起某些死锁进程,并抢占它的资源将这些资源分配给其他的死锁进程,但要防止被挂起的进程长时间得不到资源而处于资源匮乏状态
②撤销进程法
强制撤销部分甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行
③进程回退法
让一(或多)个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而非被剥夺。要求系统保持进程的历史信息,设置还原点

如何决定“对谁动手”
①进程优先级。低优先级的先剥夺。
②已执行多长时间。执行时间短的先剥夺。
③还要多久能完成。保护马上就要完成的。
④进程已经使用了多少资源。剥夺使用资源多的容易解除死锁局面。
⑤进程是交互式的还是批处理式的。保护交互式进程,用户优先。

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

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

相关文章

Java if else分支结构精讲

Java 支持两种选择语句&#xff1a;if 语句和 switch 语句。其中 if 语句使用布尔表达式或布尔值作为分支条件来进行分支控制&#xff0c;而 switch 语句则用于对多个整型值进行匹配&#xff0c;从而实现分支控制。这些语句允许你只有在程序运行时才能知道其状态的情况下&#…

2022:不恋过往,不畏将来

一、开篇 少年有山海&#xff0c;踏过皆繁华。岁月不居&#xff0c;时节如流&#xff0c;时间在指尖悄悄流逝&#xff0c;人生即将翻开新的一年的篇章。2022年&#xff0c;注定是一个不平凡的年份&#xff0c;这一年&#xff0c;我们从关心世界到关心国家&#xff0c;最后关心自…

2023年12306购票平台自动化购票二|解决车次查找与预定

目录 一、说明 1.1、背景 1.2、说明 二、步骤 2.1、点击去购票 2.2、在搜索框中输入车次信息 2.3、点击查找 2.4、出现车次信息&#xff0c;进行筛选&#xff0c;如果有票则点击计入预定车票界面 三、结果 四、小节 一、说明 1.1、背景 接上文&#xff0c;春运抢不到…

适用于 Windows 的 5 大 PDF 编辑器

“如何在 Windows 7/8/10/11 上编辑 PDF 文件&#xff1f;” “适用于 Windows 7/8/10/11的最佳 PDF 编辑器是什么&#xff1f;” 升级到 Windows 7/8/10/11 后&#xff0c;你会发现很多应用程序在新的 Windows 系统上无法运行&#xff0c;包括 PDF 编辑器。然而&#xff0c;一…

POJ 3070 Fibonacci

Time Limit: 1000MSMemory Limit: 65536KTotal Submissions: 30932Accepted: 20284 Description In the Fibonacci integer sequence, F0 0, F1 1, and Fn Fn − 1 Fn − 2 for n ≥ 2. For example, the first ten terms of the Fibonacci sequence are: 0, 1, 1, 2, 3,…

opencv源码之中值滤波medianBlur_SortNet解读

背景中值滤波&#xff0c;最大值滤波&#xff0c;最小值滤波属于排序滤波&#xff0c;常用于图像去噪处理。最大/小值滤波的处理比较好理解&#xff0c;就是逐个比较窗口内的每个数字&#xff0c;每次比较会根据所属任务保留最大值&#xff0c;或最小值。假设滑动窗口是3*3&…

固体物理分子模拟实验(二)MPI的安装

固体物理分子模拟实验&#xff08;二&#xff09;MPI的安装 文章目录固体物理分子模拟实验&#xff08;二&#xff09;MPI的安装前言一、MPI是什么&#xff1f;二、安装步骤&#xff08;Ubuntu22.04mpich-4.0.2&#xff09;1、下载mpich解压包2、安装前置组件3、文件配置&#…

【一文讲通】如何检测数据满足同分布

1 统计指标的方法1.1群体稳定性指标&#xff08;Population Stability Index&#xff0c;PSI&#xff09;群体稳定性指标&#xff08;Population Stability Index&#xff0c;PSI&#xff09;&#xff0c; 衡量未来的样本&#xff08;如测试集&#xff09;及训练样本评分的分布…

【Linux】基础开发工具使用 --- vim

目录 前言 vim的基本概念 具体操作 插入模式 命令模式下的指令 底行模式下的指令 vim的配置 前言 &#x1f367;了解了 Linux 的一些基本的指令之后若要在 Linux 上进行程序的编写&#xff0c;除了 nano 以外&#xff0c;我们还可以选择 vim 进行编写。而 vim 是 vi 升级…

OJ万题详解––孤独的照片(C++详解)

题目 题目描述 Farmer John 最近购入了 N 头新的奶牛()&#xff0c;每头奶牛的品种是更赛牛&#xff08;Guernsey&#xff09;或荷斯坦牛&#xff08;Holstein&#xff09;之一。 奶牛目前排成一排&#xff0c;Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然…

0107-JAVA和JDK的区别

前言 因为工作需要现在也不得不接触后端java语言&#xff0c;对于java和jdk一直存在疑惑&#xff0c;今天就详细总结一下 1.什么是java 人话就是java是一门后端脚本语言和PHP一样 2.什么是jdk JDK的全称是Java Development Kit&#xff0c;直译就是&#xff1a;Java开发工…

真实地址查询——DNS

通过浏览器解析 URL 并生成 HTTP 消息后&#xff0c;需要委托操作系统将消息发送给 Web 服务器。但在发送之前&#xff0c;还有一项工作需要完成&#xff0c;那就是查询服务器域名对应的 IP 地址&#xff0c;因为委托操作系统发送消息时&#xff0c;必须提供通信对象的 IP 地址…

java 基础 - 泛型

泛型 术语中文含义举例Parameterized type参数化的类型ListActual typeparameter实际类型参数StringGeneric type泛型类型ListFormal typeparameter形式类型参数 EUnbounded wildcard type无限制通配符类型List<?>Raw type原始类型ListBounded type parameter有限制类型…

Vue--》Vue3给数据共享增添的改变

目录 数据共享 父向子共享数据 子向父共享数据 父子组件间数据双向同步 兄弟组件共享数据 后代组件共享数据 使用Vue3的setup函数实现后代数据共享 数据共享 在项目开发中&#xff0c;组件之间的关系分为如下3种&#xff1a;父子关系、兄弟关系、后代关系。 父向子共享…

FPGA学习笔记(十二)IP核之FIFO的学习总结

系列文章目录 一、FPGA学习笔记&#xff08;一&#xff09;入门背景、软件及时钟约束 二、FPGA学习笔记&#xff08;二&#xff09;Verilog语法初步学习(语法篇1) 三、FPGA学习笔记&#xff08;三&#xff09; 流水灯入门FPGA设计流程 四、FPGA学习笔记&#xff08;四&…

机器人/人工智能/就业形势2023

机器人/人工智能/就业形势2022https://blog.csdn.net/ZhangRelay/article/details/124441772机器人人工智能课程需求和就业趋势-2022-https://blog.csdn.net/ZhangRelay/article/details/127087308如上已成往事。2023年如何呢&#xff1f;之前文章都过于简洁&#xff0c;很多朋…

浅谈 MySQL 的 Undo log 日志

undo log 存储在类型为 FIL_PAGE_UNDO_LOG 页中。 可以从系统表空间中分配空间&#xff0c;也可以从 undo tablespace 中分配空间。 FIL_PAGE_UNDO_LOG 类型页主要分为四部分&#xff1a; File Header&#xff0c;所有页都有的结构Undo Page Header TRX_UNDO_PAGE_TYPE&#x…

十一、docker相关问题解决方案

&#x1f33b;&#x1f33b;一、创建tomcat失败报348 问题二、端口监听问题&#xff0c;没安装命令三、非正常关闭电脑导致虚拟机无法启动一、创建tomcat失败报348 问题 创建失败问题&#xff1a; docker: Error response from daemon: OCI runtime create failed: container…

通用vue组件化搜索组件页面

一、组件化封装 1.首先创建一个form文件夹&#xff0c;将搜索框组件的内容全部写在这个里面&#xff0c;然后再在需要的页面直接引入相应的组件即可 2.首先先在goods.vue文件里面写对应的文本数组formItems&#xff0c;将所定义的类型IFormItem引用进去&#xff0c;这个里面写…

coresight(五) rom table

五、 rom table 在一个soc中&#xff0c;有多个coresight组件&#xff0c;但是软件怎么去识别这些coresight组件&#xff0c;去获取这些coresight组件的信息了&#xff1f;这个时候&#xff0c;就需要靠coresight组件中&#xff0c;一个重要的组件&#xff0c;这个组件就是rom …