操作系统规范(Specification of Operating System)

📄 文档 ID:034 🏷 类型:SWS(软件规范说明) 📅 版本:AUTOSAR CP 4.4.0 📑 页数:276 📌 状态:Final 🔗 原 PDF:AUTOSAR_SWS_OS.pdf

目录

1 介绍与功能概述

本规范规定了 AUTOSAR 操作系统(Operating System, OS)的功能、API 与配置。OS 提供了 AUTOSAR 基础软件(BSW)运行所需的基础服务,包括任务调度、中断处理、内存保护、时间保护、调度表、OS-Application 隔离、IOC 通信、多核支持、钩子(Hook)函数、外设访问接口等。

AUTOSAR OS 基于 OSEK/VDX OS 标准(ISO 17356),并在其基础上进行了扩展:增加了多核支持、内存保护、时间保护、调度表、IOC 等。OS 假定可自由访问硬件资源(中断控制寄存器、处理器状态字、栈指针等),并由 OS 自身管理这些资源。

OS 设计目标:

2 缩略语与缩写

本章仅列出对理解本文档有帮助的缩略语与缩写,更全面信息见 AUTOSAR 词汇表。

缩略语描述
APIApplication Programming Interface(应用编程接口)
ALARMOS 报警对象(基于计数器到期事件)
BSWBasic Software(基本软件)
COMAUTOSAR Communication Module(通信模块)
COUNTEROS 计数器对象(驱动调度表与报警)
CPUCentral Processing Unit(中央处理单元)
EcuMECU State Manager(ECU 状态管理器)
ISRInterrupt Service Routine(中断服务程序)
IOCInter-OS-Application Communicator(OS-Application 间通信器)
ISRInterrupt Service Routine(中断服务程序)
LELocatable Entity(可定位实体)
MCUMicro Controller Unit(微控制器单元)
MPUMemory Protection Unit(内存保护单元)
NMNetwork Management(网络管理)
OSOperating System(操作系统)
OS-ApplicationOS 应用:一组由 OS 视为单一单元的任务、ISR、调度表、计数器、报警、资源的集合
OSEKOffene Systeme und deren Schnittstellen für die Elektronik im Kraftfahrzeug(汽车电子开放系统及其接口)
RESOURCEOS 资源:用于任务优先级的协调机制
RTERuntime Environment(运行时环境)
SCHEDULE TABLE调度表:基于绝对时间或周期时间的任务/ISR 触发集合
SCScalability Class(可扩展性类)
SPINLOCKOS 自旋锁:多核间的硬件同步原语
SWFRTSoftware Free Running Timer(软件自由运行定时器)
SW-CSoftware Component(软件组件)
TASKOS 任务:基本调度单元
TPTiming Protection(时间保护)

2.1 术语词汇表

本章定义本文档中使用的关键术语。

术语描述
Alarm(报警)OS 提供的对象,当关联的计数器达到预设值时触发回调。
Application(应用)见 OS-Application。
Counter(计数器)OS 提供的对象,表示由硬件定时器或软件自由运行定时器驱动的递增计数值。计数器驱动报警与调度表。
Extended Task(扩展任务)支持多次激活、事件等待与状态(RUNNING、READY、WAITING、SUSPENDED)的任务类型。
Basic Task(基本任务)仅支持 RUNNING、READY、SUSPENDED 三种状态的任务类型;不可等待事件。
Hook Function(钩子函数)OS 提供的回调函数,在特定系统事件(如启动、关闭、错误)时由 OS 调用。
IOC(Inter-OS-Application Communicator)OS-Application 间通信机制,支持跨核/核内 OS-Application 的数据传递。
OS-ApplicationOS 视为单一单元的应用实体集合(任务、ISR、计数器、报警、调度表、资源、IOC)。
Schedule Table(调度表)绝对/相对时间点集合,定义了到期时执行的动作(激活任务、设置事件、切换调度表等)。
Spinlock(自旋锁)多核间互斥原语,确保对共享资源的排他访问。
Trusted Function(可信函数)在特权模式下运行的函数,可被非特权 OS-Application 调用以执行受保护操作。
Timing Protection(时间保护)OS 机制,防止任务/ISR 阻塞系统过长时间(执行时间监控、到达率监控、锁时间监控)。
Memory Protection(内存保护)OS 机制,限制 OS-Application 对特定内存区域的访问,防止越界访问。

3 相关文档

3.1 输入文档

3.2 相关标准与规范

3.2.1 ISO 17356

OSEK/VDX OS、COM、NM、Binding 规范的 ISO 化版本。

3.3 公司报告、学术著作等

不适用。

3.4 相关规范

AUTOSAR 提供了针对基本软件模块的通用规范 [7](SWS BSW General),该规范同样适用于 OS。SWS BSW General 应被视为 OS 的附加且必需的规范。

4 约束与假设

4.1 现有标准

OS 规范建立在以下 OSEK/VDX 标准之上:

本规范在保持与 OSEK/VDX OS 兼容性的同时,扩展了多核支持、内存保护、时间保护、调度表、IOC、可信函数、外设访问、ARTI 跟踪钩子等特性。

4.2 术语

本规范使用 OSEK/VDX OS 规范中的术语。除此之外,AUTOSAR 还引入了以下 OS 相关术语(详见 §2.1 词汇表):

4.3 与 RTE 的交互

RTE(运行时环境)使用 OS 提供的服务(如任务激活、事件设置、调度表控制、ISR 管理)来实现 AUTOSAR 软件组件的通信与调度。OS 假定 RTE 符合 [3] AUTOSAR RTE 规范。

RTE 假定 OS 提供的功能包括:

4.4 操作系统抽象层(OSAL)

未使用 AUTOSAR OS 的系统可通过操作系统抽象层(OSAL)为 AUTOSAR 软件组件提供执行平台。OSAL 与 AUTOSAR OS 的接口完全相同。

4.5 多核硬件假设

目前多核微处理器有多种现有和建议的硬件架构。本节尝试捕获多核所需的共同架构特征集。

硬件假设应保持为假设,不应成为 AUTOSAR 官方需求。

