操作系统考试复习—第三章 优先级倒置 死锁问题

news/2024/5/18 20:54:08/文章来源:https://blog.csdn.net/m0_53345417/article/details/130499782

当前OS广泛采用优先级调度算法和抢占方式,然而在系统中存在着影响进程运行的资源从而可能产生"优先级倒置"现象

具体解释为:在原本的调度算法设计中,高优先级进程可以抢占低优先级的CPU资源,先执行高优先级任务。但是存在某种情况下会出现高优先级的进程无法完成需要等低优先级的进程完成后才可以执行,这样的现象在实时系统当中很危险有很大的坏处所以我们要避免它的出现。

这种情况是怎么形成的呢,假如有三个完全独立的进程P1,P2,P3。P1的优先级最高依次减小,P3优先级最低。P1和P3两者共用一个临界资源。当P3先执行的时候只是进行了P操作未进行V操作将临界资源释放但是P2这时候把P3的处理机抢占了这时P3无法执行。当P1要执行的时候虽然可以将P2占有的处理机抢占但是无法把P3占用的临界资源进行得到。所以需要等待P2执行结束再P3执行结束释放临界资源这时候P1才可以进行执行。

通俗来讲:

优先级反转最坏的一种情况就是,一个高优先级任务很紧急,但其资源已经被一个低优先级任务占有,且该低优先级任务前还有很多个耗时很长的中优先级任务。

对于针对任务的紧急重要程度而设计的优先级调度机制,优先级反转导致的这种情况是对优先级调度本身的践踏,

其公平,无错,循规蹈矩,但后果恶劣。
解决优先级倒置的方法有:优先级继承方法

优先级继承方法是有效解决优先级反转问题的一种方法,其“继承”的思路其实不复杂。简言之,优先级继承就是临时把低优先级任务的优先级升高,让CPU优先并尽快执行完该低优先级任务,执行完时将其优先级再降至原优先级,并释放资源,原本的高优先级任务拿到资源后则可以抢占CPU并执行。

 死锁问题

死锁问题的定义:在一组进程发生死锁的情况下,这组死锁进程中的每一个进程,都在等待另一个死锁进程所占用的资源.或者说每个进程所等待的事件是该组中其他进程释放所占有的资源。

如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。

产生死锁的四个必要条件:

1.互斥条件:进程对所分配到的资源进行排它性使用,即在一段时间内,某资源只能被一个进程占用。如果此时还有其他进程请求资源,则该请求进程只能等待,直至该资源的进程用毕释放。

2.请求保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被堵塞,但对自己已获得的资源保持不放。

3.不可抢占条件:进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完之后自己释放

4.循环等待条件:在发生死锁的时,必然存在一个进程—资源的循环链。

例如:进程 P1 已经分得了两个 R1 资源,并又请求一个 R2 资源;进程 P2 分得了一个 R1 和一个 R2 资源,并又请求一个 R1 资源。

死锁的检测

为了能对系统是否已发生了死锁进行检测,必须

1.用某种数据结构来保存资源的请求和分配信息;

2.提供一种算法,利用上述信息来检测系统是否已进入死锁状态。

数据结构:资源分配图由一组结点一组边构成。

结点分为资源结点(对应一类资源,一类资源可能由多个)和进程结点(对应一个进程)。

分为分配边(资源结点->进程结点)和申请边(进程结点->资源结点)

如果系统中剩余的可用资源数足够满足进程的需求,那么这个进程暂时是不会阻塞的,可用顺利地执行下去。

如果这个进程执行结束了把资源归还系统,就可能使某些正在等待资源的进程被激活,并顺利地执行下去。

相应地,这些被激活的进程执行完之后又会归还一些资源,这样可能又会激活另外一些阻塞的进程

如果按上述过程分析,最终能消除所有边,就称这个图是可完全简化的。此时一定没有发生死锁(相当于能找到一个安全序列)

如果最终不能消除所有边,那么此时就是发生了死锁。

检测死锁的算法:

1)在资源分配图中,找出既不阻塞又不是孤点的进程Pi(即找出一条有向边与它相连,且该有向边对应资源的申请数量小于等于系统中已有空闲资源数量。若所有连接该进程的边均满足上述条件,则这个进程能继续运行直至完成,然后释放它所占有的所有资源)。消去它所有的请求边和分配边,使之成为孤立的结点。

2)进程Pi所释放的资源,可用唤醒某些某些因等待这些资源而阻塞的进程,原来的阻塞进程可能变为非阻塞进程。根据1中的方法进行一系列简化后,若能消区图中所有的边,则称该图是完全简化的。那么也就是不存在死锁的

