操作系统基础:死锁

news2024/9/21 16:33:44

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:OS从基础到进阶


  • 🐦1 死锁的概念
    • 🦢1.1 总览
    • 🦢1.2 什么是死锁
    • 🦢1.3 死锁、饥饿、死循环的区别
      • 🐧1.3.1 概念
      • 🐧1.3.2 区别
    • 🦢1.4 死锁产生的必要条件
      • 🐧1.4.1 互斥条件
      • 🐧1.4.2 不剥夺条件
      • 🐧1.4.3 请求和保持
      • 🐧1.4.4 循环等待
    • 🦢1.5 什么时候会发生死锁
    • 🦢1.6 死锁的处理策略
    • 🦢1.7 总结
  • 🐦2 死锁的处理策略——预防死锁
    • 🦃2.1 总览
    • 🦃2.2 破坏互斥条件
      • 🦆2.2.1 什么是互斥条件?
      • 🦆2.2.1 如何破坏?
      • 🦆2.2.3 缺点
    • 🦃2.3 破坏不剥夺条件
      • 🦆2.3.1 什么是不剥夺条件
      • 🦆2.3.2 如何破坏不剥夺条件
      • 🦆2.3.3 缺点
    • 🦃2.4 破坏请求和保持条件
      • 🦆2.4.1 解释
      • 🦆2.4.2 如何破坏
      • 🦆2.4.3 缺点
    • 🦃2.5 破坏循环等待条件
      • 🦆2.5.1 解释
      • 🦆2.5.2 如何破坏
      • 🦆2.5.3 缺点
    • 🦃2.6 总结
  • 🐦3 死锁的处理策略——避免死锁
    • 🦅3.1 总览
    • 🦅3.2 安全序列
    • 🦅3.3 不安全状态
    • 🦅3.4 银行家算法
      • 🦉3.4.1 定义以下变量
      • 🦉3.4.2 银行家算法的步骤
  • 🐦4 死锁的检测和解除
    • 🦩4.1 总览
    • 🦩4.2 死锁的检测
      • 🦚4.2.1 检测死锁的前提条件
      • 🦚4.2.2 数据结构
      • 🦚4.2.3 检测算法
    • 🦩4.3 死锁的解除
      • 🦚4.3.1 解除死锁的办法
      • 🦚4.3.2 进程撤销根据
    • 🦩4.4 总结
  • 🕮 5 总结


🐦1 死锁的概念

🦢1.1 总览

image1

🦢1.2 什么是死锁

image2

🦢1.3 死锁、饥饿、死循环的区别

🐧1.3.1 概念

image3

🐧1.3.2 区别

image4

🦢1.4 死锁产生的必要条件

死锁的产生必须满足以下四个基本条件

🐧1.4.1 互斥条件

image5

🐧1.4.2 不剥夺条件

image6

🐧1.4.3 请求和保持

image7

🐧1.4.4 循环等待

image8

可以类比于哲学家问题的死锁情况,如图
image9
注意:
image10
假如在上图的哲学家问题中,有第六个哲学家手里有筷子,那么意味着同类资源数大于1,只要第六个哲学家提供筷子就可以解决死锁的局面。

🦢1.5 什么时候会发生死锁

image11

🦢1.6 死锁的处理策略

image12

🦢1.7 总结

image13

🐦2 死锁的处理策略——预防死锁

🦃2.1 总览

image1
死锁只有在上述四个条件全部满足时才会产生,因此只要破坏其中的任何一个就可以避免死锁。

🦃2.2 破坏互斥条件

🦆2.2.1 什么是互斥条件?

image2

🦆2.2.1 如何破坏?

当存在互斥条件时,比如说对打印机的使用是互斥的,则可能会出现阻塞的情况:
image3

为此可以采用SPOOLing技术,将互斥资源在逻辑上打造成为共享资源。对于上述情况,可以增加一个缓冲空间,它接收了来自进程对打印机的使用请求,并将请求存储起来,一个一个的实现,如图:
image4

image5

🦆2.2.3 缺点

image6

🦃2.3 破坏不剥夺条件

🦆2.3.1 什么是不剥夺条件

image7

🦆2.3.2 如何破坏不剥夺条件

image8

🦆2.3.3 缺点

image9

🦃2.4 破坏请求和保持条件

🦆2.4.1 解释

image10

🦆2.4.2 如何破坏

image11

🦆2.4.3 缺点

image12
例如,假如现在有A、B、C三类进程,A需要资源1,B需要资源2,C需要资源1、2。假如源源不断的有A、B类进程申请资源,则C类进程始终等不到资源1、2空闲的时候,就会造成饥饿。
image13

🦃2.5 破坏循环等待条件

🦆2.5.1 解释

image14

🦆2.5.2 如何破坏

image15