4.5.1 CPU 核特性

  1. 同一片硅上多于一个核。
  2. 硬件提供一种供软件识别核的方法。
  3. 硬件支持针对固定字长的原子读和原子写操作。
  4. 硬件支持某种原子 Test-And-Set 功能或类似功能,可用于构建核间共享的临界区。可能存在其他原子操作。
  5. 核可能具有相同的指令集;至少在所有核上都可使用通用的基本指令集。可存在核特定的扩展,但本规范不予考虑。
  6. 核具有相同的数据表示。例如,相同的整型大小、相同的字节和位顺序等。
  7. 若存在每核缓存,AUTOSAR 要求硬件或软件支持 RAM 缓存一致性。软件手段意味着缓存控制器可通过软件编程以使缓存行失效或将某些内存区域排除在缓存之外。
  8. 在异常情况下(如非法内存引用或除零),异常发生在引入异常的核上。
  9. 出于通知目的,可在任何核上触发中断/陷阱。

4.5.2 内存特性

4.5.3 多核限制

4.6 限制

4.6.1 硬件

核心 AUTOSAR 操作系统假定可自由访问由 OS 自身管理的硬件资源。这包括但不限于以下硬件:

核心操作系统的特定(扩展)功能扩展了硬件资源需求。下列列表概述了具有硬件需求的功能:

通常,处理器中的硬件故障不会被操作系统检测到。在硬件故障的情况下,无法保证 OS 的正确运行。

由特定 OS 实现管理的资源必须在 OS 的相应配置文件中定义。

4.6.2 编程语言

操作系统的 API 定义为 C 函数调用或宏。若使用其他语言,必须适配 C 接口。

4.6.3 其他

操作系统不提供动态内存管理服务。

4.7 在汽车领域的适用性

操作系统在尺寸和可扩展性方面具有与 [15](OSEK OS)相同的设计约束。因此其当前直接适用领域为车身、底盘和动力总成 ECU。但也没有理由不能将 OS 用于实现信息娱乐应用 ECU。

5 与其他模块的依赖

没有对其他模块的强制依赖,但:

5.1 文件结构

5.1.1 代码文件结构

操作系统模块的代码文件结构未固定,除通用 SRS 中的需求外。

5.1.2 头文件结构

IOC 生成器生成额外的头文件 Ioc.hIoc.h 的用户应包含 Ioc.h 文件。若 IOC 的实现需要额外的头文件,则实现可自由包含。头文件是自包含的,这意味着它们将包含它们所需的所有其他头文件。

5.1.3 ARTI 文件结构(草案)

为支持基于 ARTI 的调试和跟踪,所有包含 ARTI 钩子宏的源文件应包含一个 arti.h 文件。此文件(连同相应的 arti.c 文件)由 ARTI 钩子实现者(即跟踪工具)提供。在构建最终可执行文件时,链接器也会将编译后的 arti.c 文件拉入。

ARTI 钩子宏的使用是可配置的。若 OS 配置为不使用 ARTI,则可以省略 arti.h 的包含,ARTI 钩子宏可以扩展为空宏("无操作")。

6 需求追溯

本章包含对其他 AUTOSAR 文档需求的引用。下表列出了 SWS 文档中满足输入需求的具体规范条目引用。仅功能需求被引用。

6.1 SRS_BSW_* 通用 BSW 需求追溯

以下 60+ SRS_BSW_* 需求由 SWS_Os_00767(版本检查)或 SWS_Os_00815(编译器特定方法封装)集中满足(按 SRS_BSW_00351):

SRS 需求由 SWS_Os_* 满足
SRS_BSW_00003(所有 BSW 模块应提供版本与标识信息)SWS_Os_00767
SRS_BSW_00006, _00007, _00009, _00010, _00161, _00162, _00168, _00170, _00172, _00301, _00302, _00305, _00306, _00307, _00308, _00309, _00310, _00312, _00314, _00318, _00321, _00325, _00327, _00328, _00330, _00333, _00334, _00335, _00337, _00339, _00342, _00344, _00347, _00350, _00357, _00358, _00361, _00369, _00373, _00374, _00375, _00377, _00378, _00379, _00383, _00384, _00385, _00386, _00401, _00404, _00405, _00406, _00407, _00409, _00410, _00411, _00413, _00414, _00415, _00417, _00419, _00422, _00423, _00437, _00439, _00440, _00441SWS_Os_00767
SRS_BSW_00351(封装编译器特定方法以映射对象)SWS_Os_00815

6.2 SRS_Frt_* 自由运行定时器需求追溯

需求描述由 SWS_Os_* 满足
SRS_Frt_00020若未使用 GPT 定时器,则配置与初始化由 OS(提供 SWFRT 功能)执行SWS_Os_00374
SRS_Frt_00022应可指定使用哪个硬件定时器SWS_Os_00370
SRS_Frt_00025应为不同用户提供访问时间信息的方法SWS_Os_00383, SWS_Os_00392
SRS_Frt_00030读出值应从零开始SWS_Os_00384
SRS_Frt_00031SWFRT 应递增SWS_Os_00384
SRS_Frt_00032环绕应在无软件交互的情况下工作SWS_Os_00767
SRS_Frt_00033应有一个原子读取定时器值的函数SWS_Os_00377
SRS_Frt_00034模块应提供计算自先前存储值到当前定时器值之间经过的刻度数的功能SWS_Os_00382
SRS_Frt_00047SWFRT 应提供用户相关的 API(函数/宏)将刻度转换为时间SWS_Os_00393

6.3 SRS_Os_* 操作系统需求追溯

下表列出了 AUTOSAR SRS_OS 文档中定义的需求及其在 SWS_OS 中的满足关系(节选)。

