在 Autosar 中,runnables 被映射到任务。由于优先级,任务可以被抢占。
抢占的重点在哪里?可运行对象之间是否发生抢占?
是可运行的原子执行还是可以在执行期间被抢占?
在 Autosar 中,runnables 被映射到任务。由于优先级,任务可以被抢占。
抢占的重点在哪里?可运行对象之间是否发生抢占?
是可运行的原子执行还是可以在执行期间被抢占?
抢占的目的是确保其他任务按计划的时间间隔运行。
由于可运行对象在任务的上下文中运行,并且任务可以被抢占,这意味着可运行对象本身可以被抢占。另一个后果是,runnables 只能被其他任务(或中断)中的 runnables 抢占。因此,如果您有可运行的 A 和 B 在同一个任务中运行,那么 A 将永远不会被 B 抢占,反之亦然 - A 和 B 相对于彼此是原子的。
Autosar 进一步支持独占区域,这是一种本质上是临界区的机制。多个 runnable 可以使用同一个专属区域,如果一个 runnable 进入一个专属区域,Rte_Enter
那么其他 runnable 不能进入同一个专属区域,直到第一个 runnable 离开它Rte_Exit
。
除了上面的答案,我想在 Autosar 中添加一个名为 Cooperative runnable Placement 的概念。根据概念,具有数据访问限制的runnbles被分组为“ Cooperative Runnables ”,其中该组中的runnables永远不会互相抢占,但可以被不属于该组的runnables抢占。
runnables 也是在 task 的上下文中执行的,如果 task 是可抢占的,那么属于 task 的 runnables 也是可抢占的。