【操作系统】死锁(详细)

news2025/7/15 21:02:14

文章目录

  • 一、死锁的概念
  • 二、死锁的产生因素
  • 三、死锁的必要条件
    • 1、互斥条件
    • 2、占有和等待条件(部分分配条件)
    • 3、不剥夺条件
    • 4、循环等待条件(环路条件)
  • 四、死锁防止
    • 1、破坏互斥条件
    • 2、破坏占有和等待条件
    • 3、破坏不剥夺条件
    • 4、破坏循环等待条件
  • 五、死锁避免
    • 1、避免死锁的策略
    • 2、银行家算法思想
    • 3、银行家算法在死锁问题上的应用
    • 4、银行家算法的缺点
  • 六、死锁检测与解除
    • 1、死锁检测策略
    • 2、进程-资源分配图的结构
    • 3、进程-资源分配图与死锁判断的关系
    • 4、死锁的检测和解除方法
      • 死锁定理
      • 简化进程-资源分配图
    • 5、死锁检测算法与死锁避免算法比较
    • 6、死锁的解除方法


一、死锁的概念

操作系统中的死锁是指:
如果在一个进程集合中的每个进程都在等待只能有该集合中的其它进程才能引起的事件,而无限期陷入僵持的局面称为死锁。

二、死锁的产生因素

1、系统拥有的资源数量
2、资源分配策略
3、进程对资源的使用要求
4、并发进程的推荐顺序

三、死锁的必要条件

1、互斥条件

进程互斥使用资源,一旦某个资源被占用,欲使用该资源的进程必须等待。

2、占有和等待条件(部分分配条件)

进程申请新资源得不到满足而等待时,不释放已占有资源。

3、不剥夺条件

一个进程不能抢夺其它进程占有的资源。

4、循环等待条件(环路条件)

存在一组进程循环等待资源的现象。

前三个条件是死锁产生的必要条件,不是充分条件。第四个条件是前三个条件同时存在时产生的结果。只要破坏这四个条件之一,死锁就可防止。

四、死锁防止

死锁防止通过破坏产生死锁的四个条件之一来实现。

1、破坏互斥条件

使资源可同时访问而不是互斥使用。
该办法对于磁盘适用,对于磁带机、打印机等多数资源不仅不能破坏互斥使用条件,还要加以保证。

2、破坏占有和等待条件

静态分配可以破坏占有和等待条件。
静态分配是指一个进程必须在执行前就申请它所需要的全部资源,并且直到它所需要的资源都得到满足后才开始执行。资源利用率低。

3、破坏不剥夺条件

采用剥夺式调度方法
当进程申请资源未获准许时,在等待前主动释放资源。剥夺调度方法目前只适用于内存资源和处理器资源。

4、破坏循环等待条件

采用层次分配策略可以破坏循环等待条件。
层次分配策略将资源被分成多个层次,进程按照由低到高的层次顺序申请和得到资源,按照由高到低的层次顺序释放资源。当进程得到某一层的一个资源后,如果需要申请该层的另一个资源,则必须先释放该层中的已占资源。

五、死锁避免

1、避免死锁的策略

死锁避免方法允许系统中同时存在死锁的三个必要条件,即互斥、占有且等待和非抢占;
每当进程提出资源申请时,系统分析满足该资源请求时系统是否会发生死锁,若不会发生则实施分配,否则拒绝分配。
银行家算法就是避免死锁的一种方法。

2、银行家算法思想

一个银行家拥有资金M,被N个客户共享,银行家对客户提出下列约束条件:
① 每个客户必须预先说明自己所要求的最大资金量;
② 每个客户每次提出部分资金量申请和获得分配;
③ 如果银行满足了客户对资金的最大需求量,则客户在资金运作后一定可以很快归还资金。

在这里插入图片描述

3、银行家算法在死锁问题上的应用

步骤:
① 系统中的所有进程进入进程集合;
② 在安全状态下对进程请求的资源进行试探性分配;
③ 系统用剩余的可用资源和进程集合中其它进程还要的资源数作比较,找到剩余资源能满足最大需求量的进程A,保证A运行完毕并归还全部资源;
④ 把进程A从集合中去掉,相当于回收其资源。如果进程集合非空,则返回②;
⑤ 若进程集合为空,则系统处于安全状态,可实施本次分配;否则,系统处于不安全状态,本次资源分配暂不实施,申请进程等待。

