1 文档范围(Scope of this document)
本文档的目标是定义 AUTOSAR 操作系统的高层级需求。
2 如何阅读本文档(How to Read this Document)
2.1 使用的约定(Conventions to be used)
- AUTOSAR 文档中需求的表示遵循 [TPS_STDT_0078] 中指定的表格。
- 在需求中,应使用以下特定语义(基于 IETF):
本文档中的关键字 MUST、MUST NOT、REQUIRED、SHALL、SHALL NOT、SHOULD、SHOULD NOT、RECOMMENDED、MAY 和 OPTIONAL 应按以下方式解释:
- SHALL(应当):该定义是规范的绝对要求。
- SHALL NOT(不得):该定义是规范的绝对禁止。
- MUST(必须):该定义是规范的绝对要求(基于法律问题)。
- MUST NOT(禁止):该定义是规范的绝对禁止(基于法律约束)。
- SHOULD(建议):在特定情况下可能存在合理的理由忽略特定项,但在选择不同方案之前必须充分理解并谨慎权衡全部含义。
- SHOULD NOT(不建议):在特定情况下该行为可能是可接受的甚至有用的,但在实现任何以此标签描述的行为之前,应充分理解其含义并谨慎权衡。
- MAY(可以):该项是真正可选的。一个供应商可能选择包含该项,因为特定市场需要它或因为供应商认为它能增强产品,而另一个供应商可能省略相同的项。
不包含特定选项的实现应当准备好与包含该选项的另一实现互操作(尽管可能功能减少)。同样,包含特定选项的实现应当准备好与不包含该选项的另一实现互操作(当然,该选项提供的功能除外)。
2.2 缩略语与缩写(Acronyms and abbreviations)
| 缩写 | 说明 |
|---|---|
API | Application Programming Interface(应用程序编程接口) |
BSW | Basic Software(基础软件) |
COM | Communications(通信) |
ECU | Electronic Control Unit(电子控制单元) |
HW | Hardware(硬件) |
ISR | Interrupt Service Routine(中断服务例程) |
MC | Multi-Core(多核) |
MCU | Microcontroller Unit(微控制器单元) |
MPU | Memory Protection Unit(内存保护单元) |
NM | Network Management(网络管理) |
OIL | OSEK Implementation Language(OSEK 实现语言) |
OS | Operating System(操作系统) |
OSEK/VDX | Offene Systeme und deren Schnittstellen für die Elektronik im Kraftfahrzeug(汽车电子开放系统及其接口) |
SC | Single-Core(单核) |
SW | Software(软件) |
SWC | Software Component(软件组件) |
3 需求指南(Requirements Guidelines)
应引用现有规范(以单个需求形式)。与这些规范的差异被指定为附加需求。
3.1 需求质量(Requirements quality)
所有需求应具有以下属性:
- 冗余性:需求不应在一个需求中或其他需求中重复
- 清晰性:所有需求应仅允许一种解释方式。仅可使用术语表中的技术术语。此外,必须从需求中清楚看出该声明是关于什么对象的需求。
- 原子性:每个需求应仅包含一个需求。如果需求不能拆分为进一步的需求,则它是原子的。
- 可测试性:需求应可通过分析、评审或测试进行测试。
- 可追溯性:在任何时候都应可见需求的来源和状态。
- 表述:所有需求的表述应使其可以在没有周围上下文的情况下进行解释(例如:"函数 Xyz…" 而不是"该函数…")。
3.2 需求标识(Requirements identification)
每个需求都有以 BSW("Basic Software",基础软件)作为前缀的唯一标识符。对于任何评审注释、意见或问题,请引用此唯一 ID 而非章节或页码!
3.3 需求状态(Requirements status)
此外,每个需求包含状态信息。状态可以是以下之一:
| 状态 | 说明 |
|---|---|
| Open | 需求已由 WP 成员创建但尚未在 WP 会议上讨论。 |
| Proposed | 需求已在 WP 会议上评审。它被接受,但仍有一些未决问题。 |
| Approved | 需求已被所有 WP 参与者评审并批准。 |
| Conflict | 需求已被评审,但存在冲突(例如与其他需求的矛盾),这些问题尚未解决。 |
| Rejected | 需求已被评审并被拒绝。 |
因此,所有完成的需求都处于"Approved"状态。
4 需求规范(Requirement Specification)
4.1 可追溯性(Traceability)
| 特性号 | 特性名称 |
|---|---|
| RS_BRF_01200 | AUTOSAR OS 应当向后兼容 OSEK OS |
| RS_BRF_01232 | AUTOSAR OS 应当支持应用软件的隔离与保护 |
| RS_BRF_01096 | AUTOSAR 应当支持 ECU 的启动与关闭 |
| RS_BRF_01208 | AUTOSAR OS 应当支持定期启动任务列表 |
| RS_BRF_01216 | AUTOSAR OS 应当支持将 ScheduleTable 与外部时间源同步 |
| RS_BRF_01240 | AUTOSAR OS 应当支持 OSApplications 之间的通信 |
| RS_BRF_02008 | AUTOSAR 应当提供机制保护系统免受未授权读访问 |
| RS_BRF_01224 | AUTOSAR OS 应当支持时序保护 |
| RS_BRF_01248 | AUTOSAR OS 应当支持终止和重启 OSApplications |
| RS_BRF_01256 | AUTOSAR OS 应当提供关闭核的支持 |
| RS_BRF_01264 | AUTOSAR OS 应当支持多核无死锁互斥 |
| RS_BRF_01184 | AUTOSAR 应当支持不同的降级方法 |
| RS_BRF_00206 | AUTOSAR 应当支持多核 MCU |
4.2 实时操作系统(Real-Time Operating System)
4.2.1 功能描述(Functional description)
嵌入式汽车 ECU 中的实时操作系统构成软件动态行为的基础。它管理任务和事件的调度、不同任务之间的数据流,并提供监控和错误处理功能。
然而,在汽车系统中,对操作系统的需求高度依赖于具体域。例如,在车身、动力总成和底盘域中,重点在于任务和报警的高效调度、共享资源的处理和截止时间监控。所使用的操作系统必须在运行时高效,内存占用小。
在多媒体和远程信息处理应用中,操作系统提供的功能集以及可用计算资源也有显著不同。除纯任务管理外,还包含复杂数据处理(例如流、闪存文件系统等)、内存管理,甚至图形用户界面。
汽车 OS 的经典域仅涵盖调度和同步的核心功能。在 AUTOSAR 架构中,上述附加功能不在 OS 的范围内。这些功能由其他 AUTOSAR 基础软件模块涵盖(例如 COM 提供通信抽象)。在 AUTOSAR 架构约束下,不可能将其他 OS(例如 QNX、VxWorks 和 Windows CE 等)的功能集集成到单一的 OS/通信/驱动结构中。因此,AUTOSAR OS 应当仅考虑核心功能。
4.2.2 核心 OS 需求(Core Operating System requirements)
[SRS_Os_00097] OS 应当提供与 OSEK OS API 向后兼容的 API。
| 类型 | Valid |
|---|---|
| 描述 | OS 应当提供与 OSEK OS API 向后兼容的 API。有效需求应作为 OSEK OS 所提供功能的扩展进行集成。 |
| 理由 | 保证迁移进度 |
| 用例 | 现有驱动软件可被重用,因为其与 OS 的接口未改变。 |
| 依赖 | -- |
| 支持材料 | [STD_OSEK_OS] |
| 满足 | RS_BRF_01200 |
[SRS_Os_11001] OS 应当提供允许故障隔离和故障恢复能力的分区。
| 类型 | Valid |
|---|---|
| 描述 | OS 应当提供分区(错误包容区域,Fault Containment Regions),允许故障隔离和故障恢复能力。 |
| 理由 | AUTOSAR 允许多个逻辑应用共存于同一处理器。OSEK OS 现有规范不知道多个逻辑应用驻留在单个处理器上。因此没有用于错误包容的机制。一个应用中的故障可能传播到驻留在同一处理器上的另一个应用。例如,一个软件组件或基础软件模块中的错误可能导致驻留在同一处理器上的另一个软件组件和/或基础软件模块检测到故障,而它们与故障部分的唯一关系是它们驻留在同一处理器上。 OSEK OS 具有以下 OS 对象操作规则:
OS 应当提供一个更高级别的抽象,允许用户对现有 OS 对象(任务、ISR 等)进行分组,以便组中的对象只能由同一组中的对象操作。这样的组称为OS-Application。 此外,定义 OS-Application 允许提供内存保护域(见 SRS_Os_11005)。 |
| 用例 | 在故障条件下,故障处理机制需要停止与软件组件关联的所有对象的执行。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_01232、RS_BRF_01234 |
[SRS_Os_11018] OS 应当提供中断屏蔽功能。
| 类型 | Valid |
|---|---|
| 描述 | OS 应当在调用 StartOS() 之前和 ShutdownOS() 调用之后提供中断屏蔽功能。这些功能已在 OSEK OS 中定义,现在用途已扩展。 |
| 理由 | SPAL 需要。 |
| 用例 | SPAL 驱动需要在正常 OS 操作之前、期间和之后操作中断屏蔽。 |
| 依赖 | C 初始化必须在这些功能可用之前执行。 |
| 支持材料 | |
| 满足 | RS_BRF_01096 |
[SRS_Os_11019] AUTOSAR OS 生成工具应当创建中断向量表。
| 类型 | Valid |
|---|---|
| 描述 | AUTOSAR OS 生成工具应当创建中断向量表。 |
| 理由 | 每个 ECU 都需要有一个中断向量表。操作系统配置已包含系统使用的所有中断的详细信息。AUTOSAR OS 生成工具应是开发过程中生成中断向量表的最终工具。 |
| 用例 | 其他模块的集成。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | () |
4.3 静态定义调度(Statically Defined Scheduling)
4.3.1 功能概述
在许多应用中,必须静态定义彼此相关的一组任务的激活。这可能是为了保证数据流设计中的数据一致性、与时间触发网络同步、保证正确的运行时分段等。
时间触发的操作系统通常被提议作为此问题的解决方案。然而,时间只是一个事件,所以任何事件触发的 OS,包括 OSEK OS,都可以在汽车 ECU 中实现静态调度的实时软件调度器。
调度表的需求提供了一个 OSEK OS 对象,可以用与 OSEKtime 调度器表相同的方式操作。
4.3.2 需求
[SRS_Os_00098] 操作系统应当提供基于时间表的静态可配置调度表作为可选服务。
| 类型 | Valid |
|---|---|
| 描述 | 操作系统应当提供基于时间表的静态可配置调度表作为可选服务。 |
| 理由 | Standard Core 用户的需求。表基调度比由 OSEK 报警服务激活的任务更高效且更易于理解。 作为 OSEK OS 的扩展添加基于表的调度机制,使用户能够构建类似 OSEKtime 的调度器表,而无需引入堆栈式调度策略的不必要限制或额外的 OS 规范。 |
| 用例 | 以静态定义的间隔时间同步释放多个任务。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_01208 |
[SRS_Os_00099] 操作系统应当提供允许在不同调度表之间切换的机制。
| 类型 | Valid |
|---|---|
| 描述 | 操作系统应当提供允许在不同调度表之间切换的机制。 |
| 理由 | 对于不同的应用状态(例如初始化、启动、预启动、正常运行、诊断、预睡眠、关闭),需要不同的调度表。 |
| 用例 | 由 ECU 状态管理器控制的 ECU 模式 |
| 依赖 | SRS_OS_00098 |
| 支持材料 | -- |
| 满足 | RS_BRF_01208 |
[SRS_Os_11002] 操作系统应当提供将调度表的处理与全局系统时间基准同步的能力。
| 类型 | Valid |
|---|---|
| 描述 | 操作系统应当提供将调度表的处理与全局系统时间基准同步的能力。它应当支持立即(硬)同步和逐渐适配(平滑)同步。 |
| 理由 | 一些分布式应用需要与全局时间基准同步。对于从 OSEKtime 迁移到 AUTOSAR OS 的用户,需要此类功能。 |
| 用例 | 从 OSEKtime 调度器表迁移的用户可以在不引入额外 OS 规范的情况下,使用调度表复制类似功能。 |
| 依赖 | -- |
| 支持材料 | |
| 满足 | RS_BRF_01216 |
4.4 监控设施(Monitoring Facilities)
4.4.1 功能概述
监控功能在执行的适当阶段检测错误,而不是错误发生时立即检测。因此,任何监控功能都是运行时故障的检测,而不是故障的预防。
4.4.2 需求
[SRS_Os_11003] 操作系统应当能够按可执行对象监控堆栈使用情况并检查堆栈溢出。
| 类型 | Valid |
|---|---|
| 描述 | 操作系统应当能够按可执行对象(任务/ISR)监控堆栈使用情况并检查堆栈溢出。 |
| 理由 | 在某些硬件上将无法实现任何复杂的内存保护。当认为一些保护总比没有好时,堆栈监控提供了一种替代方案(但安全性较低)。 |
| 用例 | 如果实现一个应用程序可能溢出的系统使用不支持真正内存保护的硬件,则堆栈监控是一个有用的替代方案。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_01232 |
4.5 保护设施(Protection Facilities)
4.5.1 功能概述
AUTOSAR 概念要求多源的 OS-Application 共存于同一处理器上。为了防止这些 OS-Application 之间的意外交互,必须提供保护机制使其相互隔离。主要有两种使用场景:
- 对于安全关键系统,如果可以将各个 OS-Application 的安全论据集成为总体安全论据,则安全论据的开发将大大简化。只有当可以证明至少一个 OS-Application 中的故障不会传播超出其自身边界并导致另一个不相关 OS-Application 的故障时,这才是可行的。
- 只有当可以确保他们的软件不会因处理器范围的故障而被错误地归咎时,供应商才会对他们的软件组件和/或基础软件模块承担责任(和一些责任)。
这两种使用场景可以通过向 OSEK OS 添加保护机制来满足。以下章节概述了保护领域。
4.5.2 内存保护需求(Memory Protection requirements)
[SRS_Os_11005] 操作系统应当防止一个 OS-Application 修改其他 OS-Application 的内存。
| 类型 | Valid |
|---|---|
| 描述 | 操作系统应当提供按内存对 OS-Application 进行分区的能力,并防止一个 OS-Application 修改其他 OS-Application 的内存。 |
| 理由 | 当多个 OS-Application(不同软件完整性级别)驻留在同一处理器上时,它们的内存可由任何代码全局写入。这意味着一个 OS-Application 的数据可能被另一个不相关的 OS-Application 破坏(即 OS-Application 之间存在故障传播)。例如,一个 OS-Application 的任务可能溢出其堆栈,导致不相关 OS-Application 的静态数据被破坏,从而导致其失败。 为了允许对不同完整性级别函数之间的充分独立进行推理,必须在运行时防止这种情况。 注意 SRS_Os_11003 不同:它仅检测故障,而不是防止内存访问错误产生故障。 |
| 用例 | -- |
| 依赖 | 注意满足此需求意味着满足堆栈监控需求,因为如果堆栈受内存写访问控制限制,则不会发生堆栈溢出。 写访问保护需要适当的硬件支持。 |
| 支持材料 | |
| 满足 | RS_BRF_01232 |
[SRS_Os_11006] 操作系统应当允许 OS-Application 内的任务和 ISR 交换数据。
| 类型 | Valid |
|---|---|
| 描述 | 操作系统应当允许 OS-Application 内的任务和 ISR 通过对共享内存的直接访问来交换数据。 |
| 理由 | 出于运行时性能原因,使用共享内存交换数据是常见的(例如使用全局变量)。然而,在 AUTOSAR 中,多个 OS-Application 将共享一个处理器,因此通过共享内存进行的任何数据通信都会破坏内存保护方案。 因此,有必要为 OS-Application 提供以下能力:使用在应用内对任务和 ISR 全局可访问但对其他 OS-Application 不可访问的内存共享数据,即共享内存在 OS-Application 范围内本地化。 |
| 用例 | 一个 OS-Application 实现通信,并使用 ISR 处理来自车辆网络的 CAN 帧的接收,但使用任务处理 CAN 帧的内容以减少 ISR 级别阻塞。 |
| 依赖 | -- |
| 支持材料 | [DOC_WP112_REQ], |
| 满足 | RS_BRF_01240 |
[SRS_Os_11007] 操作系统应当允许 OS-Application 执行共享代码。
| 类型 | Valid |
|---|---|
| 描述 | 操作系统应当允许 OS-Application 执行共享代码。 |
| 理由 | 如果代码不能共享,则对于许多软件组件/基础软件模块共有的任何一段软件,必须在软件构建中多次包含它。这有两个含义:
|
| 用例 | 使用共享库。 |
| 依赖 | -- |
| 支持材料 | |
| 满足 | RS_BRF_01240 |
[SRS_Os_11000] OS 可以提供支持以保护 OS-Application 的内存段免受所有其他 OS-Application 的读访问。
| 类型 | Valid |
|---|---|
| 描述 | OS 可以提供支持以保护 OS-Application 的内存段免受所有其他 OS-Application 的读访问。 |
| 理由 | 如果任务/ISR 可以从任何内存读取,则它可能对不正确的数据进行操作。这可能导致运行时故障。防止读访问提供了一种在故障发生时立即捕获它们的方法。 第二个问题是安全。虽然不预期同一处理器上的 OS-Application 之间存在任何安全问题,但读访问在需要时确实提供保护。 |
| 用例 | 安全:保护密钥;调试支持 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_02008 |
4.5.3 时序保护需求(Timing Protection requirements)
[SRS_Os_11008] OS 应当不允许任何 OS-Application 中的时序故障传播。
| 类型 | Valid |
|---|---|
| 描述 | OS 应当不允许任何 OS-Application 中的时序故障传播到驻留在同一处理器上的不同应用。时序故障定义为:
|
| 理由 | 当为系统中的每个任务/Category 2 ISR 指定这些参数时,可以确定每个任务/Category 2 ISR 是否始终满足其截止时间。 在运行任何固定优先级抢占式 OS(包括 OSEK OS)的 ECU 上,只能使用可调度性分析来保证时序正确性。这使用关于任务和中断的信息(它们运行的频率、运行时间、访问哪些资源、保持它们的时间),然后计算系统将满足其实时性能截止时间。 时序保护的范围是确保在运行时证明满足截止时间的 AUTOSAR 系统不会因应用(或其组成部分)的功能行为失败而违反分析中使用的模型。 严格执行实时性能分析的假设意味着两件重要的事情:
|
| 用例 | 一个 OS-Application 中的对象执行时间过长,导致另一个 OS-Application 中的对象因此错过其截止时间。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_01224 |
4.5.4 服务保护需求(Service Protection requirements)
OS 必须在运行时保持其自身完整性和其调度的 OS-Application 的完整性。
[SRS_Os_11009] 操作系统应当防止 OS 被任何系统服务调用所破坏。
| 类型 | Valid |
|---|---|
| 描述 | 操作系统应当防止 OS 被任何系统服务调用所破坏。 |
| 理由 | 如果可能将 OS 置于未知状态或在运行时破坏 OS 数据结构,则会损坏驻留在同一处理器上的每个 OS-Application。这意味着:
|
| 用例 | 避免从未定义的上下文中调用服务时出现未定义行为。 |
| 依赖 | 在 OSEK OS 当前规范允许不保护 OS 的配置的情况下,AUTOSAR 配置必须确保这些配置不能被选择。 |
| 支持材料 | -- |
| 满足 | RS_BRF_01232 |
[SRS_Os_11010] 操作系统应当防止 OS-Application 修改不属于该 OS-Application 的 OS 对象。
| 类型 | Valid |
|---|---|
| 描述 | 操作系统应当防止 OS-Application 修改不属于该 OS-Application 的 OS 对象。 |
| 理由 | 一个 OS-Application 可能在运行时操纵另一个 OS-Application 中的对象,导致其在其设计范围之外运行。保护 OS-Application 的完整性意味着一个 OS-Application 不能操纵属于另一个 OS-Application 的对象(例如通过 OS 服务调用),导致另一个 OS-Application 中的潜在故障,除非在配置时明确授予对对象的访问。这通过限制可能的故障源来增加追踪由 OS-Application 耦合引起的故障的能力。 |
| 用例 | 取消激活另一个 OS-Application 中任务的报警 |
| 依赖 | 在 OSEK OS 当前规范允许不保护 OS-Application 的配置的情况下,AUTOSAR 配置必须确保这些配置不能被选择。 |
| 支持材料 | -- |
| 满足 | RS_BRF_01232 |
[SRS_Os_11011] OS 应当保护自身免受 OS-Application 试图直接修改 OS 管理的控制寄存器。
| 类型 | Valid |
|---|---|
| 描述 | OS 应当保护自身免受 OS-Application 试图直接修改 OS 管理的控制寄存器。 |
| 理由 | OS 必须防止 OS-Application 试图(直接或间接地)规避保护机制。通常这意味着应防止 OS-Application 访问可能正在使用的 MCU 状态寄存器和内存保护寄存器。 |
| 用例 | OS 使用处理器状态字来管理中断,并且该寄存器在运行时被恶意的 OS-Application 写入,破坏了 OS 的内部数据结构。 |
| 依赖 | 目标硬件必须支持特权/非特权模式和 MPU 才能进行此保护。因此,此功能在那些不提供足够硬件支持的目标上不可用。 |
| 支持材料 | -- |
| 满足 | RS_BRF_01232 |
[SRS_Os_11012] OS 应当为其保护功能提供可扩展性。
| 类型 | Valid |
|---|---|
| 描述 | OS 应当为其保护功能提供可扩展性。 |
| 理由 | 充分利用处理器的硬件特性:关键保护特性可能在所有硬件上都不可用(例如,当处理器没有 MPU 时,某些类型的内存保护是不可能的),但这不应阻止用户使用可以支持的其他保护特性。 定制为特定用户需求:保护可能仅需要围绕某些应用(无法保证其运行时行为的应用),并且可以根据失败风险的评估选择性地应用保护。 |
| 用例 | 在没有硬件内存保护的微控制器上实现符合 AUTOSAR 的 OS。 当使用可以静态保证在运行时不会发生保护违规的过程来设计 ECU 时,它不需要专门资源来检查违规。例如,如果静态分析最坏情况执行时间,则在运行时不需要时序保护。此外,由于分析显示触发代码执行的条件永远不会发生,代码是"死代码",应因其带来的潜在安全风险而被删除。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_01232 |
4.5.5 保护错误(Protection Errors)
OS 必须能够识别何时发生了违反保护方案的错误,并且还必须提供可以采取行动来纠正故障的机制。然而,定义错误处理方案不是 OS 的任务。
[SRS_Os_11013] OS 应能够在运行时通知保护错误的发生。
| 类型 | Valid |
|---|---|
| 描述 | OS 应能够在运行时通知保护错误的发生。 保护错误是任何内存访问违规、时序故障、对 OS 服务的未授权调用或软件陷阱(例如除以零、非法指令)。 |
| 理由 | 如果在运行时通知保护错误,则提供了根据预定义的故障处理策略潜在地纠正或处理错误的范围。 |
| 用例 | 应用程序需要提供某种运行时容错能力,该能力需要根据发生的错误的类型和/或数量采取行动以提高运行时可用性。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_01232 |
[SRS_Os_11014] 在保护错误的情况下,OS 应提供在 OS、OS-Application 和 task/ISR 级别上的恢复操作。
| 类型 | Valid |
|---|---|
| 描述 | 在保护错误的情况下,OS 应提供在 OS、OS-Application 和 task/ISR 级别上的恢复操作。用户应能够选择该操作。 |
| 理由 | 对错误发生的反应是系统整体故障模式的函数。例如,在某些情况下简单地终止故障任务将是适当的,而在其他情况下这可能比允许其继续执行对安全构成更大的风险。 因此,哪个操作是适当的决定取决于应用。 |
| 用例 | -- |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_01248 |
4.6 定时器服务(Timer Services)
4.6.1 功能概述
定时器服务为应用和基础软件提供软件定时器。定时机制的核心已由 OSEK OS 中的计数器和报警提供。因此,以几乎相同的形式(定时器服务)引入新的机制是不必要的。
然而,为了提供通用软件定时,需要向 AUTOSAR OS 添加一些补充功能。这些在 SRS_Os_11020 和 SRS_Os_11021 中描述。
4.6.2 功能需求
[SRS_Os_11020] OS 应提供用于触发软件计数器的标准接口。
| 类型 | Valid |
|---|---|
| 描述 | OS 应提供用于触发软件计数器的标准接口。 |
| 理由 | OSEK OS 未定义计数器和报警之间的接口。这在不同供应商实现之间移植应用时会带来问题。在 AUTOSAR OS 中定义此接口消除了此可移植性问题。 |
| 用例 | -- |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | () |
[SRS_Os_11021] OS 应提供从单个硬件计数器级联多个软件计数器的机制。
| 类型 | Valid |
|---|---|
| 描述 | OS 应提供从单个硬件计数器级联多个软件计数器的机制。 |
| 理由 | 如果需要不同分辨率的计数器,可能不可能(例如由于有限的硬件定时器)或不可取(例如由于中断干扰)使用多个硬件定时器源。在许多情况下,可以通过从较高分辨率计数器触发较低分辨率计数器来驱动较低分辨率软件计数器。 |
| 用例 | 通过 1ms 定时器中断驱动 1ms 软件计数器,并从 1ms 计数器驱动 100ms 计数器。 |
| 依赖 | 此需求意味着实现必须支持多于一个计数器(否则级联不可能)。AUTOSAR OS SWS 中提供了实现必须支持的计数器数量下限规范。 |
| 支持材料 | -- |
| 满足 | () |
4.7 可扩展性(Scalability)
4.7.1 功能概述
对于特定应用,操作系统可以配置为仅包含该应用所需的服务。因此,操作系统的资源需求尽可能小。
核心 OS 的可扩展性由 OSEK OS 的符合类提供。关于 AUTOSAR OS 功能的可扩展性在此处定义。
4.7.2 功能需求
[SRS_Os_11016] OS 实现应提供由生成工具配置的可扩展性。
| 类型 | Valid |
|---|---|
| 描述 | OS 应提供以下配置,至少具有指定的功能(可以包括附加功能): Class1:OSEK OS + 计划调度 Class2:Class1 + 时序保护 Class3:Class1 + 内存保护 Class4:Class1 + Class2 + Class3 |
| 理由 | Class3 和 Class4 需要硬件支持。强制此功能将阻止 AUTOSAR OS 在许多常用的微控制器上实现。 实现可以选择不同的实现策略,如果某些功能不需要,则相应地提高性能。 |
| 用例 | -- |
| 依赖 | SRS_Os_11012 |
| 支持材料 | -- |
| 满足 | RS_BRF_01232 |
4.8 应用错误处理(Application Error Handling)
4.8.1 功能概述
一些影响应用程序的错误可能不会导致 OS 可检测到的保护违规,但仍会导致应用程序进入无法自行恢复并继续执行的状态。检测此类错误是应用程序本身的责任,但从此类错误中恢复需要与 OS 管理的控制线程进行交互。因此,OS 需要提供应用程序可以构建内部恢复机制的机制。
核心 OSEK OS 提供了一些支持:任务可以检测内部错误并自行终止;系统可以使用报警机制来编程超时、实现基于阈值的错误检测;可以检测内部错误并可以关闭系统等。但是,核心 OS 不提供为 OS-Application 定义的逻辑应用程序实现错误恢复的方法(见 SRS_Os_11001)。
本节介绍提供应用级和系统级 OS-Application 控制框架的需求。
4.8.2 功能需求
[SRS_Os_11022] OS 应提供终止 OS-Application 的机制。
| 类型 | Valid |
|---|---|
| 描述 | OS 应提供一种机制,通过该机制可以将 OS-Application 作为单个单元终止,并释放由 OS-Application 持有且由 OS 管理的所有资源。 终止应防止 OS-Application 拥有的任何任务运行以及由 OS-Application 拥有的 ISR 处理的任何中断发生。 |
| 理由 | AUTOSAR 软件组件的错误处理要求 OS 可以终止 OS-Application。 当应用程序包含多个任务/ISR 时,除非关闭 OS 本身,否则在核心 OS 中不可能以原子方式停止应用程序。当存在不需要终止的其他 OS-Application 时,关闭是不切实际的。 因此,OS 必须提供一种机制来终止不影响其他 OS-Application 的 OS-Application。 |
| 用例 | 响应于检测到内部错误,在 OS-Application 中进行错误恢复。 |
| 依赖 | SRS_Os_11023 |
| 支持材料 | -- |
| 满足 | RS_BRF_01248 |
[SRS_Os_11023] OS 应提供一种机制,通过该机制可以重新启动已终止的 OS-Application。
| 类型 | Valid |
|---|---|
| 描述 | OS 应提供一种机制,通过该机制可以重新启动已终止的 OS-Application。 |
| 理由 | AUTOSAR 软件组件的错误处理要求 OS 可以以受控方式重新启动已终止的 OS-Application,以便可以重新初始化软件组件的内部状态。 |
| 用例 | 响应于检测到内部错误,在 OS-Application 中进行错误恢复。 |
| 依赖 | SRS_Os_11022 |
| 支持材料 | -- |
| 满足 | RS_BRF_01248 |
4.9 通用多核问题(General Multi-Core issues)
4.9.1 概述
本节中的需求非常通用。它们定义了 AUTOSAR 环境将支持的多核(MC)能力的要点。从架构的角度来看,多核硬件可以以各种不同的方式管理。在一端,核可以被理解为几乎独立的 ECU;在另一端,它们可以作为几乎具有真正并行能力的单核(SC)系统呈现给用户。
在汽车系统中,对 MC 支持的需求非常依赖于具体域。高效调度、低资源消耗和短响应时间至关重要。
需求的设计方式是引入多核不会改变 AUTOSAR 的整体理念。
MC 概念允许像 SC 系统一样处理多个核,但给予在概念之外使用核的自由,例如作为专用 I/O 控制器。
4.9.2 功能需求
[SRS_Os_80001] OS 应能够管理多个紧密耦合的 CPU 核。
| 类型 | valid |
|---|---|
| 描述 | OS 应能够管理多个紧密耦合的 CPU 核。这并不意味着 µC 上的所有核都由 OS 控制。 |
| 理由 | 提供一个 OS 控制多个核的解决方案的原因是:
|
| 用例 |
|
| 依赖 | SRS_Os_80008 |
| 支持材料 | |
| 满足 | RS_BRF_00206 |
[SRS_Os_80003] 多核扩展应提供与单核同等级别的可预测性。
| 类型 | valid |
|---|---|
| 描述 | 多核扩展应提供与单核同等级别的可预测性。这包括无死锁执行和免于无界阻塞。 |
| 理由 | 实时能力是汽车域的关键需求。现有 SC 解决方案的设计方式是它们的使用不能引起无界阻塞并保证无死锁执行。MC 解决方案应以类似的方式运行。 |
| 用例 | -- |
| 依赖 | SRS_Os_80005 |
| 支持材料 | -- |
| 满足 | RS_BRF_00206 |
4.9.3 "一个 AUTOSAR 系统控制多个核" 术语的附加说明
当讨论控制多个核的 AUTOSAR 系统时(如 SRS_Os_80001),有几个含义:
- 系统应知道多个核的存在。
- 系统应负责在多个核上调度任务。
- 系统代码的部分应能够并发运行(例如通过使用可重入代码)。
- 所有 BSW ID(例如任务、事件、报警等的 ID)在核之间应唯一。
- 除非受保护机制限制,否则应允许从任何核访问共享对象(例如数据、外围单元等)。
4.9.4 "无界阻塞" 术语的附加说明
阻塞是高级运行时对象由于低级运行时对象阻止其执行(例如通过占用所需资源)而无法执行的情况。意外阻塞可能由优先级反转引起。
无界阻塞一词意味着潜在阻塞持续时间不受限制,因此无法保证所需的实时行为。
4.10 运行时对象到核的分配(Assignment of runtime objects to cores)
4.10.1 概述
在定义多核系统时,一个主要问题是运行时对象(任务和 ISR)是否可以在动态上在不同核之间更改。
动态地将运行时对象分配到不同核的能力将对系统的所有效率方面(代码大小/数据大小/速度/响应时间/实时能力)产生巨大影响。
可以将 OsApplications 绑定到核或在任务和 ISR 级别上定义核绑定。为了最小化 AUTOSAR 内多核支持的复杂性和影响,决定在 OsApplication 级别定义核绑定。
本节定义了将核绑定声明为在 MC AUTOSAR 环境中处理运行时对象的方式的需求。
4.10.2 需求
[SRS_Os_80005] OsApplications 以及结果上的 TASKS 和 OsISRs 应静态分配到核。
| 类型 | Valid |
|---|---|
| 描述 | OsApplications 以及结果上的 TASKS 和 OsISRs 应静态分配到核。 |
| 理由 |
|
| 用例 | -- |
| 依赖 | OS 规范;SRS_Os_80003、SRS_Os_80015、SRS_Os_80016 |
| 支持材料 | AUTOSAR_SWS_OS |
| 满足 | RS_BRF_00206 |
4.11 多核系统的启动(Startup of Multi-Core systems)
4.11.1 概述
本节包含关于启动的一些高层需求。根据使用的微控制器,微控制器的启动或复位行为可以有所不同。复位后最常见的行为如下:
- 只有所谓的主核开始执行,而所有其他核(从核)保持停止状态。从核需要由主核启动。
- 另一种可想象的方法是所有核在复位后并发开始执行。在这种情况下不存在主核。
唤醒机制和引导需求因微控制器和微控制器衍生品而异。
不同核上启动代码的进度不可重现;这是因为加载和存储操作的持续时间取决于总线仲裁和其他非常时间敏感的硬件效应。因此,引导代码必须以不依赖于其他核上引导进度的知识的方式设计。需要同步不同核在启动期间的状态。
4.11.2 需求
[SRS_Os_80026] 应当可以启动多核系统中的任何核。
| 类型 | valid |
|---|---|
| 描述 | 应当可以启动多核系统中的任何核。 |
| 理由 | 如果核不能被激活,则灵活性非常低。 |
| 用例 | MC 系统的引导。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_01256 |
[SRS_Os_80027] 应当可以初始化多核系统中的任何核。
| 类型 | valid |
|---|---|
| 描述 | 应当可以初始化多核系统中配置为运行 AUTOSAR 系统的任何核。 |
| 理由 | -- |
| 用例 | MC 系统的引导。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_01256 |
[SRS_Os_80006] 系统的初始化/启动应同步。
| 类型 | valid |
|---|---|
| 描述 | 系统的初始化/启动应同步。 |
| 理由 | 为了支持广泛的硬件,需要在不同核的某些点同步软件。否则无法依赖其他核的状态。(当一个核已经执行任务时,另一个核仍处于初始化阶段。) |
| 用例 | MC 系统的引导。 |
| 依赖 |
|
| 支持材料 | -- |
| 满足 | RS_BRF_00206 |
4.12 多核系统的关闭(Shutdown of Multi-Core systems)
4.12.1 概述
与启动类似,多核系统的关闭行为与单核系统的行为不同。
如果具有适当权限的运行时对象调用 "ShutdownOS",则整个系统(MC-OS 控制的所有核)必须关闭。一旦启动关闭过程,validtasks 就不能被激活。确保在调用 "ShutdownOS" 之前完成应用和基础软件级别的任何关闭准备工作是开发者/系统集成商的责任。
4.12.2 需求
[SRS_Os_80007] 关闭程序应可由任何核触发。
| 类型 | valid |
|---|---|
| 描述 | 关闭程序可从任何核触发。 |
| 理由 | 在错误情况下,相关处理程序可能需要系统关闭。任何核都必须可能执行此操作。 |
| 用例 | 保护钩返回 PRO_SHUTDOWN |
| 依赖 | OS 规范 |
| 支持材料 | -- |
| 满足 | RS_BRF_00206 |
4.13 多核系统的配置(Configuration of Multi-Core systems)
4.13.1 概述
本节包含关于多核系统配置的高层需求。
4.13.2 需求
[SRS_Os_80008] 应当在多个核上使用通用 OS 配置。
| 类型 | valid |
|---|---|
| 描述 | 如果要跨核寻址对象,则必须生成不相交的(disjunctive)对象 ID。 |
| 理由 | 例如,如果跨核激活任务,则 ID 在核之间必须唯一。这导致一个通用配置,并影响刷写/编程策略。 |
| 用例 | 跨核激活任务或设置事件 |
| 依赖 | OS 规范SRS_Os_80001SRS_Os_80015SRS_Os_80016 |
| 支持材料 | 多核概念文档 |
| 满足 | RS_BRF_00206 |
[SRS_Os_80011] 操作系统管理的核数应可离线配置。
| 类型 | valid |
|---|---|
| 描述 | 操作系统管理的核数应可离线配置。 |
| 理由 | 操作系统规范不应限于特定数量的核。 |
| 用例 | 在不同核数的项目中使用操作系统。 |
| 依赖 |
|
| 支持材料 | -- |
| 满足 | RS_BRF_00206 |
4.14 多核系统中的服务(Services in Multi-Core systems)
4.14.1 概述
以下章节定义了一组允许优化使用多核环境的机制/服务。这些服务可能由不同的 AUTOSAR BSW 模块提供。AUTOSAR_SWS_Multi-Core 定义了从哪个模块可以访问哪个服务。
4.14.2 需求
[SRS_Os_80013] 服务的行为应与单核系统相同。
| 类型 | Valid |
|---|---|
| 描述 | 当发起对象和被操纵对象(例如任务)驻留在同一核上时,服务(例如任务激活)的行为应与单核系统相同。 |
| 理由 | SC 系统的已知服务在本地使用时(即不跨越核边界)应在 MC 系统上表现相同。 |
| 用例 | -- |
| 依赖 | OS 规范、BSW 规范 |
| 支持材料 | |
| 满足 | RS_BRF_00206 |
[SRS_Os_80015] MC 扩展应提供在不同核上激活任务的机制。
| 类型 | Valid |
|---|---|
| 描述 | MC 扩展应提供在不同核上的不同 OsApplications 中激活任务的机制。 |
| 理由 | 在不同项目(例如低成本和高端车辆)的核之间离线重新分配任务应是可行的,而无需重新编程所有任务激活。此外,系统集成商应可以将子功能分配到具有空闲处理能力的核上。 |
| 用例 | 使用以目标代码形式交付的第三方软件。 |
| 依赖 | OS 规范 |
| 支持材料 | -- |
| 满足 | RS_BRF_00206 |
[SRS_Os_80016] 事件机制应跨核工作。
| 类型 | Valid |
|---|---|
| 描述 | MC 扩展应提供将事件发送到不同核上的任务中的机制,位于不同 OsApplications 中。 |
| 理由 | 如果使用事件并且任务移动到不同的核(离线),则应仍可以使用事件。 |
| 用例 | 监控/安全概念。 |
| 依赖 | OS 规范 |
| 支持材料 | |
| 满足 | RS_BRF_00206 |
[SRS_Os_80018] 应提供在多个核上同步任务的方法。
| 类型 | Valid |
|---|---|
| 描述 | 应提供在多个核上同步任务的方法。 |
| 理由 | 需要跨核同步任务。这可以通过多种方式完成,例如激活跨核任务的报警、同步计数器或使用共享硬件定时器。 |
| 用例 | 同步应用 |
| 依赖 | OS 规范 |
| 支持材料 | -- |
| 满足 | RS_BRF_00206 |
[SRS_Os_80020] 应提供数据交换机制。
| 类型 | Valid |
|---|---|
| 描述 | 应提供独立于硬件保证数据一致性的数据交换机制。 |
| 理由 | 为了最小化 RTE 的硬件依赖性,需要 RTE 可以使用的交换机制。 |
| 用例 | MC 系统中的数据交换。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | RS_BRF_01240 |
[SRS_Os_80021] AUTOSAR 环境的 MC 扩展应支持核之间的互斥机制,该机制不应引起死锁。
| 类型 | Valid |
|---|---|
| 描述 | 如果正确配置和使用,AUTOSAR 环境的 MC 扩展应支持核之间的互斥机制,不应引起死锁。 该机制应可从任务和 ISR 级别使用。 |
| 理由 | 在 MC 系统中,需要互斥机制以同步不同的核。该互斥机制应支持用户防止构建死锁。 |
| 用例 | 对共享资源的并发访问 |
| 依赖 |
|
| 支持材料 | -- |
| 满足 | RS_BRF_01264 |
[SRS_Os_80022] 在特定核上没有任务将被调度的情况下,OS 应执行用户可选择的操作。
| 类型 | Valid |
|---|---|
| 描述 | 在特定核上没有任务将被调度的情况下,OS 应执行用户可选择的操作。 |
| 理由 | 为了将核独立地设置为低功耗模式,使用了间接方法。代替显式请求核 HALT,考虑了 ECUM 等某些模块中实现的橡皮筋原理:只要其活动被分配给它的某些任务需要,核保持正常模式,并且一旦没有任务处于 RUNNING 或 READY 状态就停止。核可以通过 SW 中断(由 OS 管理)或 HW 中断唤醒。 |
| 用例 | 通过将未使用的核临时设置为省电模式来降低能耗 |
| 依赖 |
|
| 支持材料 | -- |
| 满足 | RS_BRF_01184 |
[SRS_Os_80023] 在特定核上没有任务将被调度的情况下,OS 应执行可在运行时选择的操作。
| 类型 | Valid |
|---|---|
| 描述 | 在特定核上没有任务将被调度的情况下,OS 应执行可在运行时选择的操作。 |
| 理由 | 当满足 SRS_Os_80022 的条件时,OS 应提供不同的操作选项。应可以定义不同的操作,从预定义的 NO_HALT 模式(不采取任何操作,核保持运行)到由 OS 供应商定义的多个特定于 OS 和 HW 的选项,这些选项将核设置为 HALT 状态。 |
| 用例 | 通过将未使用的核临时设置为省电模式来降低能耗 |
| 依赖 |
|
| 支持材料 | -- |
| 满足 | RS_BRF_01184 |
4.15 调试与跟踪(Debugging and Tracing)
4.15.1 ARTI 支持
[SRS_Os_12001] OS 应创建 ARTI 模块描述文件。
| 类型 | Valid |
|---|---|
| 描述 | 如果 OS 配置为使用 ARTI,则 OS 生成器应创建 ARTI 模块描述文件。 |
| 理由 | 调试工具需要内部信息以可视化软件的状态。实现此需求的组件和模块应提供必要的状态信息,可由内部和外部工具使用。 |
| 用例 | 调试软件。 |
| 依赖 | -- |
| 支持材料 | -- |
| 满足 | () |
4.15.2 跟踪支持(Tracing Support)
[SRS_Os_12002] OS 代码应包含 ARTI 钩子。
| 类型 | Valid |
|---|---|
| 描述 | 如果 OS 配置为使用 ARTI,则其代码应包含 ARTI 钩子。OS 生成器应在 ARTI 模块描述中公开钩子和可跟踪变量。 |
| 理由 | 跟踪和时序分析工具需要内部信息以可视化和检查软件的运行时行为。实现此需求的组件和模块应提供必要的详细信息和钩子,可由工具使用。 |
| 用例 | 运行时跟踪软件、分析、时序测量。 |
| 依赖 | 此需求依赖于"模块的生成器应创建 ARTI 模块描述文件"的需求。 |
| 支持材料 | -- |
| 满足 | () |
5 需求追溯(Requirements Tracing)
| 需求 | 描述 | 由以下 SRS 满足 |
|---|---|---|
| RS_BRF_00206 | AUTOSAR 应当支持多核 MCU | SRS_Os_80001, SRS_Os_80003, SRS_Os_80005, SRS_Os_80006, SRS_Os_80007, SRS_Os_80008, SRS_Os_80011, SRS_Os_80013, SRS_Os_80015, SRS_Os_80016, SRS_Os_80018 |
| RS_BRF_01096 | AUTOSAR 应当支持 ECU 的启动与关闭 | SRS_Os_11018 |
| RS_BRF_01184 | AUTOSAR 应当支持不同的降级方法 | SRS_Os_80022, SRS_Os_80023 |
| RS_BRF_01200 | AUTOSAR OS 应当向后兼容 OSEK OS | SRS_Os_00097 |
| RS_BRF_01208 | AUTOSAR OS 应当支持定期启动任务列表 | SRS_Os_00098, SRS_Os_00099 |
| RS_BRF_01216 | AUTOSAR OS 应当支持将 ScheduleTable 与外部时间源同步 | SRS_Os_11002 |
| RS_BRF_01224 | AUTOSAR OS 应当支持时序保护 | SRS_Os_11008 |
| RS_BRF_01232 | AUTOSAR OS 应当支持应用软件的隔离与保护 | SRS_Os_11001, SRS_Os_11003, SRS_Os_11005, SRS_Os_11009, SRS_Os_11010, SRS_Os_11011, SRS_Os_11012, SRS_Os_11013, SRS_Os_11016 |
| RS_BRF_01234 | AUTOSAR OS 应当支持 BSW 模块之间的隔离与保护 | SRS_Os_11001 |
| RS_BRF_01240 | AUTOSAR OS 应当支持 OSApplications 之间的通信 | SRS_Os_11006, SRS_Os_11007, SRS_Os_80020 |
| RS_BRF_01248 | AUTOSAR OS 应当支持终止和重启 OSApplications | SRS_Os_11014, SRS_Os_11022, SRS_Os_11023 |
| RS_BRF_01256 | AUTOSAR OS 应当提供关闭核的支持 | SRS_Os_80026, SRS_Os_80027 |
| RS_BRF_01264 | AUTOSAR OS 应当支持多核无死锁互斥 | SRS_Os_80021 |
| RS_BRF_02008 | AUTOSAR 应当提供机制保护系统免受未授权读访问 | SRS_Os_11000 |
6 参考资料(References)
6.1 AUTOSAR 交付物(Deliverables of AUTOSAR)
- [AUTOSAR_GLOSSARY] 术语表,
AUTOSAR_TR_Glossary.pdf - [DOC_LAYERED_ARCH] 分层软件架构,
AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf - [DOC_VFB] 虚拟功能总线,
AUTOSAR_EXP_VFB.pdf - [DOC_WP112_REQ] 基础软件模块通用需求,
AUTOSAR_SRS_BSWGeneral.pdf - [TPS_STDT_0078] 软件标准化模板,
AUTOSAR_TPS_StandardizationTemplate.pdf
6.2 相关标准与规范(Related standards and norms)
6.2.1 OSEK
- [STD_OSEK_OS] ISO 17356-3: OS
- [STD_OSEK_OIL] ISO 17356-6: OIL
6.2.2 公司报告、学术著作等
- [REP_DC_PROTECTED_OS] OSEK OS 的扩展以支持受保护的应用,OSEK Support Project, DC058_02, Daimler-Chrysler AG