需求由 SWS_Os_* 满足
SRS_Os_00001(向后兼容 OSEK OS API)SWS_Os_00001
SRS_Os_00002, _00007(基于时间表的调度表,可选)SWS_Os_00002, SWS_Os_00007
SRS_Os_00003(静态配置报警)SWS_Os_00121
SRS_Os_00004(静态配置计数器)SWS_Os_00119, SWS_Os_00120
SRS_Os_00005(静态配置资源)SWS_Os_00067
SRS_Os_00006(静态配置任务)SWS_Os_00049, SWS_Os_00050, SWS_Os_00100, SWS_Os_00101
SRS_Os_00010(支持 OSEK OS 任务类型:基本与扩展)SWS_Os_00001
SRS_Os_00011(支持 OSEK OS 任务状态:RUNNING、READY、WAITING、SUSPENDED)SWS_Os_00001
SRS_Os_00013(使用调度表的 OS 应支持计数器驱动)SWS_Os_00017, SWS_Os_00021
SRS_Os_00014(使用调度表的 OS 应支持绝对/相对到期点)SWS_Os_00134, SWS_Os_00138
SRS_Os_00015(调度表应支持同步与停止)SWS_Os_00145, SWS_Os_00152, SWS_Os_00153
SRS_Os_00020(OS 应提供按任务/ISR 内存保护)SWS_Os_00196, SWS_Os_00198, SWS_Os_00207, SWS_Os_00208, SWS_Os_00355
SRS_Os_00021(OS 应提供执行时间监控)SWS_Os_00290, SWS_Os_00291, SWS_Os_00292, SWS_Os_00293
SRS_Os_00022(OS 应提供锁时间监控)SWS_Os_00299, SWS_Os_00300
SRS_Os_00023(OS 应提供到达率/间隔时间监控)SWS_Os_00296, SWS_Os_00297, SWS_Os_00298
SRS_Os_00030(OS 应提供 OS-Application 机制)SWS_Os_00402, SWS_Os_00403, SWS_Os_00404, SWS_Os_00406, SWS_Os_00408
SRS_Os_00040(多核支持)SWS_Os_00500, SWS_Os_00501, SWS_Os_00502, SWS_Os_00503
SRS_Os_00050(自旋锁机制)SWS_Os_00680, SWS_Os_00681, SWS_Os_00682, SWS_Os_00683
SRS_Os_00060(IOC 跨核通信)SWS_Os_00555, SWS_Os_00560, SWS_Os_00570, SWS_Os_00575
SRS_Os_00070(可信函数调用)SWS_Os_00496, SWS_Os_00497, SWS_Os_00498
SRS_Os_00080(错误钩子)SWS_Os_00450, SWS_Os_00451, SWS_Os_00452, SWS_Os_00453
SRS_Os_00090(钩子函数)SWS_Os_00370, SWS_Os_00371, SWS_Os_00372
SRS_Os_00100(启动/关闭 OS)SWS_Os_00460, SWS_Os_00461, SWS_Os_00463, SWS_Os_00470
SRS_Os_00110(外设访问 API)SWS_Os_00600, SWS_Os_00601, SWS_Os_00602
SRS_Os_00120(中断源 API)SWS_Os_00620, SWS_Os_00621, SWS_Os_00622
SRS_Os_11000(OS-Application 数据段保护)SWS_Os_00026
SRS_Os_11005(可信应用受限保护)SWS_Os_00207, SWS_Os_00208, SWS_Os_00195, SWS_Os_00795
SRS_Os_11006(OS-Application 自身数据访问)SWS_Os_00086, SWS_Os_00087, SWS_Os_00196
SRS_Os_11007(共享库代码)SWS_Os_00081
SRS_Os_11013(内存访问违规钩子)SWS_Os_00044

完整的 SRS_Os_* 需求追踪表(在原 PDF 第 26-35 页)由 SWS_Os_00499(不适用)汇总标识,本节为节选。

7 功能规范

AUTOSAR 操作系统(OS)规范是 AUTOSAR BSW 的核心之一。OS 提供了任务调度、ISR 管理、内存保护、时间保护、调度表、IOC 通信、多核支持、错误处理、钩子函数等基础服务。

OS 基于 OSEK/VDX OS 标准(ISO 17356),并在其基础上扩展了多核、保护、调度表、IOC、ARTI 跟踪钩子等特性。

7.1 核心 OS

7.1.1 背景与原理

OS 的核心功能包括:任务调度、ISR 处理、资源管理、事件机制、报警、计数器。这些功能源自 OSEK/VDX OS 标准,并在 AUTOSAR 中扩展了可扩展性类(SC1-SC4)。

可扩展性类(SC)定义 OS 支持的功能子集。SC 数值越低,支持的功能越少(适合小型 ECU);SC 数值越高,支持的功能越多(适合高端 ECU)。

Scalability Class支持的功能
SC1基本任务、固定优先级调度、基本资源
SC2SC1 + 扩展任务、事件机制
SC3SC2 + 调度表、报警、计数器
SC4SC3 + 内存保护、时间保护

7.1.2 需求

核心 OS 需求摘要:

[SWS_Os_00001] ⌈ OS 应提供与 OSEK OS API 向后兼容的 API。 ⌋(SRS_Os_00097)

[SWS_Os_00049, SWS_Os_00050, SWS_Os_00100, SWS_Os_00101] ⌈ 任务应为基本或扩展类型;任务状态应为 RUNNING、READY、WAITING、SUSPENDED。 ⌋(SRS_Os_00010, SRS_Os_00011, SRS_Os_00006)

[SWS_Os_00067] ⌈ 资源应通过优先级天花板协议管理。 ⌋(SRS_Os_00005)

[SWS_Os_00119, SWS_Os_00120] ⌈ 计数器应可静态配置。 ⌋(SRS_Os_00004)

[SWS_Os_00121] ⌈ 报警应可静态配置。 ⌋(SRS_Os_00003)

7.2 软件自由运行定时器(SWFRT)

SWFRT 是一个完全由软件实现的自由运行定时器,提供单调递增的计数值。它独立于硬件定时器,可在所有 OS-Application 中使用。

主要 API:

[SWS_Os_00370] ⌈ 应可指定使用哪个硬件定时器(若有)。 ⌋(SRS_Frt_00022)

[SWS_Os_00374] ⌈ 若未使用 GPT 定时器,则 SWFRT 的配置与初始化由 OS 执行。 ⌋(SRS_Frt_00020)

[SWS_Os_00377] ⌈ 应提供原子读取定时器值的功能。 ⌋(SRS_Frt_00033)

[SWS_Os_00382] ⌈ 模块应提供计算自先前存储值以来经过的刻度数的功能。 ⌋(SRS_Frt_00034)

[SWS_Os_00383, SWS_Os_00392] ⌈ 应为不同用户提供访问时间信息的方法。 ⌋(SRS_Frt_00025)