安全状态与不安全状态:

如果系统能够按某种进程顺序(P1,P2,… … ,Pn)(称< P1,P2,… … ,Pn >序列为安全序列),为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都能顺利完成,则称系统处于安全状态
如果找不到这样的安全序列,则称系统处于不安全状态

例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、银行家算法的缺点

① 使用银行家算法时,很难在进程运行前知道其所需的资源最大量;
② 算法要求系统中的进程必须是无关的,相互间没有同步要求;
③ 进程的个数和分配的资源数目应该是固定的;
这些要求事先难以满足,因而银行家算法缺乏实用价值。

六、死锁检测与解除

1、死锁检测策略

死锁检测和解除对资源分配不加任何限制,也不采取死锁避免措施,但系统定时运行一个“死锁检测”程序,如果检测到系统发生了死锁,再采取措施解除它。
进程-资源分配图是描述进程和资源间申请与分配关系的一种有向图,可用以检测系统是否处于死锁状态。

2、进程-资源分配图的结构

进程-资源分配图由进程结点P、资源结点R和有向边组成。

有向边:
① 请求边:
从进程指向资源的有向边Pi→Rj为请求边,表示进程Pi申请资源类Rj中的一个资源。
② 分配边:
从资源指向进程的有向边Rj→Pi为分配边,表示Rj类中的一个资源已分配给进程Pi。
在这里插入图片描述

3、进程-资源分配图与死锁判断的关系

① 如果进程-资源分配图中无环路
——>则此时系统没有发生死锁
② 如果进程-资源分配图中有环路,且每个资源类中仅有一个资源
——>则系统中发生了死锁,此时,环路是系统发生死锁的充要条件,环路中的进程便为死锁进程
③ 如果进程-资源分配图中有环路,且涉及的资源类中有多个资源
——>则环的存在只是产生死锁的必要条件而不是充分条件

4、死锁的检测和解除方法

死锁定理

系统为死锁状态的充分条件是:当且仅当该状态的进程-资源分配图是不可完全简化的。该充分条件称为死锁定理。

简化进程-资源分配图

① 从进程-资源分配图中找到一个既不阻塞又非独立的进程,消去所有与该进程相连的有向边,相当于该进程能够执行完成而释放资源,回收资源使之成为孤立结点。
② 然后将所回收的资源分配给其它进程,再从进程-资源分配图中找到下一个既不阻塞又非独立的进程,消去所有与该进程相连的有向边,使之成为孤立结点。
③ 不断重复该过程,直到所有进程成为孤立结点,则称该图是可完全化简的;否则称该图是不可完全化简的。

死锁检测实例:
在这里插入图片描述
问题求解:
解决思路:无法应用死锁判定原则,需要化简。按照P1、P2和P3的顺序逐一考察每个进程,判断其是否孤立和阻塞。
① P1、P2和P3三个进程均不孤立,接下来需要判断它们是否阻塞。
② P1:该进程请求资源R1,而R1仅有的一个资源已经分配给P2,所以P1阻塞;
③ 该进程请求资源R2,而R2仅有的一个资源已经分配给P3,所以P2阻塞。
④ 该进程请求资源R3,而R3的两个资源已经分别分配给P1和P2,所以P3阻塞。
结论:进程-资源分配图无法完全化简,因此进程集合发生死锁。

5、死锁检测算法与死锁避免算法比较

死锁检测算法考虑了检查每个进程还需要的所有资源能否满足要求;
死锁避免算法则仅根据进程的当前申请资源量来判断系统是否进入了不安全状态。

死锁检测算法处理的进程-资源图中可以同时存在多个进程的请求边。
在银行家算法中,一次仅允许一个进程提出资源请求,做安全分析并分配资源后,才允许下一个进程提出资源请求。

6、死锁的解除方法