对于下面的资源分配图来说:

 对于P1而言它向R2请求资源由于R2里面有两个资源只有一个被分配了所以P1是可用进行下去的。所以我们认为P1是可以运行完释放的我们将P1的分配边和请求边删去。然后我们发现P2从堵塞状态到了可以执行的状态了,所以P2也是可用将它的分配边和请求边释放了。最后都是孤立结点了,那么就可以认为是不存在死锁的。

 死锁的解除

解除死锁的基本方法:

1.抢占资源法:挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这样资源分配给其他的死锁进程。但是应该防止被挂起的进程长时间得不到资源而饥饿。

2.撤销进程法(或终止进程法):

一种情况是终止所有的死锁进程那么死锁也就解除了。这种方式的优点是实现简单,但所付出的代价可能会很大。因为有些进程可能已经运行了很长时间,已经接近结束了,一旦被终止可谓功亏一篑,以后还得从头再来。

另一种情况是:按照某种顺序逐个地终止进程,直到有足够的资源将系统从死锁状态释放出来。但是这种方法所付出的代价可能性也很大因为每次释放一个进程都要用检测算法检测是不是从死锁状态释放了。另外也需要寻找思考用什么样的策略选择一个要终止的进程。

3.进程回退法。让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史信息,设置还原点。
 

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

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

相关文章

x265码控分析

D和R的关系 高分辨率量化 均匀量化:量化区间 ‘ Δ k y k − y k − 1 ‘ \Delta_ky_k-y_{k-1} ‘Δk​yk​−yk−1​‘,近似为常数;p(x)为信源概率密度函数,且 ‘ Δ k ‘ \Delta_k ‘Δk​‘的大小相对于p(x)的变化率充分小&…

电力NLP:指令票规范识别

文章目录 任务目的想法讲解数据集介绍1电气主语2操作任务判断数据集3操作内容判断数据集4错误词数据集 解法讲解程序、数据集下载链接 任务目的 识别调度指令票(或者其它操作票)是否规范。 想法讲解 按石第2014—16号定值单投入石双西线161开关6区保护…

突发!ChatGPT王炸级更新!支持GPT-4联网 Code Interpreter!

4月30日,OpenAI官方悄悄发布了联网版GPT-3.5。虽然名字变了,但使用体验却是换汤不换药,还是那套。 然而,万万没想到的是,刚过去没几天,昨天5月4日,鱼哥发现自己的Plus账号竟然多了一些能力&…

树莓派硬件介绍及配件选择

目录 树莓派Datasheet下载地址: Raspberry 4B 外观图: 技术规格书: 性能介绍: 树莓派配件选用 电源的选用: 树莓派外壳选用: 内存卡/U盘选用 树莓派Datasheet下载地址: Raspberry Pi …

C++11多线程:std::thread创建线程和std::async创建异步任务的区别,std::async创建异步任务后没有被推迟执行。

系列文章目录 文章目录 系列文章目录前言一、thread和async的区别1.1 新线程和异步任务1.2 std::async和std::thread最明显的不同,就是async有时候并不创建新线程。1.3 std::async和std::thread的区别1.4 std::async不确定性问题的解决 二、使用方法2.1 std::async创…

JVM学习随笔02——虚拟机内存区组成与内存溢出异常

一、Java虚拟机内存区组成图 1、程序计数器: 每个线程独占一个计数器,用来指示该线程下一条要执行的指令的地址。这一部分不会导致内存异常。PS:如果一个线程进入的是一般的Java方法,计数器指示的是下一条指令地址;如果…

浅谈“孔乙己”的长衫

书中的孔乙己 孔乙已是鲁迅笔下人物,穷困流倒还穿着象征读书人的长衫,迁腐、麻木。最近,大家自我调佩是“当代孔乙己”,学历成为思想负担,找工作时高不成低不就。 当代的“孔乙己” 如今社会,从小学开始每…

C# 学习abstract

abstract 顾名思义:抽象 从微软官方文档来看:abstract 修饰符指示被修改内容的实现已丢失或不完整。 abstract 修饰符可用于类、方法、属性、索引和事件。 在类声明中使用 abstract 修饰符来指示某个类仅用作其他类的基类,而不用于自行进行…

L4公司进军辅助驾驶,放话无图也能跑遍中国

