在Autosar中,runnables映射到任务。由于优先级,任务可以被抢占。
先发制人在哪里?抢占是否发生在runnables之间?
是可执行的原子执行还是在执行期间可以被抢占?
答案 0 :(得分:1)
抢先点是确保其他任务以预定的时间间隔运行。
由于runnables在任务的上下文中运行,并且任务可以被抢占,这意味着runnables本身可以被抢占。另一个结果是runnables只能被其他任务(或中断)中的runnables抢占。因此,如果你有可运行的A和B在同一个任务中运行,那么A将永远不会被B抢占,反之亦然 - A和B相互之间是原子的。
Autosar进一步支持独占区域,这种机制本质上是一个关键部分。多个runnable可以使用相同的专用区域,如果一个runnable进入Rte_Enter
的专用区域,那么没有其他runnable可以进入相同的专用区域,直到第一个可以使用Rte_Exit
离开它。
答案 1 :(得分:0)
除了上述答案,我还想在Autosar中添加名为Cooperative runnable placement的概念。根据这个概念,具有数据访问约束的运行被分组为“ Cooperative Runnables ”,其中该组中的runnables永远不会相互抢占,但可以被不属于该组的runnables抢占。
此外,runnables在任务的上下文中执行,如果任务是preemptable,则runnables属于该任务也是可抢占的。