OS复习笔记ch6-2

news2024/12/23 14:41:56

死锁的解决

  1. 死锁的预防(打疫苗)
  2. 死锁的避免(戴口罩)
  3. 死锁的检测(做核酸)

死锁的预防

前面我们提到了死锁的四个必要条件

  • 防止前三个必要条件,就是间接预防
  • 防止最后一个必要条件–循环等待,就是直接预防

接下来我们讨论一下这四个条件如何预防

  1. 互斥访问:系统属性不可修改,必须支持
  2. 保持和请求:要求一次性请求所需的全部资源
    • 进程得到资源前要阻塞很长时间
    • 降低了系统利用率和并发程度
    • 有可能无法预先知道所需资源
  3. 不可剥夺:修改为可剥夺
    1. OS可以实现,适用于资源的使用状态可以保存并恢复
    2. 处理器和内存的资源可剥夺(上下文、页面置换算法)
  4. 循环等待:
    1. 需要定义一个资源类型的线性序,资源在申请的时候必须按照这个序
    2. 效率不高,减缓了进程的推进,以及不必要地拒绝资源访问

死锁的避免

系统需要动态作出决定:如果当前资源分配请求满足,是否会导致死锁。

  • 需要未来的进程资源请求
  • 动态判定当下情况有没有可能发生死锁

两种方式:

  1. 拒绝进程启动:如果进程资源请求可能导致死锁则不启动进程

  2. 拒绝资源访问:如果本次分配可能导致死锁,则拒绝进程的增量资源请求

拒绝进程启动

系统中有n个进程,m种资源

image.png

  • R是资源总数矩阵
  • V是可用的资源矩阵
  • claim是最大需求矩阵
  • allocation是已经分配的资源矩阵

保守策略
image.png

e.g.
image.png
假设银行有账面200万,有三个客户来贷款,总量分别是100、80、60万。按照保守策略,银行对第一个用户和第二个用户贷款申请可以批准一次付清,但是第三个用户就不能批准了,相当于拒绝了第三个用户的贷款申请(类比进程启动)。

拒绝资源分配

著名的银行家算法

假设按照上述案例,银行分批贷款,第一次分配完后账面只剩下10万,此时第二轮分期只能给user2,否则user1和3满足不了,后期也收不回本金。所以,银行只能一直拒绝两者的催款直到user2还款。(类比系统资源,OS会根据当前状况动态决定资源分配,是否需要拒绝进程的资源申请)。

这里就要找到安全序列,该序列可以依次满足不同用户的最大需求。

来看OS如何进行资源分配
image.png

R = V + A(资源总数 = 可用资源+已经分配的资源)

这里遍历矩阵C - A每行和V对比,找到某个在有限时间内可以执行完将资源归还给系统的进程。经过多次分配,直到所有进程运行完毕,然后得到安全分配序列。
如上图,能符合011的就只有P2进程可以满足,也就是说OS接下来只能一次满足P2进程的资源申请要求,此时安全队列中加入P2。P2执行结束之后释放自己的所有资源,此时可用资源就变成了673。

image.png

同理,我们按照之前的分配策略,可以发现对于这四个进程的唯一安全分配序列是P2→P1→P3→P4.

举一个不安全示例
当进程1在第一次剩余资源分配的时候请求资源R3,如果OS分配出去,会导致进程2也不能满足最大需求,这个时候就找不到安全分配序列,很容易发生死锁,所以之前就要拒绝进程1的资源分配请求。

教科书上给了伪代码,感兴趣的小伙伴可以看一下
image.png

image.png

避免死锁有一些优势,但是缺点也很明显。
优势

  • 不需要如死锁检测一样抢占、回滚进程
  • 同死锁预防相比,资源分配限制少
    缺点
  • 需要提前声明最大资源请求
  • 设计进程独立且无同步需求
  • 分配资源数目固定
  • 当拥有资源时进程不退出

一般通用的OS很难满足上述需求,所以只能是理论上分析。但是对于一些嵌入式系统,由于代码和硬件固化,或许可以按照银行家算法去设计避免死锁。

死锁的检测

检测频率

检测的频率如何控制呢?
如果每次资源请求的时候都检查是否有死锁,系统开销就会很大

两个思路

  • 进程阻塞时间过长则检测
  • 资源利用率下降则检测

这里可以使用拓扑排序找资源分配回路(需提前简化,以防伪回路)
这个涉及图论中的邻接矩阵的表示,利用的也是前面的V、A,还有一个请求矩阵Q
所有进程都要先打上“未死锁”标签,然后检查进程序列的标签中是否有“死锁”