🦆2.5.3 缺点

image16

🦃2.6 总结

image17

🐦3 死锁的处理策略——避免死锁

🦅3.1 总览

image1

🦅3.2 安全序列

image2

🦅3.3 不安全状态

image3

🦅3.4 银行家算法

假设此时共有n个进程,m种资源

🦉3.4.1 定义以下变量

(1)可用资源向量available[m]:记录第m种资源当前可利用的数量
(2)最大需求向量max[i][j]:记录第i个进程对第j种资源的最大需求量
(3)分配矩阵allocation[i][j]:记录第i个进程拥有第j种资源的数量
(4)请求向量request[i][j]:记录第i个进程对第j种资源的申请量
(5)需求矩阵need[i][j]:记录第i个矩阵第第j种资源的需求量。等于分配矩阵与分配矩阵的差值

🦉3.4.2 银行家算法的步骤

image4
第④步的安全性检查的步骤为
image5

🐦4 死锁的检测和解除

🦩4.1 总览

image1

🦩4.2 死锁的检测

🦚4.2.1 检测死锁的前提条件

image2

🦚4.2.2 数据结构

定义以下符号
image3
具体如图所示
image4

🦚4.2.3 检测算法

(1)关于可完全简化
image5

(2)算法内容
image6

(3)具体实现解释
①无死锁
在示意图中,R1此时的资源数量为0,而R2此时的资源数量为1,而P1像R2申请的资源数为1,小于等于剩余的资源数,故抹去P1。
之后,R1剩余资源数为2,P2申请资源数为1,可以满足,因此不会发生死锁。
②有死锁
image7
这是一个典型的死锁图,P1申请R1,R1分配给了P2,P2申请R2,R2分配给了P3,P3申请R3,R3分配给了P1、P2。三者都在等待对方释放资源,导致了死锁情况。
事实上,本图找不到既不堵塞又不孤立的进程。检测算法不能继续。

(4)补充
image8

🦩4.3 死锁的解除

🦚4.3.1 解除死锁的办法

image9

🦚4.3.2 进程撤销根据

①进程优先级:优先级越高的自然越不应该被首先撤销

②还要多久才可以完成:显然,进程完成所需时间越短,它就越不应该被首先撤销,应该撤销那些还要很久才可以完成的进程

③已执行多长时间:撤销执行时间越长的进程,那么意味着之后还要花更长的时间去完成,系统付出的代价也越大。所以,执行时间越短的进程应该被首先撤销。

④进程已经使用了多少资源。一个进程所拥有资源的数量越多,撤销它而彻底解除死锁局面的可能性就越大,就更应该被首先撤销。

⑤进程是交互式的还是批处理式的。撤销交互式的进程对于用户的体验可能不是很好,因此应首先撤销批处理式的进程

🦩4.4 总结

image10

🕮 5 总结

操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。

它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。

操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。

在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。

渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

#RAG|NLP|Jieba|PDF2WORD# pdf转word-换行问题

文档在生成PDF时,文宁都发生了什么。本文讲解了配置对象、resources对象和content对象的作用,以及字体、宇号、坐标、文本摆放等过程。同时,还解释了为什么PDF转word或转文字都是一行一行的以及为什么页眉页脚的问题会加大识别难度。最后提到了文本的编码和PDF中缺少文档结构标…

7zip压缩包乱码问题

打开压缩包查看或解压时,发现其中的文件名显示乱码。 经网络搜索,判断是编码的问题。因为我OS是UTF-8,而压缩包编码是CP936。 解决方法只能用命令行,-mcp指定了code page: "c:\Program Files\7-Zip\7z.exe&quo…

阿里云智能集团副总裁安筱鹏:企业数字化的终局是什么?

以下文章来源于数字化企业 ,作者安筱鹏博士 回答数字化终局追问的起点是,企业需要重新定义我是谁。成为有竞争力的行业领导厂商,你应当成为一个客户运营商,即能够实时洞察、实时满足客户需求,追求极致的客户体验。而要…

12.scala下划线使用总结

目录 概述实践变量初始化导包引入方法转变为函数用户访问Tuple元素简化函数参数传递定义偏函数变长参数 结束 概述 实践 变量初始化 在Scala中,变量在声明时需要显式指定初始值。可以使用下划线为变量提供初始值,但这种语法仅限于成员变量,…

抠门精出游记第三天

熊野古道,最早我是在新加坡地铁站看到的日本旅游广告上出现的,我觉得以前很多次自由行都是打卡式的,觉得确实需要一些深度游,而且趁着身体状态还可以,反正就这么种草了。 然后小红书上看到不少有关行程介绍&#xff0c…

npm i 遇到了 npm ERR! code CERT_HAS_EXPIRED