① 立即结束所有进程的执行,并重新启动操作系统。以前工作全部作废,损失可能很大。
② 剥夺陷于死锁的进程占用的资源,但并不撤销它,直至死锁解除。
③ 撤销陷于死锁的所有进程,解除死锁继续运行。
④ 逐个撤销陷于死锁的进程,回收其资源,直至死锁解除。
⑤ 根据系统保存的检查点,使所有进程回退,直到足以解除死锁。
⑥ 当检测到死锁时,如果存在某些未卷入死锁的进程,且它们会进一步建立一些新的抑制进程能执行到结束,则它们可能释放足够的资源来解除死锁。


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

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

相关文章

Ceph文件系统

目录 一、环境准备 二、什么是文件系统 三、ceph块存储与文件系统区别 四、创建ceph文件系统 1、启动MDS服务 2、创建存储池 3、创建Ceph文件系统 4、客户端挂载 一、环境准备 Ceph集群搭建参照&#xff1a;Ceph集群部署_桂安俊kylinOS的博客-CSDN博客 以下Ceph存储实…

springcloud22:sentinal的使用

sentinal对比&#xff08;分布式系统的流量防卫&#xff09; 监控保护微服务 Hystrix 需要自己去手工搭建监控平台&#xff0c;没有一套web界面可以进行细粒度化的配置&#xff0c;流控&#xff0c;速率控制&#xff0c;服务熔断&#xff0c;服务降级… 整合机制&#xff1a;se…

外卖项目08---Linux

目录 一、 Linux简介 119 二、Linux安装 120 三、常用命令 122 3.1Linux命令初体验 3.1.1 command [-options] [parameter] 3.2Linux常用命令---文件目录操作命令-ls&-cd&-cat 124 3.2.1list 3.2.2 cd 3.2.3 cat 3.3 Linux常用命令---文件目录操作命令…

9.前端笔记-CSS-CSS三大特性

三大特性&#xff1a;层叠性、继承性、优先级 1、层叠性&#xff08;覆盖性&#xff09; 给相同的选择器设置相同的样式&#xff0c;此时一个样式会覆盖&#xff08;层叠&#xff09;其他冲突的样式。 层叠性原则&#xff1a; 同一选择器&#xff0c;样式冲突&#xff0c;遵…

OpenMV输出PWM,实现对舵机控制

OpenMV的定时器官方函数介绍&#xff1a;Timer类 – 控制内部定时器 目录 OpenMV的PWM资源介绍 为什么要用OpenMV输出PWM OpenMV的PWM资源分配 资源 注意 建议 PWM输出代码 代码讲解 Timer Timer.channel tim.channel与Timer.channel区别 Timer.channel解析 OpenM…

Iframe通信

跨域的种类 一般有两种形式的跨域问题&#xff1a; ①使用XmlHttpRequest(XHR)或者使用AJAX发送的POST或者GET请求。这种形式的跨域是&#xff1a;前端页面与后端进行的跨域请求。 ②父子页面之间进行的DOM操作&#xff08;父子窗口之间的document操作&#xff09;。这种形式…

使用XShell、XFTP 连接 win7 虚拟机(windows、Linux无法远程登录问题)

文章目录前言出错原因&#xff08;题外话&#xff09;那么我们为什么要使用 SSH 连接开始操作&#xff08;Windows7&#xff09;首先进行 SSH 测试获取所需的openSSH文件安装openSSH添加环境变量ssh测试发布ssh服务开始操作&#xff08;Linux&#xff0c;以Ubuntu为例&#xff…

Linux启动流程分析

一、Linux启动流程图 二、硬件启动流程 2.1、POST Linux开机加电后&#xff0c;系统开始开机自检&#xff0c;该过程主要对计算机各种硬件设备进行检测&#xff0c;如CPU、内存、主板、硬盘、CMOS芯片等。主要完成检测硬件能否满足运行的基本条件&#xff0c;叫做“硬件自检(P…

【网络编程】第一章 网络基础(协议+OSI+TCPIP+网络传输的流程+IP地址+MAC地址)

&#x1f3c6;个人主页&#xff1a;企鹅不叫的博客 ​ &#x1f308;专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接&#xff1a;代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

onnx-modifier使用