具体执行过程见PPT,这里不做重点
image.png
image.png

image.png
让我们来分析一些各个进程的情况:
首先,p4肯定没问题,因为它的的分配矩阵行全为0,第一步就被标记了。p3在p4的基础上没问题,因为执行第三步的时候发现p3满足条件1,于是第四步p3被标记。
而p1、p2死锁,因为返回到步骤三发现此时已经找不到符合条件的进程了,检测终止,此时两个进程未标记符合死锁条件。

当然,也可以用上一节学的进程请求/资源分配图来看,更直观一些。

恢复策略
  • 中止所有死锁进程
  • 死锁进程回退到某个预定义的检查点,重新启动所有进程(下一次可能还会发生死锁)
  • 依次中止死锁进程,可以逐步解决
  • 剥夺进程死锁的资源

而上述选择中止的死锁进程准则

  • 到目前为止,使用处理器时间最少(有效执行时间最短)
  • 到目前为止,产生输出最少(比如写数据最少)
  • 估计剩余的执行时间最长(第九章调度策略)
  • 到目前为止,分配资源最少的(拥有的资源最少)
  • 考虑进程的优先级最低的进程

亦可以采用复合准则加权统一各个原则

综合死锁策略

举例

  • 将各种资源归入若干不同的资源类
  • 每一类资源使用线性序申请预防
  • 对同一资源类中的资源,采用适当的方法

例如数据库管理系统

  • Swappable space: 对换用的磁盘块(空间足够),一次性分配所需所有资源来预防或死锁避免
  • Process resources: 可分配资源(磁带机、文件),避免或基于资源排序的预防
  • Main memory: 页或段,基于剥夺的预防
  • Internal resources: 如 I/O channels,基于资源排序的预防(早期的磁带机等)

总结

image.png

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

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

相关文章

每日一题23:统计文本中单词出现的次数