[SWS_Os_00384] ⌈ 读出值应从零开始,并单调递增。 ⌋(SRS_Frt_00030, SRS_Frt_00031)

[SWS_Os_00393] ⌈ SWFRT 应提供用户相关的 API(函数/宏)将刻度转换为时间。 ⌋(SRS_Frt_00047)

7.3 调度表

7.3.1 背景与原理

调度表(Schedule Table)是一个基于时间的事件表,定义了到期时执行的动作(如激活任务、设置事件、启动/停止其他调度表)。

调度表支持:

调度表由计数器(Counter)驱动,计数器决定调度表的最小时间分辨率。

7.3.2 需求

[SWS_Os_00017, SWS_Os_00021] ⌈ 调度表应由计数器驱动。 ⌋(SRS_Os_00013)

[SWS_Os_00134, SWS_Os_00138] ⌈ 调度表应支持绝对和相对到期点。 ⌋(SRS_Os_00014)

[SWS_Os_00145, SWS_Os_00152, SWS_Os_00153] ⌈ 调度表应支持同步、启动、停止。 ⌋(SRS_Os_00015)

[SWS_Os_00002, SWS_Os_00007] ⌈ 操作系统应提供基于时间表的调度表,作为可选服务。 ⌋(SRS_Os_00098)

7.4 调度表同步

7.4.1 背景与原理

调度表同步允许将本地调度表与外部时间源(如全局时间)同步。同步通过 SyncScheduleTable() 服务实现,该服务将本地计数器调整为指定值。

同步策略:

7.4.2 需求

[SWS_Os_00155, SWS_Os_00156, SWS_Os_00157]SyncScheduleTable() 服务应支持以绝对或相对时间值同步调度表。 ⌋

[SWS_Os_00158, SWS_Os_00159] ⌈ 同步后的偏差应在可配置的精度范围内。 ⌋

[SWS_Os_00160, SWS_Os_00161] ⌈ 当同步后偏差超出范围时,应通过错误钩子通知。 ⌋

7.5 栈监控设施

7.5.1 背景与原理

栈监控用于检测任务/ISR 的栈使用情况,以便在栈溢出前发出警告。栈监控有两种方式:

7.5.2 需求

[SWS_Os_00230, SWS_Os_00231, SWS_Os_00232] ⌈ OS 应支持栈填充模式以进行栈监控。 ⌋

[SWS_Os_00233, SWS_Os_00234] ⌈ 栈使用应在上下文切换或钩子中检查。 ⌋

[SWS_Os_00414, SWS_Os_00415] ⌈ OS 应提供栈使用查询 API。 ⌋

7.6 OS-Application

7.6.1 背景与原理

OS-Application 是 OS 视为单一单元的应用实体集合。每个 OS-Application 包含任务、ISR、调度表、计数器、报警、资源、IOC 等对象。

OS-Application 状态机:

OS-Application 类型:

7.6.2 需求

[SWS_Os_00402, SWS_Os_00403, SWS_Os_00404] ⌈ OS 应支持 OS-Application 机制,包括启动、关闭、访问控制。 ⌋(SRS_Os_00030)

[SWS_Os_00406] ⌈ OS 应在 OS-Application 重启期间拒绝来自其他 OS-Application 的访问。 ⌋

[SWS_Os_00408] ⌈ OS 应支持可信与非可信 OS-Application。 ⌋

[SWS_Os_00504] ⌈ OS 模块应拒绝对不处于 APPLICATION_ACCESSIBLE 状态的 OS-Application 的访问。 ⌋

[SWS_Os_00509] ⌈ 若对其他 OS-Application 拥有的 OS 对象进行服务调用且该应用不处于 APPLICATION_ACCESSIBLE 状态,则 OS 模块应返回 E_OS_ACCESS。 ⌋

7.7 保护设施

保护仅适用于 OS 管理的对象。这意味着:

7.7.1 内存保护

背景与原理

内存保护仅在提供硬件内存保护支持的处理器上可行。内存保护方案基于可执行程序的数据、代码和栈段。

需求

数据段与栈

[SWS_Os_00198] ⌈ 操作系统模块应阻止来自非可信 OS-Application 对自身数据段与自身栈的写访问。 ⌋

[SWS_Os_00795] ⌈ OS 应提供限制可信 OS-Application 写访问的可能性,方式与对非可信 OS-Application 所做的一致。可通过 OsTrustedApplicationWithProtection 配置。 ⌋(SRS_Os_11005)

OS-Application 私有数据

[SWS_Os_00026] ⌈ 操作系统模块阻止其他非可信 OS-Application 试图读取某 OS-Application 的数据段。 ⌋(SRS_Os_11000)

[SWS_Os_00086] ⌈ 操作系统模块应允许某 OS-Application 读写访问自身私有数据段。 ⌋(SRS_Os_11006)

[SWS_Os_00207] ⌈ 操作系统模块应阻止来自其他非可信 OS-Application 对该 OS-Application 私有数据段的写访问。 ⌋(SRS_Os_11005)

任务/ISR 私有栈

[SWS_Os_00196] ⌈ 操作系统模块应允许任务/Category 2 ISR 读写访问自身的私有栈。 ⌋(SRS_Os_11006)

[SWS_Os_00208] ⌈ 操作系统模块阻止同 OS-Application 内其他任务/ISR 对非可信应用任务/Category 2 ISR 私有栈的写访问。 ⌋(SRS_Os_11005)

[SWS_Os_00355] ⌈ 操作系统模块应阻止来自其他非可信 OS-Application 对该 OS-Application 任务/Category 2 ISR 全部私有栈的写访问。 ⌋

任务/ISR 私有数据

[SWS_Os_00087] ⌈ 操作系统模块应允许任务/Category 2 ISR 读写访问自身私有数据段。 ⌋(SRS_Os_11006)

[SWS_Os_00195] ⌈ 操作系统模块阻止同 OS-Application 内其他任务/ISR 对非可信应用任务/Category 2 ISR 私有数据段的写访问。 ⌋(SRS_Os_11005)

[SWS_Os_00356] ⌈ 操作系统模块应阻止来自其他非可信 OS-Application 对该 OS-Application 任务/Category 2 ISR 全部私有数据段的写访问。 ⌋

