FreeRTOS的学习(八)——3.优先级翻转问题

23 篇文章 27 订阅

FreeRTOS的学习系列文章目录

FreeRTOS的学习(一)——STM32上的移植问题
FreeRTOS的学习(二)——任务优先级问题
FreeRTOS的学习(三)——中断机制
FreeRTOS的学习(四)——列表
FreeRTOS的学习(五)——系统延时
FreeRTOS的学习(六)——系统时钟
FreeRTOS的学习(七)——1.队列概念
FreeRTOS的学习(七)——2.队列入队源码分析
FreeRTOS的学习(七)——3.队列出队源码分析
FreeRTOS的学习(八)——1.二值信号量
FreeRTOS的学习(八)——2.计数型信号量
FreeRTOS的学习(八)——3.优先级翻转问题
FreeRTOS的学习(八)——4.互斥信号量
FreeRTOS的学习(九)——软件定时器
FreeRTOS的学习(十)——事件标志组
FreeRTOS的学习(十一)——任务通知


优先级翻转问题描述

前面提到了二值信号量的概念,但是在多个不同优先级的任务想要同时Take和Give二值信号量时,往往会因为被占用的问题,使得高优先级任务的执行顺序与低优先级任务一样。这种情况被称为优先级翻转,优先级翻转在可剥夺内核中是非常常见的,在实时系统中不允许出现这种现象,这样会破坏任务的预期顺序,可能会导致严重的后果。


优先级翻转问题分析

(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,导致优先级翻转。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LEODWL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值