FreeRTOS——优先级翻转
一、优先级翻转
在使用二值信号量的时候会遇到很常见的一个问题——优先级翻转,优先级翻转在可剥夺内核中是非常常见的,在实时系统中不允许出现这种现象,这样会破坏任务的预期顺序,可能会导致严重的后果。
高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度。但其他中等优先级的任务却能抢到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——优先级翻转相关推荐
- 优先级翻转与优先级继承
优先级翻转与优先级继承 田海立 2006-3-7 摘要 本文描述操作系统中的优先级翻转(Priority Inversion,也有翻译为反转,逆转或倒置的)现象以及如何用优先级继承来解决此类问题的方法 ...
- rtthread学习-防止优先级翻转
学习视频网址: RT-Thread内核入门指南-线程的优先级翻转问题 学习记录. 第一次学这门课的时候,是觉得有点迷糊 课上讲了ABC三个优先级的线程,A是需要使用C中的互斥量,而互斥量在C中锁住了, ...
- 再解析下内核自旋锁和优先级翻转问题
[内核同步]自旋锁spin_lock.spin_lock_irq 和 spin_lock_irqsave 分析 漫画|Linux 并发.竞态.互斥锁.自旋锁.信号量都是什么鬼? Linux内核自旋锁 ...
- 操作系统 多线程之优先级翻转
优先级反转,是操作系统调度进程时出现的一种错误.是指在使用资源的时候时,可能会出现的这样一种不合理的现象,即: 高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度.但其他中等优先级的任务却 ...
- 正点原子FreeRTOS(中)
更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程+刷题+面经+求职+讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进入------ ...
- FreeRTOS互斥量 基于STM32
文章目录 一.互斥量基本概念 二.互斥量的优先级继承机制 三.互斥量应用场景 四.互斥量运作机制 五.互斥量函数接口讲解 1.互斥量创建函数 xSemaphoreCreateMutex() 2.递归x ...
- FreeRTOS 任务优先级分配方案
任务优先级说明 下面对 FreeRTOS 优先级相关的几个重要知识点进行下说明,这些知识点在以后的使用中务必要掌握牢固. FreeRTOS 中任务的最高优先级是通过 FreeRTOSConfig. ...
- FreeRTOS任务优先级说明
https://www.cnblogs.com/yangguang-it/p/7156445.html#4217682 下面对 FreeRTOS 优先级相关的几个重要知识点进行下说明,这些知识点在以后 ...
- FreeRTOS 任务优先级说明
freeRTOS任务优先级与Unix进程优先级不同 FreeRTOS任务优先:任务优先级数值越小,任务优先级越低. Unix任务优先: 进程优先级数值越小,进程优先级越高. 下面对 Fr ...
最新文章
- 每日一题(字符串拆分)
- 在echarts中自定义提示框内容
- 覆盖与重载与隐藏——SAP电面(3)
- iviewui php,Vue UI框架对比:Element UI、Ant Design Vue、iView
- java小程序源码_【小程序源码分享】基于Java开发的物业管理系统!
- seq2seq模型_Pytorch学习记录-Seq2Seq模型对比
- Authentication和Authorization的区别
- MFC 消息响应与消息处理过程
- MySql为查询结果添加前、后缀
- 使用github托管代码以及github一些最常用的命令
- Linux进阶之路————用户管理
- 怎么创建PHP函数,如何创建 PHP 函数
- 涨到5倍!从“缺芯”到“芯贵” 芯片涨价影响至啤酒、肥皂行业
- 苹果流媒体电视业务姗姗来迟 Netflix和亚马逊丝毫不虚...
- python基本数据类型float_Python基本数据类型
- apk 反编译工具的使用
- c语言编写个人收支管理系统,个人收支管理系统
- 百度C++工程师的那些极限优化(内存篇)
- 【CIPS 2016】(17章)文字识别 (研究进展、现状趋势)
- 鹿定制与国际大牌西服的10点区别?丨新浪官方长微博工具
热门文章
- 软件工程 | 第一章:软件工程学概述
- 高德地图轨迹展示样式修改
- html实现文本的查找与替换,WORD文档如何使用正则表达式进行查找和替换
- 读《DeepChannel: Salience Estimation by Contrastive Learning for Extractive Document Summarization》
- 大数据技术与架构——(二)大数据处理架构Hadoop(上)
- 桌面微型计算机,一、微机室(云桌面).PDF
- H5+JAVA的文件上传,断点续传
- ModelSim把vcd文件转换成wlf文件并显示图像
- bugku~小山丘的秘密
- U盘中毒后文件被隐藏恢复方法