npm i 遇到了 npm ERR! code CERT_HAS_EXPIRED 更新你的系统时间【命令 date】。确保你的计算机上的时间和时区设置正确,并且与当前时间相符。 清除你的 npm 缓存。使用 npm cache clean --force 命令清除你的 npm 缓存,关闭ssl验证,并重新运…

使用 Docker 部署超级马里奥 Web 游戏

一、游戏介绍 超级马里奥 是一款经典闯关游戏,也叫做超级玛丽。由红白机 FC 游戏移植而来,简约的游戏画面,加上简单的操作方式,让你重温儿时的经典。 二、环境检查 1)检查操作系统版本 检查本次实践的操作系统版本 ca…

使用VScode远程连接Ubuntu

君衍. 一、环境准备二、配置VScode三、远程连接Ubuntu 平常远程连接服务器的工具有很多,比如Moba、Xshell、putty、甚至CRT都可以进行远程连接服务器,但是他们的本质是相同的,都是使用ssh来进行远程连接。 这里我们之所以要使用VScode远程连接…

Debezium发布历史100

原文地址: https://debezium.io/blog/2020/12/17/debezium-1-4-cr1-released/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Debezium 1.4.0.CR1 发布 2020 年 12 月 17 日 作者: 克里斯…

SpringCloud Gateway(4.1.0) 返回503:原因分析与解决方案

文章目录 一、环境版本二、原因分析三、解决方案 一、环境版本 Versionspring-cloud-dependencies2023.0.0spring-cloud-starter-gateway4.1.0Nacosv2.3.0 二、原因分析 在 Spring Cloud Gateway 的早期版本中,Ribbon 被用作默认的负载均衡器。随着Spring Cloud的…

如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图二

Mermaid 系列 如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图一 1. 如何使用 Mermaid 生成图表 Mermaid 是一个基于 JavaScript 的工具,可将 Markdown 样式的文本转换为动态图表,让您可以毫不费力地创建和修改它们。 Mermaid 使使用简单的文…

爬虫学习笔记-scrapy安装及第一个项目创建问题及解决措施

1.安装scrapy pycharm终端运行 pip install scrapy -i https://pypi.douban.com/simple 2.终端运行scrapy startproject scrapy_baidu,创建项目 问题1:lxml版本低导致无法找到 解决措施:更新或者重新安装lxml 3.项目创建成功 4.终端cd到项目的spiders文件夹下,cd scra…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏5(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言修改鼠标光标和中心提示图鼠标光标素材修改默认鼠标光标修改中心提示图 拾取提示弹窗简单绘制UI拾取弹窗功能 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使…

关于JVM常见的十道面试题

方法区、永久代和元空间有什么区别? 方法区、永久区和元空间是Java虚拟机用于存储类信息的区域,它们在不同的Java虚拟机版本有所不同: 方法区:方法去是一块用于存储类的结构信息、常量、静态变量、即时编译器编译后的代码等数据…

R语言基础学习-02 (此语言用途小众 用于数学 生物领域 基因分析)

变量 R 语言的有效的变量名称由字母,数字以及点号 . 或下划线 _ 组成。 变量名称以字母或点开头。 变量名是否正确原因var_name2.正确字符开头,并由字母、数字、下划线和点号组成var_name%错误% 是非法字符2var_name错误不能数字开头 .var_name, var.…

【Linux C | 网络编程】详细介绍 “三次握手(建立连接)、四次挥手(终止连接)、TCP状态”

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

稀疏场景高性能训练方案演变|京东广告算法架构体系最佳实践

近年来,推荐场域为提升模型的表达能力和计算能力,模型规模和计算复杂度大幅增加,同时,高规格硬件资源为模型迭代、算法优化带来了更大的机遇和挑战。为了应对模型规模和算力升级带来的存储、IO和计算挑战,京东零售广告…

Redis核心技术与实战【学习笔记】 - 9.如何避免单线程模型的阻塞

概述 Redis 被广泛应用的原因是因为它支持高性能访问。所以,我们要重视所有可能影响 Redis 性能的因素(如命令操作、系统配置、关键机制、硬件配置等)。 影响 Redis 性能的 5 大方面的潜在因素分别是: Redis 内部的阻塞式操作C…

leetcode209长度最小的子数组|滑动窗口算法详细讲解学习

滑动窗口是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。 分类:窗口有两类,一种是固定大小类的窗口,一类是大小动态变化的窗口。 简而言之,滑动窗口算法在一个特定大小的字符串或数组上进行操作&…

git clone常见问题一览及解决方法

在使用Ubuntu下,终端运行git clone命令时会遇见许多问题,本文主要针对一些常见的问题进行整理。关于换源问题,推荐使用小鱼的一键换源。 1.git clone 速度过慢 1.1 魔法 这个方法不做过多赘述,ubuntu下个人使用发现体验良好&am…