OS复习笔记ch6-2

死锁的解决

  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.mzph.cn/web/15908.shtml

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

相关文章

软测刷题-错题1

提高测试效率的方法: 1、不要做无效的测试 2.不要做重复的测试 3.不同测试版本的测试侧重点 4.优化测试顺序 LoadRunner是对服务器进行施压。 在数据库中存在的用户数是指注册用户数。 input标签可以直接使用send_keys实现上传,而非input标签是无法直…

Rust后台管理系统Salvo-admin源码编译

1.克隆salvo-admin后台管理系统源码: https://github.com/lyqgit/salvo-admin.git 2.编译 编译成功 3.创建mysql数据库与执行sql脚本 输入名称ry-vue 执行sql脚本 全部执行上面3个sql 修改数据库用户名与密码: 清理及重新编译 cargo clean cargo build 4.运行并测试 cargo…

使用vue,mybatis,mysql,tomcat,axios实现简单的登录注册功能

目录 第一步环境搭建 后端: 前端: 第二步画流程图 web: service: dao层: 第三步前端代码的实现 这是开始的页面,接下来我们要到router路由下书写#login的路径 路由中的component在我们自己创建的views书写vue文件…

单日收益1000+看了就会的项目,最新灵异短视频项目,简单好上手可放大操作

各位好友,佳哥在此与大伙儿聊聊一项神秘莫测的短视频项目。你或许会想,“又是一个视频创作项目?” 但别急,这个项目与众不同,日入千元不再是梦,而且它的易用性让人惊喜,无论你是初学者还是资深玩…

春秋云境CVE-2018-7422

简介 WordPress Plugin Site Editor LFI 正文 1.进入靶场 2.漏洞利用 /wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path/../../../../../../flag看别人wp做的。不懂怎么弄的,有没有大佬讲一下的

没有电商经验的人去操作抖音小店,难度大不大?好操作吗?

大家好,我是电商小V 很多新手小伙伴想去操作抖音小店项目,咨询的最多的问题就是我没有电商运营的经验可以去操作吗? 当然是可以操作的,抖音小店项目对于新手来说是一个非常友好的项目,很多小伙伴都是感觉没有电商经验去…

数据库攻防之MySQL

MySQL 是最流行的关系型数据库,与此同时也是 web 应用中最好的关系型数据库管理应用软件。我们在渗透过程中碰到的 PHP 站点大部分都会搭配 MySQL 数据库,因此它是红队攻防中最常遇到的数据库。 0x01 MySQL简介 MySQL 是典型的关系型数据库,…

YOLOv10 | 无NMS的YOLO | 实时端到端目标检测的新突破

过去几年里,YOLOs因在计算成本和检测性能之间实现有效平衡而成为实时目标检测领域的主流范式。研究人员针对YOLOs的结构设计、优化目标、数据增强策略等进行了深入探索,并取得了显著进展。然而,对非极大值抑制(NMS)的后…

redis--消息队列

分类 生产者消费模式 发布者订阅模式 生产者消费模式 在生产者消费者(Producer/Consumer)模式下,上层应用接收到的外部请求后开始处理其当前步骤的操作,在执行完成后将已经完成的操作发送至指定的频道(channel)当中,并由其下层的应用监听…

【Chrono Engine学习总结】6-创建自定义场景-6.2-chrono中的光线设置

由于Chrono的官方教程在一些细节方面解释的并不清楚,自己做了一些尝试,做学习总结。 上一篇文章中,自己【用sketchup重建了三维场景】,但导入chrono中颜色很不正确,几乎都是白色的,但也不是完全白色。经过…

IDE上传本地仓库到GitHub

IDE上传本地仓库到GitHub 1、选择远程仓库平台2、下载安装Git3、IDE集成Git4、本地项目上传GitHub 1、选择远程仓库平台 1.1、注册远程仓库平台 常见的远程仓库托管平台有: 1)GitHub 域名:https://github.com 介绍:GitHub是全球最…

Java订餐系统源码 springboot点菜系统源码

Java订餐系统源码 springboot点菜系统源码 源码下载地址:https://download.csdn.net/download/xiaohua1992/89341358 功能介绍: 前台登录:前台登录: ①首页:菜品信息推荐、菜品信息展示、查看更多 ②菜品信息&…

地理信息系统(GIS)软件开发

地理信息系统(GIS)软件开发是一项复杂且系统性很强的工程,涉及空间数据的采集、管理、分析和展示。以下是一个典型的GIS软件开发流程,包括各个步骤的详细说明。北京木奇移动技术有限公司,专业的软件外包开发公司&#…

面向对象------多态

1.多态的定义 通俗来说,当同一种行为或者事情发生在不同的对象上,这些行为或者事情最终得到的结果不同。 注意:多态要发生在继承的基础上。 例如:彩色打印机和黑白打印机。 彩色打印机和黑白打印机是不同的对象,但…

详细分析Element中的MessageBox基本知识(附Demo)

目录 前言1. 基本知识2. Demo2.1 确认框2.2 警告框2.3 对话框 3. this.$confirm 前言 详细知识推荐阅读:详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版) MessageBox则常用于Vue2 1. 基本知识 MessageBox 是 Element UI 提供…

Liunx学习随笔

Linux学习随笔 一.前期准备1.安装Vmware Workstation软件2.下载linux镜像3.安装操作系统 夕阳无限好,只是近黄昏,时隔一年,重新提笔 没有比脚更远的路,没有比人更高的山 一.前期准备 1.安装Vmware Workstation软件 下载地址&am…

南京观海微电子----升压和降压模块电路解析

(一)升压模块 1. 如果是交流电压升压,那非常简单,只要选择变比合适的变压器就行(1:3和1:4.17); 2. 如果是直流电压升压,从12v升到36v也很容易,可选择用的开关稳压器很多,例如 :Cs5171.Cs5172.Cs5173.Cs5174.Mc33063.…

【调和级数】100321. 优质数对的总数 II

本文涉及知识点 调和级数 质数、最大公约数、菲蜀定理 LeetCode100321. 优质数对的总数 II 给你两个整数数组 nums1 和 nums2,长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以被 nums2[j] * k 整除,则称数对 (i, j) 为 优质数对&#…

数据结构·一篇搞定队列!

hello,大家好啊,肖恩又拖更了,你们听我狡辩,前段时间有期中考试,so我就没什么时间写这个,在这给大家道个歉😭😭😭 我后面一定尽力不拖更 那么接下来,我们来看…

粒子辐照环境中相机镜头防护及LabVIEW图像处理注意事项

在粒子辐照环境测试电路板性能的实验中,需要对相机镜头进行有效防护,同时利用LabVIEW进行图像识别和处理。本文将讨论相机镜头防护的关键因素和LabVIEW处理过程中的注意事项,包括防辐射材料选择、辐射屏蔽措施、散热管理、空间布局及LabVIEW软…