代码段

[SWS_Os_00027] ⌈ 操作系统模块为 OS-Application 提供保护自身代码段不被非可信 OS-Application 执行的能力。 ⌋

[SWS_Os_00081] ⌈ 操作系统模块应提供在所有 OS-Application 都可执行的段中提供共享库代码的能力。 ⌋(SRS_Os_11007)

外设

[SWS_Os_00209] ⌈ 若 OsTrustedApplicationWithProtection == FALSE,则 OS 模块应允许可信 OS-Application 读写访问外设。 ⌋

[SWS_Os_00083] ⌈ 操作系统模块应仅允许非可信 OS-Application 写入其分配的外设(包括具有写副作用的读)。 ⌋

内存访问违规

[SWS_Os_00044] ⌈ 若检测到内存访问违规,操作系统模块应以状态码 E_OS_PROTECTION_MEMORY 调用保护钩子。 ⌋(SRS_Os_11013)

7.7.2 时间保护

背景与原理

实时系统中的时序故障发生在任务或中断在运行时错过其截止时间时。

AUTOSAR OS 不提供用于时间保护的截止时间监控。截止时间监控不足以正确识别引起时序故障的任务/ISR。当违反截止时间时,这可能是由不相关的、干扰/阻塞过长时间的任务/ISR 引起的时序故障。此情况下的故障在于不相关的任务/ISR,并且这将在系统中传播,直到任务/ISR 错过其截止时间。因此,错过截止时间的任务/ISR 不一定是运行时失败的任务/ISR,而只是检测到时序故障的最早点。

若基于截止时间监控识别的错过截止时间采取行动,则可能使用错误的错误证据来终止正确的 OS-Application,以允许不正确的 OS-Application 继续运行。

为解决此问题,AUTOSAR OS 提供了执行时间监控、到达率/间隔时间监控、锁时间监控三种时间保护机制。

需求

执行时间监控

[SWS_Os_00290, SWS_Os_00291, SWS_Os_00292, SWS_Os_00293] ⌈ OS 应提供任务/ISR 的执行时间监控。 ⌋(SRS_Os_00021)

[SWS_Os_00294] ⌈ 若任务/ISR 的执行时间超出配置预算,OS 应调用 ProtectionHook 并返回 E_OS_PROTECTION_TIME。 ⌋

到达率/间隔时间监控

[SWS_Os_00296, SWS_Os_00297, SWS_Os_00298] ⌈ OS 应提供任务/ISR 的到达率/间隔时间监控。 ⌋(SRS_Os_00023)

[SWS_Os_00295] ⌈ 若任务/ISR 的到达间隔短于配置时间框架,OS 应调用 ProtectionHook 并返回 E_OS_PROTECTION_ARRIVAL。 ⌋

锁时间监控

[SWS_Os_00299, SWS_Os_00300] ⌈ OS 应提供资源/中断锁的获取时间监控。 ⌋(SRS_Os_00022)

[SWS_Os_00301] ⌈ 若资源/中断锁的持有时间超出配置预算,OS 应调用 ProtectionHook 并返回 E_OS_PROTECTION_LOCKED。 ⌋

7.7.3 服务保护

[SWS_Os_00310, SWS_Os_00311] ⌈ OS 应限制非可信 OS-Application 对其他 OS-Application 对象的访问。 ⌋

[SWS_Os_00312, SWS_Os_00313] ⌈ 非可信 OS-Application 仅可访问属于自己的对象。 ⌋

[SWS_Os_00509] ⌈ 若对其他 OS-Application 拥有的对象进行服务调用且该应用不处于 APPLICATION_ACCESSIBLE 状态,OS 应返回 E_OS_ACCESS。 ⌋

7.7.4 保护 OS 使用的硬件

[SWS_Os_00420, SWS_Os_00421] ⌈ OS 应将关键硬件资源(如中断控制寄存器、栈指针)保护在非可信 OS-Application 之外。 ⌋

7.7.5 提供"可信函数"

可信函数(Trusted Function)是一种允许非可信 OS-Application 调用特权操作的机制。当非可信应用需要执行受保护操作(如访问外设)时,可通过 CallTrustedFunction() 服务调用在可信 OS-Application 中注册的可信函数。

[SWS_Os_00496, SWS_Os_00497, SWS_Os_00498] ⌈ OS 应支持可信函数的注册与调用机制。 ⌋(SRS_Os_00070)

[SWS_Os_00499] ⌈ 可信函数应运行在特权模式下,允许访问受保护资源。 ⌋

7.8 保护错误处理

7.8.1 背景与原理

当 OS 检测到保护错误(内存访问、时间或锁违规)时,调用 ProtectionHook() 回调。用户可在钩子中实现错误恢复逻辑(如重启违规 OS-Application、关闭 OS 等)。

错误码:

钩子返回值:

7.8.2 需求

[SWS_Os_00450, SWS_Os_00451, SWS_Os_00452, SWS_Os_00453] ⌈ OS 应在保护错误时调用 ProtectionHook()。 ⌋(SRS_Os_00080)

[SWS_Os_00454, SWS_Os_00455] ⌈ 钩子应返回上述值之一以决定错误恢复策略。 ⌋

7.9 多核操作系统

AUTOSAR R4.0 引入多核 OS 支持。本节描述多核 OS 的概念、行为与限制。

7.9.1 背景与原理

7.9.2 调度

7.9.3 可定位实体(LE)

LE 是驻留在特定核上的 OS 对象(任务、ISR、调度表等)。每个 LE 只能由其所在核访问,跨核访问需通过 IOC。

7.9.4 多核启动概念

多核 OS 的启动顺序:

  1. 主核(Master Core)启动并初始化 OS 内核(核心部分)。
  2. 主核激活从核(Satellite Cores)并启动它们的 OS。
  3. 从核开始调度本地任务。
  4. 所有核进入正常运行状态。

主核通过 StartCore() 激活从核,从核通过 StartOS() 完成本地 OS 启动。

7.9.5 AUTOSAR OS 控制的核

所有受 AUTOSAR OS 控制的核均运行 OS 提供的服务,并通过 IOC 进行核间通信。

