AUTOSAR_CP_OS-Operating System for Multi-Core:多核操作系统
Operating System for Multi-Core:多核操作系统

概述
AUTOSAR 多核 OS 是在单核 AUTOSAR OS 基础上的扩展
核心目标是支持多核心并行执行
同时保持与单核 OS 的兼容性
设计原则包括:
-
共享配置,独立数据
-
所有核心使用同一套静态配置
- 确保 ID 跨核唯一
-
但每个核心维护独立的运行时数据结构
- 如任务控制块、调度器状态
-
-
代码复用
-
优先共享代码 base
- 减少内存占用
-
仅对核心特定逻辑(如中断控制器访问)进行本地化实现
-
-
静态绑定
-
OS 应用(含任务、ISR)在配置时静态绑定到特定核心
-
运行时不可动态迁移
-
-
独立调度
-
每个核心独立执行调度算法,核心间调度无直接关联
-
低优先级核心的任务可与高优先级核心的任务并行
-
多核 OS 新增关键机制
-
自旋锁(Spinlock)
- 跨核互斥
-
IOC(Inter OS-Application Communicator)
- 跨核 / 跨应用通信
-
主从启动同步
- 确保多核心初始化一致性
背景与原理
多核 OS 与单核 OS 的核心差异
-
架构定位
-
非 “虚拟 ECU”,而是 “单配置多实例”
-
所有核心共享同一套 OS 配置
- 如任务 ID、资源 ID 跨核唯一
-
但每个核心运行独立的 OS 实例
- 含调度器、中断控制器接口
-
-
代码部署
-
默认共享代码段
- 如 OS 内核代码
-
可按需将高频访问代码(如核心本地中断处理)部署到各核心本地存储(提升性能)
-
-
故障隔离
-
通过 “OS 应用 - 核心绑定” 实现故障隔离
-
某核心的 OS 应用故障(如内存违规)不直接影响其他核心(除非跨核资源依赖)
-
设计约束
-
ID 唯一性
-
SWS_Os_00567
-
所有 OS 对象(任务、资源、闹钟)的 ID 跨核唯一
-
无论该对象是否支持跨核访问
-
-
-
静态绑定
-
SWS_Os_00570/00571
- 同一 OS 应用的所有任务、ISR 必须绑定到同一核心,不可跨核分布
-
-
无动态核心激活
-
SWS_Os_00606
-
核心激活(StartCore)的调用约束
-
必须在调用 StartOS 前完成
-
仅已激活且尚未调用 StartOS 的核心可调用 StartCore
-
StartOS 后调用 StartCore 返回 E_OS_ACCESS
-
-
多核 OS 架构概览

调度
(Scheduling)
调度原则
-
独立调度
-
SWS_Os_00569
-
每个核心独立执行优先级调度,核心间无调度协同
-
如核心 0 的低优先级任务 T0 与核心 1 的高优先级任务 T2 可并行执行
-
-
-
优先级本地生效
-
任务优先级仅在其绑定的核心内生效
-
不同核心的同优先级任务无竞争关系
-
-
无动态任务迁移
-
任务的核心绑定在配置时确定
-
运行时不可通过调度算法迁移到其他核心
-
调度行为示例
-
假设有 3 个核心
-
核心 0 绑定高优先级任务 T2(优先级 5)
-
核心 1 绑定中优先级任务 T5(优先级 4)
-
核心 2 绑定低优先级任务 T8(优先级 3)
-
-
调度行为如下:
-
核心 0 仅调度 T2 及本地低优先级任务,不受其他核心任务状态影响
-
若核心 0 的 T2 处于 WAITING 状态,核心 0 调度本地次高优先级任务
- 如 T6,优先级 2
-
核心间任务无抢占关系
- 核心 1 的 T5 不会被核心 0 的 T2 抢占
-

