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

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

3天内不再提示

具有固定优先级调度程序RTOS的优先级倒置

星星科技指导员 来源:嵌入式计算设计 作者:Johan Kraft 2022-06-22 15:45 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

具有固定优先级调度程序的 RTOS 的核心思想是高优先级任务应该在低优先级任务之前调度。如有必要,RTOS 甚至可以抢占正在运行的任务,迫使它让 CPU 执行更高优先级的任务。然而,作为开发人员,您必须注意可能导致较高优先级任务必须等待较低优先级任务的编程缺陷——这种情况称为优先级倒置。

优先级反转可以与互斥体、消息队列或其他类型的同步对象一起发生。描述问题的最佳方式可能是通过一个示例来逐步说明。

在下面的时间线图中,使用 Tracealyzer 捕获,我们有一个低优先级任务(绿色)正在执行。它需要一个二进制信号量来保护某些临界区并继续在临界区内执行代码。当高优先级任务(红色)进入就绪状态时,RTOS 抢占绿色任务并让红色运行。红色任务尝试获取相同的二进制信号量,但由于低优先级绿色任务持有它而被阻止。

到目前为止,一切都很好——这是预期的行为。一般来说,绿色任务现在会运行并快速释放信号量,此时它再次被抢占,红色任务可以获取信号量并继续。然而,这一次发生了反转。出于某种原因,可能是定时等待已过期,中等优先级(橙色)任务已进入就绪状态并被允许在绿色任务之前执行。由于橙色任务不知道有争议的信号量,它很高兴地运行完成。只有这样,绿色任务才会最终运行,以便它可以释放信号量并将执行权交给红色的高优先级任务。

pYYBAGKyyLGAOwYtAAI9Uvf_ze8142.png

因此,高优先级任务被阻塞,必须等待不确定的时间,而中等优先级任务运行完成。这就是工作中的优先级倒置。

重要的是要意识到这里涉及的三项任务基本上是无能为力的。他们没有人可以做任何事情来避免倒置,至少在没有 RTOS 的支持的情况下是这样。幸运的是,这种支持在许多 RTOS 中以具有优先级继承的互斥锁的形式提供。互斥量(互斥的缩写)是一种用于保护共享资源的信号量。优先级继承意味着如果一个高优先级的任务在试图获得一个低优先级任务当前持有的互斥锁时阻塞,那么持有该互斥锁的任务的优先级会暂时提高到被阻塞任务的优先级。在我们的场景中,当红色任务被阻塞时,绿色任务将被提升为红色优先级,从而有效地阻止了橙色任务的运行。

优先级继承并不能真正治愈优先级倒置,它只是在某些情况下将其影响最小化。硬实时应用程序仍应仔细设计,以便一开始就不会发生优先级反转。

通常,尽可能避免阻塞共享资源。例如,如果您的任务将数据写入消息队列(可能已满),您可以改为使用足够大但未满的队列,作为额外的预防措施,以非阻塞方式写入并检查任何失败写入的返回值。而不是使用分散在代码中的多个关键部分(共享互斥锁),您可以创建一个“服务器”任务,该任务执行对资源的所有直接操作,并使用消息队列从“客户端”任务中获取请求,在非-阻塞方式。服务器可以通过请求中指定的其他消息队列发送任何回复,这些消息队列由客户端任务拥有。

