gpt4 book ai didi

semaphore - VxWorks如何处理优先级继承?

转载 作者:行者123 更新时间:2023-12-02 01:23:20 24 4
gpt4 key购买 nike

我们有 3 个任务以不同的优先级运行:A (120)、B (110)、C (100)。A 采用带有反转安全标志的互斥信号量。任务 B 执行 semTake,这导致任务 A 的优先级提升到 110。随后,任务 C 执行 semTake。任务 A 的优先级现在为 100。

此时,A释放信号量,C捕获信号量。我们注意到 A 的优先级并没有降回原来的优先级 120。A的优先级不是应该立即恢复吗?

最佳答案

理想情况下,当继承的优先级为降低,它将以逐步的方式完成。正如每个导致优先级提高的依赖关系被删除,继承的优先级应该下降到以下优先级剩余的最高依赖性。
例如:

任务 A(100 增加到 80)有两个互斥体 (X 和 Y)任务 B (pri 90) 和任务 C (pri 80) 分别处于待处理状态为了。当任务 A 将互斥量 Y 放弃给任务 C 时,我们可能期望它优先级将下降到 90。当它最终将互斥体 X 交给任务 B 时,我们预计其优先级会回落至 100。

优先级继承在 VxWorks 中不是这样工作的。
它的工作原理取决于您使用的 VxWorks 版本。

VxWorks 6.0 之前的版本

优先级保持“提升”,直到任务具有锁定互斥体信号量放弃其最后反转安全互斥体信号。

使用上面的示例,当任务 A 放弃互斥体 Y 时对于任务 C,其优先级仍为 80。在它放弃互斥体 X 后任务 B,那么它的优先级将回落到 100(跳过 90)。

让我们把 1 号曲线球加入其中。如果任务 A 锁定了互斥体怎么办Z虽然这一切都在进行,但没有人在等待Z?在那里面这种情况,优先级将保持在80,直到Z被放弃——然后它将回落至 100。

为什么要这样做?
很简单,而且对于大多数情况来说都很好足够的。然而,这确实意味着当“曲线球#1”进入时玩时,优先级将在更长的时间内保持高于是必要的。

VxWorks 6.0+

现在的优先级保持提升状态,直到任务锁定互斥锁信号量放弃最后一个反转安全互斥体,这有助于提高优先级

这一改进避免了以下问题“曲线球#1”。它确实有其自身的局限性。例如,如果任务 B 和/或任务 C 在等待任务 A 放弃时超时信号量,任务 A 的优先级不会被重新计算直到它放弃信号量。

关于semaphore - VxWorks如何处理优先级继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/108098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com