一、每日一题 解答: import pandas as pd def count_occurrences(files: pd.DataFrame) -> pd.DataFrame:bull_cnt len(files[files[content].str.contains(r\sbull\s)])bear_cnt len(files[files[content].str.contains(r\sbear\s)])res_df pd.DataFrame({…

【Text2SQL 论文】SeaD:使用 Schema-aware 去噪训练的 end2end 的 Text2SQL

论文:SeaD: End-to-end Text-to-SQL Generation with Schema-aware Denoising ⭐⭐ NAACL 2022, arXiv:2105.07911 本论文提出 SeaD 模型,使用 schema-aware 的去噪方法来训练一个 end2end、seq2seq 的 Transformer 模型来实现 Text2SQL。 一、论文速读…

【LeetCode刷题记录】207.课程表

207 课程表 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 b…

第20届文博会:“特别呈现”—周瑛瑾雷米·艾融双个展,著名美术评论家,批评家彭德教授对周瑛瑾作品进行评论

周瑛瑾不是学院派艺术家,但在彩墨画领域的天赋超出中国八大美院的同类型画家。相比具有批判意识的当代艺术,他的彩墨艺术如同我们这个苦难世界的创可贴和安慰剂。当我面对他的彩墨画,首先是惊艳,随之想到屈原的离骚,还…

淘工厂订单导出自动化工具

目录 下载安装与运行 主要目的 其他工具的弊端 本工具的优势 视频演示 下载新版后的注意事项 支持的导出项 什么叫一单多拍 常见问题 如何实现快捷登录 导出卡住时如何操作 如何精确导出 下载安装与运行 下载、安装与运行 语雀 主要目的 导出订单信息&#xf…

【数据结构】哈希表的原理及其实现

文章目录 哈希表的概念哈希函数的设计常见的哈希函数 哈希冲突1. 闭散列代码实现 2. 开散列拉链法的优点 针对开散列哈希的扩展基于开散列拉链法封装哈希表MyHash.h 基于哈希表实现unordered_map类Myunordered_map.h 基于哈希表实现unordered_set类Myunordered_map.h 哈希表的概…

Ethercat总线学习:CAN、CANopen、EtherCAT、PDO与SDO

各种XoE CoE是什么 CoE CAN application protocol Over EtherCAT,是EtherCAT应用层协议的一种,根据CiA402协议编写,使用对象和对象字典的功能来实现邮箱通讯。 PDO与SDO是常用的数据传输方式,他们在实现高效数据传输、同步方面发…

html中被忽略的简单标签

1&#xff1a; alt的作用是在图片不能显示时的提示信息 <img src"https://img.xunfei.cn/mall/dev/ifly-mall-vip- service/business/vip/common/202404071019208761.jp" alt"提示信息" width"100px" height"100px" /> 2&#…

Vue2基础及其进阶面试(二)

vue2的生命周期 删除一些没用的 App.vue 删成这个样子就行 <template><router-view/></template><style lang"scss"></style>来到路由把没用的删除 import Vue from vue import VueRouter from vue-router import HomeView from .…

Java进阶学习笔记25——Objects类

为啥比较两个对象是否相等&#xff0c;要用Objects的equals方法&#xff0c;而不是用对象自己的equals方法来解决呢&#xff1f; Objects&#xff1a; Objects类是一个工具类&#xff0c;提供了很多操作对象的静态方法供我们使用。 package cn.ensource.d14_objects;import ja…

无货源抖店怎么起店?教你两种起店方法,记得收藏!

大家好&#xff0c;我是喷火龙。 开通抖音小店之后最重要的一步就是起店了&#xff0c;今天就给大家分享两种起店方法。 大家都知道&#xff0c;产品是做店的核心&#xff0c;品不行&#xff0c;就算平台给你免费的流量&#xff0c;那你也承接不住。 第一个&#xff0c;商品卡…

Steam在连接至服务器发生错误/连接服务器遇到问题解决办法

Steam作为全球最大的数字游戏分发平台&#xff0c;构建了一个活跃的玩家社区&#xff0c;用户可以创建个人资料&#xff0c;添加好友&#xff0c;组建群组&#xff0c;参与讨论&#xff0c;甚至直播自己的游戏过程。通过创意工坊&#xff0c;玩家还能分享自制的游戏模组、地图、…

【古董技术】ms-dos应用程序的结构

序 制定一个MS-DOS应用程序计划需要认真分析程序的大小。这种分析可以帮助程序员确定MS-DOS支持的两种程序风格中哪一种最适合该应用程序。.EXE程序结构为大型程序提供了好处&#xff0c;因为所有.EXE文件之前都有额外的512字节&#xff08;或更多&#xff09;的文件头。另一方…

跨境选品师不是神话:普通人也能轻松掌握,开启全球贸易新篇章!

随着互联网技术的飞速发展&#xff0c;跨境电商行业已成为全球经济的新增长点。在这个背景下&#xff0c;一个新兴的职业——跨境选品师&#xff0c;逐渐走进了人们的视野。那么&#xff0c;跨境选品师究竟是做什么的?普通人又该如何成为优秀的跨境选品师呢? 一、跨境选品师的…

Docker compose 的方式一键部署夜莺

官方安装文档&#xff1a;https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v7/install/docker-compose/ 介绍&#xff1a;夜莺监控是一款开源云原生观测分析工具&#xff0c;采用 All-in-One 的设计理念&#xff0c;集数据采集、可视化、监控告警、数据分析…

数据结构(四)串

2024年5月26日一稿(王道P127) 定义和实现

日志的介绍及简单实现

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 日志是什么&#xff1f; 为什么需要日志&#xff1f; 实现一个简单日志 时间戳 clock_gettime time & localtime 可变模板参数(使用C语言)&#xff0c;va_start & va_end & vsprintf 宏 __LINE__…

推荐一款媒体影音嗅探神器—Chrome扩展插件(猫抓cat-catch)

目录 1.1、前言1.2、下载地址1.3、github Releases 版本说明1.4、安装步骤1.5、猫抓插件常规设置1.5.1、设置抓取文件的类型1.5.2、设置抓取文件的后缀名 1.1、前言 我们在日常上网的过程中&#xff0c;很多音频、视频网站下载资源都非常不方便&#xff0c;要么需要安装客户端&…

【高阶数据结构】AVL树的旋转与底层(C++实现)

1.AVL树的概念及作用 2.AVL树插入数据的规则 1.按照搜索树的规则插入&#xff0c;然后更新父亲的平衡因子 2.更新父亲的平衡因子后&#xff0c;如果出现一下三种情况需要进行相应处理 3.AVL树的旋转 3.1右单旋 右单旋的所有情况可以抽象为上图&#xff1a;图中&#xff0c;a,…

【识人】感情与交友中,如何判断一个人的性格,以及是否值得交往和相处

【识人】感情与交友中&#xff0c;如何判断一个人的性格&#xff0c;以及是否值得交往和相处 文章目录 序言正文1、学会筛选&#xff0c;贴标签&#xff0c;学会区别对待&#xff0c;2、男生女生一定要在年轻的时候学会对外在祛魅3、培养付出意识&#xff0c;学会顶风相见。4、…