0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是优先级反转

CHANBAEK 来源:硬件工程师技术干货 作者:硬件工程师技术干 2023-04-24 13:01 次阅读

1、什么是优先级反转

假设现在有三个任务TaskA(优先级高)、TaskB(优先级中)、TaskC(优先级低),一个信号量(Semaphore),此信号量用于任务之间争夺某个资源。 在某一时刻,高优先级的TaskA和中优先级的TaskB由于其它原因挂起了,低优先级的TaskC获得信号量,正在独享这个资源,这时候高优先级TaskA就绪了,抢占了TaskC,高优先级的TaskA运行一段时间后也想得到这个信号量,但是信号量被低优先级的TaskC占用,无奈TaskA只能挂起等待,低优先级的TaskC获得CPU, 这时候TaskB就绪了,再次抢占TaskC,但是这个TaskB并不想使用这个资源,没有办法,直到TaskB挂起后,才能运行TaskC,TaskC释放信号量之后高优先级的TaskA才能执行。 看起来高优先级的TaskA还不如低优先级的TaskC优先级高,这就叫做优先级反转,TaskB的存在加剧了优先级反转。 这种优先级反转问题在实时操作系统中带来的影响不容小觑,因此我们在编写代码时要避免出现优先级翻转影响实时性。

2、使用互斥信号量解决优先级翻转问题。

RTOS中可以使用互斥信号量解决优先级问题,如FreeRTOSucos等。 互斥信号量原理:如果一个互斥信号量被一个低优先级的TaskC获得,此时如果高优先级的TaskA也想获得这个信号量,由于信号量被TaskC占用,只能挂起,挂起TaskA的同时RTOS会把TaskC的优先级调整为和TaskA一样,让低优先级的TaskC继续执行,直至TaskC释放信号量,TaskC优先级恢复之前的优先级, 这时TaskA获得信号量。 提升TaskC优先级是为了让TaskC尽快地执行,执行完赶紧释放信号量,减少高优先级任务的挂起时间。

//FreeRTOS
SemaphoreHandle_t xSemaphoreCreateMutex(void)


//ucos
OS_EVENT *OSMutexCreate (INT8U prio, INT8U *err)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RTOS
    +关注

    关注

    22

    文章

    811

    浏览量

    119614
  • 实时操作系统

    关注

    1

    文章

    197

    浏览量

    30758
  • 信号量
    +关注

    关注

    0

    文章

    53

    浏览量

    8336
  • 优先级反转
    +关注

    关注

    0

    文章

    2

    浏览量

    1124
  • 互斥信号量
    +关注

    关注

    0

    文章

    3

    浏览量

    2028
收藏 人收藏

    评论

    相关推荐

    RTOS应用中的优先级反转问题

    在嵌入式系统中,如果使用基于优先级调度算法的RTOS,系统中可能发生优先级反转现象。优先级反转用来描述系统中高
    发表于 12-14 11:00 1210次阅读

    为什么UCOSII优先级反转与理想值不符?

    [START_STK_SIZE-1],START_TASK_PRIO); OSStart();}void high_task(void *pdata)//任务一,高优先级任务{ u8 err; while(1
    发表于 07-31 21:23

    嵌入式实时系统中的优先级反转是什么?

    使具有中优先级的进程先于高优先级的进程执行,导致系统的崩溃。这就是所谓的优先级反转(PriorityInversion)。
    发表于 09-17 07:16

    如何理解任务优先级反转

    嵌入式实时操作系统USCOSii中第四章 的 图4-15中有描述 关于任务优先级反转示意图:有疑问就是为什么 在C运行时候 A B都在等待,却B获得CPU的运行权限?
    发表于 11-04 03:57

    请问只有访问共享资源时才会考虑优先级反转吗?

    是不是当共享资源时就要考虑优先级反转的问题,任务同步不用考虑?互斥信号量是不是一般用在访问共享资源的时候(普通信号量不能解决优先级反转问题),普通信号量是不是一般用于任务同步?
    发表于 05-25 10:12

    干货 | RTOS应用中的优先级反转问题

    在嵌入式系统中,如果使用基于优先级调度算法的RTOS,系统中可能发生优先级反转现象。优先级反转用来描述系统中高
    发表于 03-09 15:00

    嵌入式系统优先级反转问题,怎么解决这些问题?

    嵌入式系统优先级反转问题,怎么解决这些问题?
    发表于 04-26 06:33

    嵌入式实时系统中的优先级反转问题怎么解决?

    嵌入式实时系统中的优先级反转问题怎么解决?
    发表于 04-27 06:44

    RT-Thread v4.0.4版本中解决的使用互斥量导致优先级反转的问题探讨

    的车出来时,将停车场大门打开,下一辆车才可以进入。(引用自 RTT 文档)二、互斥量解决了什么问题2.1 线程优先级反转问题​假设当前有三条线程,分别是 A、B、C,它们的优先级关系是 A &
    发表于 08-10 14:44

    实时控制系统中优先级反转问题的解决方法

    以实时操作系统μC/OS-II为例,分析了产生优先级反转的原因,提出了解决该问题的2种方法,即互斥信号量(Mutex)和实现时间片轮番调度法。在保证共享资源互斥访问的前提下,将优先
    发表于 10-15 09:29 13次下载

    嵌入式系统优先级反转问题的分析

    摘要: 本文介绍了嵌入式系统任务调度优先级反转的一个实例。通过实例的讨论对嵌入式系统优先级反转有一个更深入的了解,有助于在编程中避免此类问题的发生。
    发表于 03-11 12:18 947次阅读
    嵌入式系统<b class='flag-5'>优先级</b><b class='flag-5'>反转</b>问题的分析

    UCOS扩展例程-UCOSIII优先级反转

    UCOS扩展例程- UCOSIII优先级反转
    发表于 12-14 17:24 13次下载

    关于嵌入式系统优先级反转的原因及解决方法探讨

    的任务。但在实际开发中,由于任务间资源共享,信号量及中断的引入,往往会出现高优先级任务被低优先级任务长时间阻塞或阻塞一段不确定时间的现象,即所谓优先级反转(Priority Inver
    发表于 11-01 16:13 5379次阅读
    关于嵌入式系统<b class='flag-5'>优先级</b><b class='flag-5'>反转</b>的原因及解决方法探讨

    嵌入式系统中优先级反转的产生原因及2种解决方案

    ,反而使具有中优先级的进程先于高优先级的进程执行,导致系统的崩溃。这就是所谓的优先级反转(Priority Inversion)。
    发表于 03-13 09:11 3953次阅读
    嵌入式系统中<b class='flag-5'>优先级</b><b class='flag-5'>反转</b>的产生原因及2种解决方案

    uC/OS-II学习笔记——优先级反转优先级继承机制

    优先级反转,是指某同步资源被较低优先级的进程/线程所拥有,较高优先级的进程/线程竞争该同步资源未获得该资源,而使得较高优先级进程/线程反而推
    发表于 02-09 10:33 2次下载
    uC/OS-II学习笔记——<b class='flag-5'>优先级</b><b class='flag-5'>反转</b>与<b class='flag-5'>优先级</b>继承机制