可定位实体
(Locatable Entities, LE)
定义与作用
-
可定位实体
-
指必须完全部署在单个核心上的软件单元,其功能不受部署核心影响
-
AUTOSAR 多核系统中(当前版本),OS 应用是唯一的 LE
- 未来版本可能扩展其他类型的 LE
-
-
核心绑定依据
-
SWS_Os_00573
-
OS 应用的核心绑定通过 OsAppEcucPartitionRef 配置
-
引用的 EcucPartition 定义了核心归属
-
OS 生成工具自动将 OS 应用映射到对应核心
-
-
-
单 / 多核 OS 应用差异
-
单核系统
-
OS 应用仅在 SC3/SC4 支持
- 用于内存保护
-
-
多核系统
-
OS 应用强制支持(无论 SC 等级)
-
即使不启用内存保护,也需通过 OS 应用实现 “任务 - 核心绑定”
-
-
关键约束
-
无跨 LE 资源共享
-
OS 应用(LE)的资源(如任务栈、私有数据)仅本核心可访问
-
跨核心访问需通过 IOC 或共享内存
-
-
SC 等级适配
-
SWS_Os_00764
-
多核系统中,SC1/SC2 也支持 OS 应用
-
且 SC1 支持标准模式
- 无需扩展状态
-
-
多核启动概念
(Multi-Core Start-up Concept)
启动模式:主从架构
-
AUTOSAR 多核启动强制采用主从模式
- 硬件不支持则通过软件模拟
-
主核:
-
硬件上电后自动启动的核心
-
负责初始化共享资源(如共享 RAM)、激活从核
-
-
从核:
-
需通过主核 / 其他已激活从核调用 StartCore 激活
-
激活后执行硬件初始化,再调用 StartOS
-
启动流程与同步点
-
StartOS 是多核启动的核心同步机制
-
同步点 1:
-
StartOS 调用后,执行全局 StartupHook 前
-
所有核心需在此处同步,确保共享资源初始化完成
-
-
同步点 2:
-
全局 StartupHook 执行后,调度器启动前
-
确保所有核心的 OS 应用初始化完成
-
核心激活 API(StartCore)
-
功能:
-
激活指定核心,返回激活状态
-
E_OK= 成功
-
E_OS_ID= 核心无效
-
E_OS_STATE= 核心已激活
-
-
-
调用约束:
-
仅可在 StartOS 前调用
-
StartOS 后调用返回 E_OS_ACCESS
-
-
从核初始化:
-
从核激活后,先执行编译器 / 硬件特定初始化(如设置栈指针)
-
再进入 main 函数,通过 GetCoreID 区分核心身份
-
多核启动流程
核心控制
(Cores under control of the AUTOSAR OS)
核心数量配置
-
静态配置
-
SWS_Os_00583
-
通过 OsNumberOfCores 配置 OS 可控制的最大核心数(默认 1)
-
配置值需小于等于硬件实际核心数
-
-
-
核心 ID 规则
-
SWS_Os_00825
-
逻辑核心 ID(CoreIdType)为 0 开始的连续整数
-
OS_CORE_ID_MASTER 指向主核(通常为 ID=0)
-
-
核心状态查询
-
API GetCoreID
-
返回当前执行核心的逻辑 ID(CoreIdType)
-
可在 StartOS 前调用(用于核心初始化分支)
-
-
API GetNumberOfActivatedCores
-
返回已激活且调用 StartOS 的核心数量
-
仅支持在任务 / Category 2 ISR 中调用
-
多核关闭概念
(Multi-Core Shutdown Concept)
AUTOSAR 多核支持两种关闭方式
同步关闭(ShutdownAllCores)
-
触发场景
-
需关闭所有核心的严重故障
-
如共享内存损坏、全局时钟故障
-
-
流程
-
①
-
调用者(仅可信应用)调用 ShutdownAllCores(Error)
-
OS 向所有核心发送关闭信号
-
若某核心已进入关闭流程
-
OS 需等待其完成关闭步骤(含本地 OS 应用 ShutdownHook)
-
-
-
②
- 各核心执行本地 OS 应用的 ShutdownHook
-
③
-
所有核心同步后,执行全局 ShutdownHook
- 参考SWS_Os_00587
-
-
④
- 所有核心禁用中断,进入死循环(不返回)
-
-
约束
-
SWS_Os_00716
- 非可信应用调用 ShutdownAllCores 会被忽略
-
SWS_Os_00587
-
全局 ShutdownHook 前必须完成所有核心同步
-
含等待已关闭核心
-
-
独立关闭(ShutdownOS)
-
触发场景
-
仅需关闭单个核心的故障
-
如核心本地任务死锁
-
-
流程
-
调用 ShutdownOS(Error) 仅关闭当前核心
-
执行该核心的 ShutdownHook、禁用中断、进入死循环
-
-
注意
-
AUTOSAR R4.x 不推荐使用(模式管理不支持)
-
需手动确保其他核心无依赖该核心的资源
-
同步关闭流程