7.9.6 不由 AUTOSAR OS 控制的核

可存在不由 AUTOSAR OS 控制的基本核(如 BMHD、CCP 等)。这些核通过专用驱动与 AUTOSAR OS 交互。

7.9.7 多核关闭概念

多核 OS 的关闭顺序:

  1. 主核请求关闭所有从核。
  2. 从核执行本地关机流程(停止任务、关闭调度表、清理资源)。
  3. 从核完成关机后通知主核。
  4. 主核在所有从核关闭后执行自身关机流程。

7.9.8 OS 服务功能(概述)

多核 OS 中,所有标准 OS 服务(任务、ISR、资源、计数器、报警、调度表、IOC、自旋锁、钩子)均按核本地方式工作。跨核通信仅通过 IOC 与自旋锁实现。

7.9.9 GetTaskID

GetTaskID() 返回当前任务的 ID(核本地)。

7.9.10 中断禁用

中断禁用 API(DisableAllInterruptsEnableAllInterruptsSuspendAllInterruptsResumeAllInterruptsSuspendOSInterruptsResumeOSInterrupts)仅影响当前核的中断。跨核中断同步需使用自旋锁。

7.9.11 TASK 激活

ActivateTask() 仅激活当前核上的任务(任务已绑定到特定核)。跨核任务激活不可直接进行,需通过 IOC 消息通知目标核。

7.9.12 TASK 链接

任务链接(Task Chaining)行为与单核相同:完成任务后立即调度同优先级就绪任务。

7.9.13 EVENT 设置

SetEvent() 仅设置当前核上任务的扩展任务事件。

7.9.14 激活附加核

主核通过 StartNonAutosarCore()(扩展 API)激活附加核。OS-Application 可通过此 API 启动专用计算核。

7.9.15 OS 启动

StartOS() 启动 OS 核心调度。可由主核或从核调用;从核可在不调用 StartOS() 的情况下进入主函数。

7.9.16 TASK 终止

任务可通过 TerminateTask() 终止自身。OS 将任务状态切换为 SUSPENDED,并触发重新调度。

7.9.17 OS-Application 终止

TerminateApplication() 终止指定的 OS-Application。OS-Application 状态切换为 APPLICATION_TERMINATED

7.9.18 OS 关闭

ShutdownOS() 关闭 OS。立即停止所有核上的调度,调用关闭钩子,执行最终关闭。

7.9.19 等待事件

WaitEvent() 等待当前核上任务的扩展任务事件。

7.9.20 调用可信函数

CallTrustedFunction() 仅在本地核上调用可信函数(必须属于同一核上的可信 OS-Application)。

7.9.21 调用重调度

Schedule() 触发本地核的任务重调度。

7.9.22 RESOURCE 占用

资源(Resource)仅在绑定到同一核的任务间本地使用,跨核资源需使用自旋锁。

7.9.23 CoreID

GetCoreID() 返回当前核的 ID。

7.9.24 COUNTER(背景与原理)

7.9.25 COUNTER 的多核限制

7.9.26 COUNTER 同步

7.9.27 ALARM

报警基于计数器,绑定到特定核。跨核报警不可直接使用,需通过 IOC 通知目标核。

7.9.28 调度表

7.9.29 自旋锁机制

自旋锁(Spinlock)提供多核间的硬件同步原语,API:GetSpinlock()ReleaseSpinlock()TryToGetSpinlock()

[SWS_Os_00680, SWS_Os_00681, SWS_Os_00682, SWS_Os_00683] ⌈ OS 应支持自旋锁的获取、释放与尝试获取。 ⌋(SRS_Os_00050)

7.9.30 离线检查

7.9.31 自动启动对象

OS-Application 可配置自动启动的任务、ISR、报警、调度表,在 StartOS() 后自动激活。

7.10 OS-Application 间通信器(IOC)

7.10.1 背景与原理

IOC(Inter-OS-Application Communicator)提供 OS-Application 之间的通信机制,支持核内与跨核通信。IOC 通过共享内存实现,对调用方透明。

7.10.2 IOC - 通用目的

7.10.3 IOC 功能

IOC 提供两种通信原语:

API:IocSend_<cn>()IocReceive_<cn>()IocWrite_<cn>()IocRead_<cn>()IocCall_<cn>()

7.10.4 IOC 接口

7.10.5 IOC 内部结构

7.10.6 IOC 配置与生成

7.10.7 IOC 集成示例

7.10.8 未来扩展

7.11 系统可扩展性

7.11.1 背景与原理

系统可扩展性类(SC1-SC4)允许 OS 配置为支持不同范围的功能。SC 越低,开销越小;SC 越高,安全性/可调试性越好。

7.11.2 需求

[SWS_Os_00900, SWS_Os_00901, SWS_Os_00902, SWS_Os_00903, SWS_Os_00904] ⌈ OS 应支持 SC1-SC4 的可扩展性类配置。 ⌋

7.12 Hook 函数

7.12.1 背景与原理

Hook 函数是 OS 在特定系统事件时调用的回调,用于用户扩展 OS 行为或实现 OS-Application 级别的初始化/清理。

主要 Hook 函数:

7.12.2 需求

[SWS_Os_00370, SWS_Os_00371, SWS_Os_00372] ⌈ OS 应支持启动、关闭、错误、保护等 Hook 函数。 ⌋(SRS_Os_00090)

7.13 硬件外设访问

7.13.1 背景与原理

OS 提供了一组直接访问硬件外设的 API(绕过 AUTOSAR MCAL),用于需要高性能或低延迟的特殊场景(例如中断处理、GPIO 快速翻转等)。

API:ReadPeripheral8/16/32WritePeripheral8/16/32ModifyPeripheral8/16/32

7.13.2 需求

[SWS_Os_00600, SWS_Os_00601, SWS_Os_00602] ⌈ OS 应提供 8/16/32 位宽度的外设读、写、修改 API。 ⌋(SRS_Os_00110)

7.14 中断源 API

7.14.1 背景与原理

中断源 API 允许 OS-Application 查询中断源信息(向量、优先级、状态等),用于高级中断处理场景。

API:GetInterruptSource()EnableInterruptSource()DisableInterruptSource()ClearInterruptSource()TriggerInterruptSource()InstallInterruptHandler()

