找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10|回复: 0

实时操作系统中优先级反转的机理与应对

[复制链接]
  • 打卡等级:无名新人
  • 打卡总天数:2
  • 打卡月天数:2
  • 打卡总奖励:211
  • 最近打卡:2026-02-06 11:44:28

57

主题

0

回帖

410

积分

管理员

积分
410
发表于 2026-2-6 22:14:05 | 显示全部楼层 |阅读模式
优先级反转是个经典问题,但很多同学只知其然不知其所以然。

假设有三个任务:高优先级任务H,中优先级任务M,低优先级任务L。L获得了一个共享资源(比如互斥锁),H也需要这个资源,于是H被阻塞,等待L释放。这时候M就绪了,因为M优先级比L高,它抢占了CPU。结果就是,虽然H的优先级最高,却因为M的运行而被间接阻塞。这就是优先级反转。

火星探路者号就因为这个原因差点失败。解决方法是优先级继承:当高优先级任务等待低优先级任务持有的资源时,临时把低优先级任务的优先级提升到和高优先级任务一样。这样M就不能抢占L了,L能尽快完成并释放资源。RTOS一般会提供带优先级继承的互斥量。

但优先级继承也有问题,比如链式阻塞:如果L等待另一个资源,而那个资源被另一个任务持有,问题就更复杂了。

更高级的方法是优先级天花板协议,给每个资源设定一个天花板优先级,任何任务获取该资源时,优先级都提升到天花板优先级。这需要精心设计天花板优先级,设得太高可能影响其他任务,设得太低又起不到作用。

实际应用中,我建议你们先分析任务间的资源依赖关系,尽量减少共享资源的使用,如果必须共享,要清楚各种同步机制的开销和限制。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

B站视频|手机版|小黑屋|这堂芯课 ( 陕ICP备2024055690号-1 )

GMT+8, 2026-2-21 23:26 , Processed in 0.049396 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表