一、优先级翻转

在使用二值信号量的时候会遇到很常见的一个问题——优先级翻转,优先级翻转在可剥夺内核中是非常常见的,在实时系统中不允许出现这种现象,这样会破坏任务的预期顺序,可能会导致严重的后果。

高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到CPU资源。-- 从现象上来看,好像是中优先级的任务比高优先级任务具有更高的优先权。

二、优先级翻转流程图

  • (1)任务H和任务M处于挂起状态,等待某一事件的发生,任务L正在运行。
  • (2)某一时刻任务L想要访问共享资源,在此之前它必须先获得对应该资源的信号量。
  • (3)任务L获得信号量并开始使用该共享资源。
  • (4)由于任务H优先级高,它等待的事件发生后便剥夺了任务L的CPU使用权。
  • (5)任务H开始运行。
  • (6)任务H运行过程中也要使用任务L正在使用着的资源,由于该资源的信号量还被任务L占用着,任务H只能进入挂起状态,等待任务L释放该信号量。
  • (7)任务L继续运行。
  • (8)由于任务M的优先级高于任务L,当任务M等待的事件发生后,任务M剥夺了任务L的CPU使用权。
  • (9)任务M处理该处理的事。
  • (10)任务M执行完毕后,将CPU使用权归还给任务L。
  • (11)任务L继续运行。
  • (12)最终任务L完成所有的工作并释放了信号量,到此为止,由于实时内核知道有个高优先级的任务在等待这个信号量,故内核做任务切换。
  • (13)任务H得到该信号量并接着运行。在这种情况下,任务H的优先级实际上降到了任务L的优先级水平。因为任务H要一直等待直到任务L释放其占用的那个共享资源。由于任务M剥夺了任务L的CPU使用权,使得任务H的情况更加恶化,这样就相当于任务M的优先级高于任务H,导致优先级翻转。

FreeRTOS——优先级翻转相关推荐

  1. 优先级翻转与优先级继承

    优先级翻转与优先级继承 田海立 2006-3-7 摘要 本文描述操作系统中的优先级翻转(Priority Inversion,也有翻译为反转,逆转或倒置的)现象以及如何用优先级继承来解决此类问题的方法 ...

  2. rtthread学习-防止优先级翻转

    学习视频网址: RT-Thread内核入门指南-线程的优先级翻转问题 学习记录. 第一次学这门课的时候,是觉得有点迷糊 课上讲了ABC三个优先级的线程,A是需要使用C中的互斥量,而互斥量在C中锁住了, ...

  3. 再解析下内核自旋锁和优先级翻转问题

    [内核同步]自旋锁spin_lock.spin_lock_irq 和 spin_lock_irqsave 分析 漫画|Linux 并发.竞态.互斥锁.自旋锁.信号量都是什么鬼? Linux内核自旋锁 ...

  4. 操作系统 多线程之优先级翻转

    优先级反转,是操作系统调度进程时出现的一种错误.是指在使用资源的时候时,可能会出现的这样一种不合理的现象,即: 高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度.但其他中等优先级的任务却 ...

  5. 正点原子FreeRTOS(中)

    更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进入------ ...

  6. FreeRTOS互斥量 基于STM32

    文章目录 一.互斥量基本概念 二.互斥量的优先级继承机制 三.互斥量应用场景 四.互斥量运作机制 五.互斥量函数接口讲解 1.互斥量创建函数 xSemaphoreCreateMutex() 2.递归x ...

  7. FreeRTOS 任务优先级分配方案

    任务优先级说明 下面对 FreeRTOS 优先级相关的几个重要知识点进行下说明,这些知识点在以后的使用中务必要掌握牢固.  FreeRTOS 中任务的最高优先级是通过 FreeRTOSConfig. ...

  8. FreeRTOS任务优先级说明

    https://www.cnblogs.com/yangguang-it/p/7156445.html#4217682 下面对 FreeRTOS 优先级相关的几个重要知识点进行下说明,这些知识点在以后 ...

  9. FreeRTOS 任务优先级说明

    freeRTOS任务优先级与Unix进程优先级不同 FreeRTOS任务优先:任务优先级数值越小,任务优先级越低. Unix任务优先:        进程优先级数值越小,进程优先级越高. 下面对 Fr ...

最新文章

  1. 每日一题(字符串拆分)
  2. 在echarts中自定义提示框内容
  3. 覆盖与重载与隐藏——SAP电面(3)
  4. iviewui php,Vue UI框架对比:Element UI、Ant Design Vue、iView
  5. java小程序源码_【小程序源码分享】基于Java开发的物业管理系统!
  6. seq2seq模型_Pytorch学习记录-Seq2Seq模型对比
  7. Authentication和Authorization的区别
  8. MFC 消息响应与消息处理过程
  9. MySql为查询结果添加前、后缀
  10. 使用github托管代码以及github一些最常用的命令
  11. Linux进阶之路————用户管理
  12. 怎么创建PHP函数,如何创建 PHP 函数
  13. 涨到5倍!从“缺芯”到“芯贵” 芯片涨价影响至啤酒、肥皂行业
  14. 苹果流媒体电视业务姗姗来迟 Netflix和亚马逊丝毫不虚...
  15. python基本数据类型float_Python基本数据类型
  16. apk 反编译工具的使用
  17. c语言编写个人收支管理系统,个人收支管理系统
  18. 百度C++工程师的那些极限优化(内存篇)
  19. 【CIPS 2016】(17章)文字识别 (研究进展、现状趋势)
  20. 鹿定制与国际大牌西服的10点区别?丨新浪官方长微博工具

热门文章

  1. 软件工程 | 第一章:软件工程学概述
  2. 高德地图轨迹展示样式修改
  3. html实现文本的查找与替换,WORD文档如何使用正则表达式进行查找和替换
  4. 读《DeepChannel: Salience Estimation by Contrastive Learning for Extractive Document Summarization》
  5. 大数据技术与架构——(二)大数据处理架构Hadoop(上)
  6. 桌面微型计算机,一、微机室(云桌面).PDF
  7. H5+JAVA的文件上传,断点续传
  8. ModelSim把vcd文件转换成wlf文件并显示图像
  9. bugku~小山丘的秘密
  10. U盘中毒后文件被隐藏恢复方法