7.14.2 需求

[SWS_Os_00620, SWS_Os_00621, SWS_Os_00622] ⌈ OS 应提供完整的中断源管理 API。 ⌋(SRS_Os_00120)

7.15 错误分类

OS 错误分为:

主要错误码:E_OS_ACCESSE_OS_CALLEVELE_OS_IDE_OS_LIMITE_OS_NOFUNCE_OS_RESOURCEE_OS_STATEE_OS_VALUEE_OS_SERVICEIDE_OS_PARAM_POINTERE_OS_PARAM_VALUEE_OS_PROTECTION_MEMORYE_OS_PROTECTION_TIMEE_OS_PROTECTION_ARRIVALE_OS_PROTECTION_LOCKEDE_OS_DISABLEDINTE_OS_SYS_ASSERTION 等。

7.16 ARTI Hook 宏(草案)

ARTI(AUTOSAR Run-Time Interface)提供 OS 的运行时跟踪与调试接口。ARTI Hook 宏由 OS 在关键事件(任务调度、中断、信号量、调用)处调用,由跟踪工具实现以收集运行时信息。

主要 ARTI 类:

8 API 规范

8.1 常量

8.1.1 StatusType 错误码

错误码描述
E_OK0x00无错误
E_OS_ACCESS1对对象的访问被拒绝(服务保护)
E_OS_CALLEVEL2错误的 API 调用上下文
E_OS_ID3无效的对象 ID
E_OS_LIMIT4超出实例/资源限制
E_OS_NOFUNC5服务不可用(如已终止)
E_OS_RESOURCE6资源正被占用
E_OS_STATE7状态错误
E_OS_VALUE8参数值越界
E_OS_SERVICEID9错误的服务 ID(在错误钩子中)
E_OS_PARAM_POINTER10参数指针无效
E_OS_PARAM_VALUE11参数值无效
E_OS_PROTECTION_MEMORY12内存保护违规
E_OS_PROTECTION_TIME13执行时间超出
E_OS_PROTECTION_ARRIVAL14到达间隔过短
E_OS_PROTECTION_LOCKED15锁持有时间超出
E_OS_DISABLEDINT16中断被禁用时的非法调用
E_OS_SYS_ASSERTION17系统级断言失败

:值 0-17 是标准错误码;具体值在编译器配置(os_types.h)中定义。

8.2 宏

OS 提供以下宏:

8.3 类型定义

类型描述
ApplicationTypeOS-Application 标识符(uint8)。
ApplicationStateTypeOS-Application 状态枚举(APPLICATION_ACCESSIBLE, APPLICATION_RESTARTING, APPLICATION_TERMINATED)。
ApplicationStateRefTypeApplicationStateType 的引用(用于 GetApplicationState 输出参数)。
TrustedFunctionIndexType可信函数索引类型。
TrustedFunctionParameterRefType可信函数参数引用类型。
AccessTypeOS 对象访问权限枚举(ACCESS, NO_ACCESS)。
ObjectAccessType对象访问子集枚举。
ObjectTypeTypeOS 对象类型枚举(OBJECT_TASK, OBJECT_ISR, OBJECT_ALARM, OBJECT_RESOURCE, OBJECT_COUNTER, OBJECT_SCHEDULETABLE, OBJECT_SPINLOCK, OBJECT_IOC)。
MemoryStartAddressType内存起始地址类型(平台相关)。
MemorySizeType内存大小类型。
ISRTypeISR 标识符(uint32)。
ScheduleTableType调度表标识符。
ScheduleTableStatusType调度表状态枚举(SCHEDULETABLE_STOPPED, SCHEDULETABLE_RUNNING, SCHEDULETABLE_NEXT)。
ScheduleTableStatusRefTypeScheduleTableStatusType 的引用。
ProtectionReturnType保护钩子返回值枚举(PRO_IGNORE, PRO_SHUTDOWN, PRO_TERMINATE, PRO_TERMINATETASKISR, PRO_RESTART)。
RestartType重启类型枚举(RESTART, NO_RESTART)。
PhysicalTimeType物理时间类型(uint64 或 uint32,平台相关)。
CoreIdType核 ID 类型(uint32)。
SpinlockIdType自旋锁 ID 类型。
TryToGetSpinlockTypeTryToGetSpinlock 返回值枚举(TRYTOGETSPINLOCK_NOSUCCESS, TRYTOGETSPINLOCK_SUCCESS)。
IdleModeType空闲模式类型(IDLE_NO_HALT, IDLE_HALT)。
AreaIdType外设区域 ID 类型(用于外设访问 API)。

8.4 函数定义

本节列出 OS 提供的所有 API 函数。Service ID 范围为 0x00-0x32(部分为 0x60+)。所有函数均以 C 函数或宏形式提供。

8.4.1 GetApplicationID

[SWS_Os_00500]

Service nameGetApplicationID
SyntaxApplicationType GetApplicationID(void)
Service ID [hex]0x00
Sync/Async:Synchronous
Reentrancy:Reentrant
Parameters (in):None
Return valueApplicationType — 当前运行 OS-Application 的 ID
Description:返回当前正在运行的 OS-Application 的 ID。SC3/SC4 中可用。
Available viaOs.h

⌋(SRS_Os_00030)

8.4.2 GetCurrentApplicationID

[SWS_Os_00519]

Service nameGetCurrentApplicationID
SyntaxApplicationType GetCurrentApplicationID(void)
Service ID [hex]0x01
Sync/Async:Synchronous
Reentrancy:Reentrant
Return valueApplicationType — 拥有当前任务/ISR 的 OS-Application 的 ID
Description:返回拥有当前正在运行任务/ISR 的 OS-Application 的 ID。可从 Cat2 ISR 中调用。SC3/SC4 中可用。

8.4.3 GetISRID

[SWS_Os_00520]

Service nameGetISRID
SyntaxISRType GetISRID(void)
Service ID [hex]0x02
Sync/Async:Synchronous
Reentrancy:Reentrant
Return valueISRType — 当前正在执行 ISR 的 ID;若非 ISR 上下文,返回 INVALID_ISR
Description:返回当前正在执行 Cat2 ISR 的 ID。

8.4.4 Counter 函数(节选)