文章目录**0、作用和功能****1、准备****2、界面介绍****3、注意tips**onnx-modifier基于流行的模型可视化工具 Netron 和轻量级Web应用框架 flask 开发。希望它能给社区带来一些贡献0、作用和功能 经常作为不同框架模型转化的中间文件&#xff0c;拿到ONNX文件&#xff0c;想…

KMP算法【一句话概括什么是KMP】【手写 求next数组】【手写匹配过程】

这里写自定义目录标题1. 什么是KMP算法2. next数组的表示含义怎么算3. 匹配过程例题——KMP字符串1. 什么是KMP算法 KMP算法&#xff1a;给定abcabm字符串和abcabcabm字符串&#xff0c;求前面字符串在后面字符串出现的位置&#xff0c;我们从头开始依次遍历&#xff0c;当遍历…

Supervisor - 用户进程监控利器

Supervisor Supervisor 是一个客户端/服务器系统&#xff0c;允许用户在UNIX操作系统上监视、控制用户进程。从定义里面分析包含两层意思。 监控进程 - 监控进程状态 确定当前进程是否发生异常控制进程 - 针对进程异常情况 控制进程的行为 如重启当前进程 Supervisor 通过 F…

神经网络和深度学习-logistic回归

logistic回归 logistic回归常用于分类问题 &#xff0c;根据输入的x来估计属于不同类的概率为多少&#xff0c;满足分布&#xff0c;即所有类的概率总和为1 在torchvison包中提供了一些常用的数据集&#xff0c;供我们使用&#xff0c;例如&#xff1a;Mnist数据集 Cifar-10数…

力扣算法入门刷题2

12、删除排序链表中的重复元素 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2[ //链表结构 public class ListNode {* int val;* List…

【情感识别】BP神经网络语音情感识别【含Matlab源码 349期】

⛄一、BP神经网络语音情感识别简介 0 引言 随着科技的迅速发展, 人机交互显得尤为重要。语音是语言的载体, 是人与人之间交流的重要媒介。相较于其它交流方式而言, 语音交流更加直接、便捷。近年来, 随着人机交互研究的不断深入, 语音情感识别更成为了学术界研究的热点, 其涉及…

3年测试经验,投了300多份简历,没公司要我...

前言 软件测试行业3年多经验&#xff0c;学历大专自考本科&#xff0c;主要测试方向web&#xff0c;PC端&#xff0c;wap站&#xff0c;小程序公众号都测试过&#xff0c;app也测过一些&#xff0c;C端B端都有&#xff0c;除功能外&#xff0c;接口性能也有涉猎&#xff0c;但…

一条命令能实现前端本地代码和打包仓库的自动化提交?

背景&#xff1a; 先介绍我们原本的代码上线流程&#xff1a;首先发布仓和代码仓&#xff08;dev和master分支对应测试和生产环境&#xff09;独立&#xff0c;每次修复或新增功能&#xff0c;首先需要提交改动到代码仓&#xff08;fork&#xff09;&#xff0c;然后打包代码&…

TI Sitara系列 AM64x开发板——FreeRTOS、Baremetal案例开发案例

前 言 3 1 开发环境搭建 2 CCS工程编译与加载 3 FreeRTOS与Baremetal案例 评估板简介 创龙科技TL62x-EVM是一款基于TI Sitara系列AM62x单/双/四核ARM Cortex-A53 + 单核ARM Cortex-M4F异构多核处理器设计的高性能低功耗工业评估板,由核心板和评估底板组成。处理器ARM Cor…

SpringCloud之微服务实用篇2

在之前我们学习微服务中的两个组件&#xff0c;一个是注册中心&#xff0c;一个负载均衡器。今天&#xff0c;我们主要学习三个内容&#xff0c;分别是&#xff1a;Nacos配置管理、Feign远程调用、Gateway服务网关。 目录 一、Nacos配置管理 1.1、Nacos实现配置管理 1.2、微…

Redis持久化策略AOF、RDB详解及源码分析

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 一、Redis为什么要持久化 Redis 是一个内存数据库&#xff0c;就是将数据库中的内容保存在内存中&#xff0c;这与传统的MySQL&#xff0c;Oracle等关系型数据库直接将内容保存到硬盘中相比&#xff0c;内存数据库的读写效…