多核服务功能
(OS Service Functionality)
服务分类与跨核支持
-
跨核支持
-
示例
- ActivateTask
-
跨核支持情况
-
支持调用其他核心的任务(需权限)
-
同步返回结果
-
-
错误码(跨核不支持时)
-
-
-
核心本地
-
示例
- DisableAllInterrupts
-
跨核支持情况
- 仅影响调用核心,不影响其他核心
-
错误码(跨核不支持时)
- E_OS_CORE
-
-
新增多核服务
-
示例
- GetSpinlock
-
跨核支持情况
- 跨核互斥,支持所有激活核心调用
-
错误码(跨核不支持时)
-
-
关键服务扩展说明
-
跨核任务激活(ActivateTask)
-
同步性:
-
SWS_Os_00598
-
跨核调用 ActivateTask 为同步操作
-
用者需等待目标核心完成任务激活(或返回错误)后才能继续
-
-
-
错误处理:
-
SWS_Os_00599
- 跨核激活错误(如目标核心未启动)由调用核心的 ErrorHook 处理,而非目标核心
-
-
异步版本
-
SWS_Os_00816
-
提供 ActivateTaskAsyn
-
无返回值,错误仅通过全局 ErrorHook 报告
-
-
-
-
自旋锁服务(GetSpinlock/ReleaseSpinlock)
-
作用
-
跨核互斥(替代单核的 GetResource)
-
用于保护跨核共享资源
- 如共享 RAM 中的数据
-
-
特性
-
忙等机制
-
获取不到自旋锁时
-
调用者循环查询(不阻塞调度)
- 适合短时间持有锁场景(如共享数据读写)
-
-
无优先级反转防护
-
需用户确保持有自旋锁的任务优先级足够高
-
避免低优先级任务持有锁导致高优先级任务忙等
-
-
嵌套约束与死锁检测
-
SWS_Os_00660
-
需配置自旋锁嵌套顺序(OsSpinlockSuccessor)
- 定义唯一嵌套链
-
违反顺序返回 E_OS_NESTING_DEADLOCK
-
-
SWS_Os_00661
-
OS 会主动检测核心内自旋锁嵌套死锁
- 如违反配置顺序获取锁
-
触发时返回 E_OS_NESTING_DEADLOCK
-
-
-
-
-
可信函数调用(CallTrustedFunction)
-
跨核限制
-
SWS_Os_00623
-
仅支持调用同一核心的可信函数
-
跨核调用返回 E_OS_ACCESS
-
-
-
模式切换
- 调用时 OS 自动从非特权模式切换到特权模式(若硬件支持),执行完成后切回
-
中断禁用
(Interrupt Disabling)
核心本地生效
-
SWS_Os_00590-00595
- 所有中断禁用服务(DisableAllInterrupts /SuspendOSInterrupts 等)仅影响调用核心,其他核心的中断状态不变
-
示例
-
核心 0 调用 DisableAllInterrupts 后
-
核心 1 的中断仍正常响应,核心 0 的中断被禁用
-
自旋锁机制
(The Spinlock Mechanism)
核心作用与原理
-
自旋锁是跨核互斥的唯一机制,用于保护跨核共享资源
- 如多核间传递的数据缓冲区
-
原理:
-
基于原子操作(Test-And-Set)实现 “锁占用检查 - 占用” 的原子性
-
忙等特性:
-
获取不到锁时,调用者持续循环查询(不释放 CPU)
-
适合短时间持有锁的场景
- 如共享数据读写
-
-
关键约束与需求
-
无跨核资源冲突
-
SWS_Os_00658/00659
-
禁止同一核心的任务 / ISR 占用本核心其他任务 / ISR 已持有的自旋锁
-
避免核心内死锁
-
-
-
死锁避免
-
SWS_Os_00660/00661
-
需配置自旋锁的唯一嵌套顺序(如 S1→S2→S3)
-
违反顺序返回 E_OS_NESTING_DEADLOCK
-
-
-
释放规则
-
SWS_Os_00801
-
自旋锁与资源需按 LIFO 顺序释放
-
违反返回 E_OS_NOFUNC
-
-
自旋锁 vs 单核资源(Resource)
-
自旋锁(Spinlock)
-
适用场景
- 跨核共享资源
-
实现机制
- 原子操作 + 忙等
-
优先级反转防护
- 无(需用户保证)
-
核心内嵌套
- 支持(需配置顺序)
-
-
单核资源(Resource)
-
适用场景
- 单核内任务共享资源
-
实现机制
- 优先级天花板协议
-
优先级反转防护
- 有(提升持有资源任务优先级)
-
核心内嵌套
- 支持
-
自旋锁嵌套顺序与死锁避免