主要计数器函数(Service ID 0x04-0x11):

OS-Application API(SC3/SC4):

中断源 API:

外设访问 API:

多核 API:

标准 OSEK OS API(SC1-SC4):

IOC API(由 IOC 生成器自动生成,<IocId> 为配置标识符):

IOC 错误码:IOC_E_OKIOC_E_NOKIOC_E_LIMITIOC_E_LOST_DATAIOC_E_NO_DATA

SWFRT API:

8.5 回调通知

回调用途调用时机
StartupHook()OS 启动后立即调用StartOS() 之后、调度开始之前
ShutdownHook(StatusType Error)OS 关闭前调用ShutdownOS() 之后、OS 真正关闭之前
ErrorHook(StatusType Error)每次 OS 服务返回错误时调用任何 OS API 返回 E_OS_* 错误时
ProtectionHook(StatusType Fatalerror)保护错误时调用检测到内存/时间/锁违规时
PreTaskHook()任务进入运行前调用任务上下文切换后
PostTaskHook()任务离开运行后调用任务上下文切换前

8.6 期望接口

本节列出 OS 模块所需的其他模块接口。

8.6.1 强制接口

无对其他模块的强制接口依赖。

8.6.2 可选接口

8.6.3 可配置接口

无。

9 序列图

原 OS 规范包含若干序列图,描绘了 OS 服务调用时各对象间的交互。典型序列包括:

由于序列图主要以图形表示,详细图像请参阅原 PDF 第 9 章。

10 配置规范

本章定义 OS 的配置参数及其到容器的分组。10.1 节描述基础规范,10.2 节规定容器结构与参数,10.3 节规定发布信息。

10.1 如何阅读本章

详情参阅 SWS_BSWGeneral 中"10.1 Introduction to configuration specification"章节。

10.2 容器与配置参数

OS 的配置由 Os 顶层容器管理,包含 OsAppModeOsApplicationOsTaskOsIsrOsCounterOsAlarmOsResourceOsScheduleTableOsSpinlockOsIoc 等子容器,以及它们的配置参数。

10.2.1 Os(顶层)

SWS Item: ECUC_Os_00001

Module NameOs
Post-Build Variant Supporttrue
Supported Config VariantsVARIANT-POST-BUILD, VARIANT-PRE-COMPILE

包含的容器:OsAppModeOsApplicationOsTaskOsIsrOsResourceOsCounterOsAlarmOsScheduleTableOsSpinlockOsIocOsAppMode 等。

10.2.2 OsAppMode

SWS Item: ECUC_Os_00080

Container NameOsAppMode
Description:应用模式集合。OS 启动时选择一个 AppMode(通过 StartOS(AppMode) 参数)。

配置参数:OsAppModeIdentifierECUC_Os_00081):模式标识符,类型 EcucIntegerParamDef,范围 0..255。

10.2.3 OsApplication

SWS Item: ECUC_Os_00706

Container NameOsApplication
Description:OS-Application 容器。包含任务、ISR、计数器、报警、调度表、IOC、内存保护等对象的引用。

配置参数:

10.2.4 OsTask

SWS Item: ECUC_Os_00707

Container NameOsTask
Description:OS 任务定义。任务为基本或扩展类型(见 §7.1.1)。

配置参数:

10.2.5 OsIsr

SWS Item: ECUC_Os_00708

Container NameOsIsr
Description:Category 2 ISR 定义(Category 1 ISR 在 MCAL 中实现,不在 OS 容器中)。

配置参数:

10.2.6 OsCounter

SWS Item: ECUC_Os_00709

Container NameOsCounter
Description:计数器定义。可为硬件计数器(由 GPT 驱动支持)或软件计数器(SWFRT)。

配置参数:

10.2.7 OsAlarm

SWS Item: ECUC_Os_00710

Container NameOsAlarm
Description:报警定义。报警绑定到计数器,到期时执行动作(激活任务、设置事件、调用回调、自增计数器)。

配置参数:

10.2.8 OsResource

SWS Item: ECUC_Os_00711

Container NameOsResource
Description:OS 资源定义。使用优先级天花板协议。

配置参数:

10.2.9 OsScheduleTable

SWS Item: ECUC_Os_00712

Container NameOsScheduleTable
Description:调度表定义。包含同步配置、持续时间、自动启动配置、到期点列表。

配置参数:

包含参数:OsScheduleTableAutostartTypeECUC_Os_00056,ABSOLUTE/RELATIVE/SYNCHRON)、OsScheduleTableStartValueECUC_Os_00057)、OsScheduleTableAppModeRefECUC_Os_00058)、OsScheduleTblExpPointOffsetECUC_Os_00062)、OsScheduleTableSetEventRefECUC_Os_00060)、OsScheduleTableSetEventTaskRefECUC_Os_00061)、OsScheduleTableActivateTaskRefECUC_Os_00067)等。

10.2.10 OsSpinlock

SWS Item: ECUC_Os_00713

Container NameOsSpinlock
Description:多核自旋锁定义。

配置参数:

10.2.11 OsIoc

SWS Item: ECUC_Os_00729

Container NameOsIoc
Description:OS-Application 间通信器(IOC)容器定义。

配置参数:

10.2.12 OsCore(多核)

SWS Item: ECUC_Os_00715

Container NameOsCore
Description:AUTOSAR OS 控制的核定义。

配置参数:

10.2.13 OsHook(钩子配置)

OS 钩子的启用配置:

10.2.14 OsMemoryProtection

内存保护相关配置(SC4):

10.2.15 OsTimingProtection

时间保护相关配置(SC4):

10.2.16 OsPeripheralArea(外设区域)

用于外设访问 API 的区域定义:

10.2.17 OsStackMonitoring

栈监控相关配置:

10.2.18 OsInterruptSource

中断源 API 配置:

10.2.19 OsStaticOverrunDetection

静态溢出检测(栈填充)配置:

10.3 发布信息

OS 发布的发布信息包括:

11 不适用的需求

[SWS_Os_00499] ⌈ 这些需求不适用于本规范。 ⌋

具体涉及 SRS_BSW_* 需求中适用于 AUTOSAR OS 但不由 OS 直接满足的若干项(详见原 PDF 第 264-276 页)。