(1)什么是优先级反转
简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了。那在什么情况下会生这种情况呢?

假设三个任务准备执行,A,B,C,优先级依次是A>B>C;

首先:C处于运行状态,获得CPU正在执行,同时占有了某种资源;

其次:A进入就绪状态,因为优先级比C高,所以获得CPU,A转为运行状态;C进入就绪状态;

第三:执行过程中需要使用资源,而这个资源又被等待中的C占有的,于是A进入阻塞状态,C回到运行状态;

第四:此时B进入就绪状态,因为优先级比C高,B获得CPU,进入运行状态;C又回到就绪状态;

第五:如果这时又出现B2,B3等任务,他们的优先级比C高,但比A低,那么就会出现高优先级任务的A不能执行,反而低优先级的B,B2,B3等任务可以执行的奇怪现象,而这就是优先反转。

说白了就是,低优先级的任务占有高优先级的任务所需要的资源!某一时刻高、低优先级任务都在就绪,中间优先级由于没有资源关联,因此可以运行,这就出现了高优先级任务等待低优先级任务,也即是低优先级任务由于高优先级任务的执行!

(2)如何解决优先级反转

高优先级任务A不能执行的原因是C霸占了资源,而C如果不能获得CPU,不释放资源,那A也只好一直等在那,所以解决优先级反转的原则肯定就是让C尽快执行,尽早把资源释放了。基于这个原则产生了两个方法:

2.1 优先级继承

当发现高优先级的任务因为低优先级任务占用资源而阻塞时,就将低优先级任务的优先级提升到等待它所占有的资源的最高优先级任务的优先级。

2.2 优先级天花板

优先级天花板是指将申请某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级.(这个优先级称为该资源的优先级天花板)   其实这里也就是,将C的优先级提升到A的优先级

2.3 两者的区别

优先级继承:只有一个任务访问资源时一切照旧,没有区别,只有当高优先级任务因为资源被低优先级占有而被阻塞时,才会提高占有资源任务的优先级;而优先级天花板,不论是否发生阻塞,都提升,即谁先拿到资源,就将这个任务提升到该资源的天花板优先级。

操作系统:优先级反转相关推荐

  1. 【操作系统/OS笔记10】进程/线程的调度原则、调度算法、实时调度、多处理器调度、优先级反转

    本次笔记内容: 8.1 背景 8.2 调度原则 8.3 调度算法1 8.4 调度算法2 8.5 实时调度 8.6 多处理调度与优先级反转 文章目录 CPU调度背景 上下文切换 CPU调度 在进程/线程 ...

  2. 操作系统原理,交互式系统常见的调度算法,时间片轮转RR,虚拟轮转VRR,最高优先级调度,优先级反转问题与应对

    操作系统原理,交互式系统常见的调度算法,时间片轮转RR,虚拟轮转VRR,最高优先级调度,优先级反转问题与应对 一.交互式系统中采用的调度算法: 1.时间片轮转调度RR,round robin 2.最高 ...

  3. 优先级反转和解决方法

    优先级反转的描述: 假设任务1,任务2,任务3:他们的优先级顺序分别为1 > 2 > 3.有一个稀缺资源S,S由一个信号量控制为互斥访问. 任务3正在执行,并申请到了资源S: 任务1抢占了 ...

  4. 多线程的那点儿事(之优先级反转)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 优先级反转对于编写应用层的人员来说不大会发生,但是对于操作系统的设计者来说确是一个逃不过去的问 ...

  5. 实时操作系统和优先级反转

    实时操作系统(Real-time operating system, RTOS)是说,任务切换和中断响应的时间必须保证在多少时间内(如5us内)完成. 分为硬实时和软实操作系统: 硬实时是说必须在多少 ...

  6. 什么是优先级反转及解决方法

    什么是优先级反转 优先级反转,是指在使用信号量时,可能会出现的这样一种不合理的现象,即: 高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度.但其他中等优先级的任务却能抢到CPU资源.-- ...

  7. 信号量优先级反转问题记录(总是遗忘)

    1.信号量 信号量一般用于线程间同步,多个线程获取一个共享资源时,该资源信号量的count值不小于0时,取得count的线程皆可访问共享资源(类似于流量QOS中的令牌桶\通行证).当count值小于0 ...

  8. 优先级反转和优先级继承

    iOS的锁中有一个自选锁OSSpinLock , 这个api被标记为不推荐 , 理由就是会产生优先级反转的问题, 当时并不是特别理解这个优先级反转 . 后来在看一本书 <算法之美> 里在讲 ...

  9. 优先级反转的经典案例——火星拓荒者

    火星拓荒者(Mars Pathfinder)是一艘在1997年携带探测车登陆火星并建立基地的美国太空船.它包括命名为卡尔萨冈纪念站的登陆者,和一辆重量很轻 (10.6公斤/23磅),命名为旅居者号的轮 ...

最新文章

  1. python人脸识别项目_基于Python与命令行人脸识别项目(系列二)
  2. 【成功智慧】005.最重要的是明确奋斗的目标
  3. python语言怎么学-如何从零开始学习Python,python语言编程入门
  4. 软件开发中的开源协议详解!
  5. Java 调用Dll
  6. web前端java script BOM学习笔记2017.8.1
  7. System中不存在类型或命名空间名称Transactions
  8. Python学习练习:批量移动文件
  9. 简单的python画图代码_python opencv如何实现简易画图板 python opencv实现简易画图板代码...
  10. 计算机专业能评电子工程师吗,计算机工程师职称 评定条件
  11. 如何使用digiKam进行照片管理
  12. 计算机网络知识点总结-第二章:物理层
  13. git删除多余的tracked文件(git提示ignored tracked with git)
  14. Tensorflow之softmax应用实例
  15. Python实现测量平差数据处理
  16. OCCT培训笔记(刘星讲)--第2天
  17. Python语言程序设计基础_实验2 基本数据类型和运算_答案_通识教育必修课程_上海师范大学
  18. 《莎士比亚》文本生成
  19. 综合评价的基本理论和数据预处理
  20. 高考,你们一定要加油

热门文章

  1. Go学习——defer、panic
  2. 编解码:Base64编码在URL中的应用
  3. AVPlayer 之avcore模块
  4. ipsec ***概念(一)
  5. C/C++面试题精选
  6. linux下 open() write() read() close函数
  7. 设计模式-行为-解释器
  8. are exo exo是什么歌 we_are exo exo是什么歌 we_EXO we are one
  9. 有多少种方法能把足球移出边界 Out of Boundary Paths
  10. 批处理命令 For循环命令详解!