离线检查
(Offline Checks)
资源跨核检查
-
SWS_Os_00662
-
禁止资源被绑定到不同核心的任务 / ISR 引用
-
资源仅支持单核内共享
-
计数器跨核检查
-
SWS_Os_00663/00664
- 禁止闹钟、调度表引用其他核心的计数器
自旋锁链表检查
-
SWS_Os_00666
-
检查自旋锁嵌套顺序链表无循环
-
如 S1→S2→S1 为非法
-
核心存在性检查
-
SWS_Os_00667
-
检查 OS 应用绑定的核心是否存在
-
如配置核心 3 但硬件仅 2 个核心
-
自动启动对象
(Auto Start Objects)
多核系统中,自动启动对象(任务、闹钟、调度表)的激活规则:
核心绑定激活
-
SWS_Os_00668-00670
-
自动启动对象仅在其绑定的核心上激活
-
其他核心不参与
-
激活顺序
-
与单核一致
-
先激活任务,再激活闹钟,最后激活调度表
示例:
-
绑定到核心 1 的自动启动任务 T2
-
仅在核心 1 调用 StartOS 后激活
-
核心 0/2 不激活 T2
总结
AUTOSAR 多核 OS 的核心是
-
共享配置
-
独立执行
-
静态绑定
-
跨核互斥
架构层面
-
非虚拟 ECU,而是多核心共享配置、独立运行 OS 实例
-
通过 OS 应用 - 核心绑定实现故障隔离
启动 / 关闭
-
主从启动模式 +StartOS 双同步点确保一致性
-
同步关闭(ShutdownAllCores)支持全局故障处理
调度与互斥
-
各核心独立调度,自旋锁实现跨核互斥
-
需配置嵌套顺序避免死锁
服务扩展
-
核心服务分跨核支持 / 本地两类
-
跨核任务激活同步返回,中断禁用仅本地生效
配置检查
-
OS 生成工具需执行离线检查
-
避免资源跨核冲突、自旋锁死锁等运行时错误