审核编辑:郭婷

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

    关注

    69

    文章

    11516

    浏览量

    229558
  • 服务器
    +关注

    关注

    14

    文章

    10738

    浏览量

    93378
  • RTOS
    +关注

    关注

    25

    文章

    882

    浏览量

    124082
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    优先级任务,为何反被低优先级卡住?

    优先级任务,为何反被低优先级卡住? 高优先级任务等待的不是CPU,而是低优先级任务手里尚未释放的共享资源 RTOS里把关键任务
    的头像 发表于 08-13 11:01 186次阅读
    高<b class='flag-5'>优先级</b>任务,为何反被低<b class='flag-5'>优先级</b>卡住?

    优先级数字更小,中断为何仍会被拖住?

    优先级数字更小,中断为何仍会被拖住? STM32里“数字更小”只是优先级编码的第一层;是否能抢占,还要看PRIGROUP、实现位数、当前活动异常与屏蔽寄存器 一个中断的优先级数字已经设得更小,理论上
    的头像 发表于 08-11 11:15 189次阅读
    <b class='flag-5'>优先级</b>数字更小,中断为何仍会被拖住?

    隔离驱动参数怎么看?CMTI、隔离耐压、传播延迟的实际意义与选型优先级

    隔离耐压、CMTI、传播延迟三项参数分别对应隔离驱动的安全、可靠、性能维度,三者在不同场景下的设计权重差异显著。本文从工程设计的实际需求出发,拆解三项核心参数的物理定义、适用边界与选型考量,结合不同应用场景的设计目标梳理选型优先级,为器件选型与系统设计提供参考。
    的头像 发表于 07-24 09:23 320次阅读

    hros.com 论HRTOS核心调度器(优先级抢占)

    功能安全硬截止时间要求。 和软实时Linux、分时调度核心区别 调度类型 抢占触发逻辑 延迟确定性 适用场景 HRTOS优先级抢占 高优任务就绪瞬间立刻切换 最大抖动固定μs
    发表于 06-23 06:12

    LTC4419:双输入微功耗电源路径优先级器的卓越之选

    LTC4419:双输入微功耗电源路径优先级器的卓越之选 引言 在电子设备的电源管理中,确保在各种电源状态下关键电路的稳定供电至关重要。LTC4419作为一款双输入单片式PowerPath™优先级
    的头像 发表于 05-25 14:05 363次阅读

    POE和辅助电源同时供电时,有什么办法可以改变优先级

    优先采用辅助电源。请问有什么办法可以改变优先级。同时有辅助外部电源和POE电源时,可以优先采用POE电源。
    发表于 05-14 07:29

    LTC4420:双输入微功耗电源路径优先级器的全方位解析

    LTC4420:双输入微功耗电源路径优先级器的全方位解析 在电子设备的电源管理领域,确保在各种电源状况下为关键电路提供稳定的电力供应至关重要。LTC4420 作为一款双输入单片式 PowerPath
    的头像 发表于 02-09 10:20 502次阅读

    电子工程师必备:LTC4419双输入微功耗电源路径优先级器详解

    电子工程师必备:LTC4419双输入微功耗电源路径优先级器详解 在电子设备的电源管理领域,如何高效、可靠地切换电源以确保关键电路在各种情况下正常运行,一直是工程师们关注的重点。LTC4419作为一款
    的头像 发表于 02-09 10:15 551次阅读

    CS32L010系列能否支持串口的发送和接收中断单独配置?不同中断的中断优先级如何设置?

    1、串口能否配置成阻塞式发送和中断式接收。 2、不同中断的中断优先级如何设置?我在开启中断函数代码中看到说中断优先级配置需要先调用NVIC_PriorityGroupConfig()函数,但此函数无定义,全局搜索不到。
    发表于 12-10 18:46

    抢占优先级和子优先级

    关于抢占优先级和子优先级: 1)具有高抢占式优先级的中断可以在具有低抢占式优先级的中断服务
    发表于 12-03 07:11

    电能质量在线监测装置的暂态数据补传的优先级如何在实际应用中进行动态调整?

    电能质量在线监测装置的暂态数据补传优先级在实际应用中通过 事件驱动、主站指令、资源状态感知和动态策略调整 等多层机制实现灵活调控,确保关键数据的实时性与可靠性。以下是具体实现方式和典型场景的动态调整
    的头像 发表于 11-06 14:10 634次阅读

    电能质量在线监测装置的暂态数据补传的优先级是怎样的?

    电能质量在线监测装置的暂态数据补传优先级设计遵循 事件驱动、主站指令优先、资源动态分配 的原则,结合行业标准和设备机制,形成以下多层级优先级体系: 一、最高优先级:紧急事件驱动补传 1
    的头像 发表于 11-06 14:02 712次阅读

    FreeRTOS任务调度优先级问题

    都有容错,但是心里没底,想向大家了解一下实际工作中有没有遇到到类似的问题,如果有又是怎么解决的呢? 另外有前辈可以分享一下任务的优先级在实际项目中该基于什么原则来划分呢?
    发表于 11-06 02:18

    使用fal api 来读写1024 字节数据,需要需要考虑被高优先级线程打断吗?

    使用fal api 来读写1024 字节数据,需要需要考虑被高优先级线程打断吗?
    发表于 10-10 07:16

    优先级线程无法调度怎么解决?

    1,设置了3,5,6,8几个优先级,设备在现场正常运行了一年多后,显示、前端、后端这3个低优先级线程异常了,表现为屏幕不动,前端采集数据没有变化等,其他高优先级的线程如通讯,按键都能正常运行,通讯有喂狗操作,停止通讯,会看门狗复
    发表于 09-25 07:33