【问题标题】:Can a runnable be preempted during its execution on AUTOSAR or OSEK?在 AUTOSAR 或 OSEK 上执行期间可以抢占 runnable 吗?
【发布时间】:2017-06-30 18:38:18
【问题描述】:

在 Autosar 中,可运行对象被映射到任务。由于优先级,任务可以被抢占。

抢占点在哪里?可运行对象之间是否发生抢占?

是可运行的原子执行还是可以在执行期间被抢占?

【问题讨论】:

    标签: runnable preemption autosar


    【解决方案1】:

    抢占的目的是确保其他任务按计划的时间间隔运行。

    由于可运行对象在任务的上下文中运行,并且任务可以被抢占,这意味着可运行对象本身可以被抢占。另一个后果是,runnables 只能被其他任务(或中断)中的 runnables 抢占。因此,如果您有可运行的 A 和 B 在同一个任务中运行,那么 A 将永远不会被 B 抢占,反之亦然 - A 和 B 相对于彼此是原子的。

    Autosar 进一步支持专有区域,这是一种本质上是临界区的机制。多个 runnable 可以使用同一个独占区域,如果一个 runnable 以 Rte_Enter 进入独占区域,那么在第一个以 Rte_Exit 离开之前,其他 runnable 不能进入同一个独占区域。

    【讨论】:

    • 在最新的AUTOSAR标准规范RTE V4.4.0技术术语部分,有一个术语抢占区:抢占区定义了一组协同调度的任务。因此,一个抢占区域的任务仅在专用的调度点相互抢占。在 RunnableEntity 执行期间不允许出现调度点。这是否意味着一个runnable不能被抢占或者AUTOSAR不允许抢占runnable?
    【解决方案2】:

    除了上面的答案,我想在 Autosar 中添加一个名为 Cooperative runnable Placement 的概念。根据概念,具有数据访问限制的runnbles被分组为“Cooperative Runnables”,其中该组中的runnables永远不会互相抢占,但可以被不属于该组的runnables抢占.

    runnables也是在task的上下文中执行的,如果task是可抢占的,那么属于task的runnables也是可抢占的。

    【讨论】:

    • 我可以在 RTE V2.3.0 的 AUTOSAR 标准规范中找到“Cooperative Runnable Placement strategy”。但是,似乎该机制已从 RTE V4.4.0 的最新 AUTOSAR 标准规范的“保证数据一致性的机制”部分中删除。我只是想知道最新版本中是否有类似的机制?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    相关资源
    最近更新 更多