野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19201|回复: 2

为什么说uCOS的优先级继承机制不能解决优先级反转,只能将...

[复制链接]
发表于 2020-9-12 10:22:25 | 显示全部楼层 |阅读模式
野火的《uCOS-III内核实现与应用开发实战指南—基于STM32》电子版第299页那里说“UCOS 的优先级继承机制不能解决优先级反转,只能将这种情况的影响降低到最小,硬实时系统在一开始设计时就要避免优先级反转发生。”是什么意思啊?为什么不能解决优先级反转而只能降低其影响呢?

野火论坛202009121022009728..png
回复

使用道具 举报

发表于 2020-9-13 04:26:29 | 显示全部楼层
正常情况   :  优先级高的先执行,优先级低的需要等待其执行完毕才可运行。
优先级反转:  优先级低的先执行,优先级高的需要等待其执行完毕才可运行。

在一个系统中有些资源或硬件只有一个,但是可能有多个任务需要使用它。
假设在时间点a,任务1先使用了这个资源硬件,过了一会时间点b,任务2也要使用这个资源硬件,如果任务2的优先级比任务1还高,那么任务2就可能强行动手抢任务1的资源硬件。
这个时候任务1只运行到中途并没执行完,如果任务2直接抢资源就可能造成数据紊乱,或者蓝屏等一些未知错误。
所以互斥量就理所当然的出现了,就相当于一把锁。只允许一个主人拥有钥匙。

接上面的分析,任务1使用资源的时候给这个资源上个锁,这时候高优先级任务也无法抢资源了。得乖乖等待任务1执行完才行。

重点是:互斥量上锁解决了资源争夺时可能出现数据紊乱等未知错误,但高优先级任务还是得等待低优先级任务执行完后把钥匙交出来才能运行。
所以说它只上降低影响,并不能消除这个现象。

优先级继承是为了防止任务1在未交出钥匙之前被别的并不需要这个资源并且优先级比任务1高的任务抢占,如果被抢占那么任务2要等的也就更久了,那样实时性就更差了。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-9-13 23:09:53 | 显示全部楼层
XQJoo 发表于 2020-9-13 04:26
正常情况   :  优先级高的先执行,优先级低的需要等待其执行完毕才可运行。
优先级反转:  优先级低的先执 ...

懂了,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 10:10 , Processed in 0.036487 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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