作者 | Amy 编辑 | 德新 高阶智能驾驶走向规模量产,高精地图成为关键的门槛之一。今年,多家车企和智驾公司都喊出「不依赖高精地图,快速大规模落地」的口号。 华为、小鹏、元戎以及毫末等,可能是最快在国内量产 无高精图智…

服务器的基本概念与初始Ajax

1. 客户端与服务器 1.1 上网的目的 刷微博、看新闻、听歌、看电影。。。 本质目的:通过互联网的形式来获取和消费资源 1.2 服务器 上网过程中,负责存放和对外提供资源的电脑,叫做服务器。 1.3 客户端 上网过程中,负责获取…

nginx(七十三)nginx与Location响应头细节探讨

一 nginx与Location响应头细节探讨 ① 重定向和Location回顾 多种重定向跳转方式的差异 nginx之absolute_redirect、server_name_in_redirect、port_in_redirect 共同控制Location响应头 ② STS响应头导致307重定向 "第一次访问 http://www.baidu.com" 观察…

个人博客系统调试详细过程

系统功能的详细说明和源代码见以下链接:https://blog.csdn.net/shooter7/article/details/121180333相关的源码数据库文件、软件安装包可以联系博主koukou(壹壹23七2五六98) 调试过程如下: 文章目录 调试过程如下:一、数据库安装二、sql数据文件的导入三…

yolov5图像识别voc转yolo代码解析

https://github.com/ultralytics/JSON2YOLO https://blog.csdn.net/qq_51831335/article/details/127237772 目标检测数据集标签转换COCO2VOC、YOLO2VOC、JSON2YOLO <annotation><folder>VOC2007</folder><filename>000001.jpg</filename><s…

【2023/05/06】EDSAC

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第1天。 Share 去成为你本该成为的人&#xff0c;任何时候都不会太晚。 &#xff08;出处&#xff1a;乔治艾略特&#xff09; Day1 EDSAC&#xff1a;存储程序式计算机的开山之作。 part1 EDSAC&…

Linux进程状态及优先级

本文已收录至《Linux知识与编程》专栏&#xff01; 作者&#xff1a;ARMCSKGT 演示环境&#xff1a;CentOS 7 进程状态及优先级 前言正文进程状态就绪运行状态R阻塞睡眠状态 S休眠状态D挂起 暂停状态T前台与后台进程待追踪暂停状态t 死亡状态 X僵尸状态 Z 孤儿进程进程优先级查…

《Java虚拟机学习》 java代码的运行过程

1. Java文件转换 当我们保存java文件后&#xff0c;首先由编译器编译成class文件&#xff0c;然后通过Java虚拟机将class文件转换成字节码文件 2.Java虚拟机是怎么运行Java文件 首先将java文件加载到java虚拟机中&#xff0c;然后由虚拟机将类元信息存储在 虚拟机的方法区中。…

华为OD机试 - 各位相加(Java)

一、题目描述 给定一个非负整数 num&#xff0c;反复将各个位上的数字相加&#xff0c;直到结果为一位数。 二、思路与算法 各位相加&#xff0c;使用递归&#xff0c;出口是结果的长度等于1。 三、Java算法源码 public static int addDigits(int num) {recursion(num);re…

Maven 3.9.1下载安装配置一条龙(无压力)亲测

这里写自定义目录标题 前言一、下载 Apache Maven 3.9.11.1、请先检查自己的IDEA是否有这个条件&#xff0c;是否兼容1.2、Maven下载 二、Windows安装配置Maven2.1、解压2.2、新建 repository 本地仓库2.3、配置环境变量MAVEN_HOME 软件路径M2_HOME 本地仓库路径配置Path2.3.1新…

【BIM+GIS】Supermap打开BIM Revit模型的方式

Revit导出Supermap GIS格式数据的方法通常有三种:插件式导出、直接导入和标准交换格式(IFC)导出。 文章目录 一、Revit安装Supermap插件1. 安装Supermap插件2. UDB导出模型3. 打开模型二、Revit导出IFC格式1. Revit导出IFC2. Supermap导入IFC一、Revit安装Supermap插件 1. …

【TCP 重传、滑动窗口、流量控制、拥塞控制】

文章目录 重传机制超时重传快速重传SACK方法Duplicate SACK 滑动窗口流量控制那操作系统的缓冲区&#xff0c;是如何影响发送窗口和接收窗口的呢&#xff1f;窗口关闭 拥塞控制慢启动拥塞避免拥塞发生快速恢复 重传机制 TCP 实现可靠传输的方式之一&#xff0c;是通过序列号与…