当前位置: 首页 > news >正文

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 生成工具需执行离线检查

  • 避免资源跨核冲突、自旋锁死锁等运行时错误

http://www.dtcms.com/a/617779.html

相关文章:

  • 什么是 “信任模型” 和 “安全假设”?
  • 【秣厉科技】LabVIEW工具包——HIKRobot(海康机器人系列)
  • 网易UU远程全功能技术解构:游戏级性能突围与安全边界探析
  • 蓝桥杯第八届省赛单片机设计完全入门(零基础保姆级教程)
  • 搭建网站分类建立名词
  • 没有域名的网站wordpress占用资源
  • RPA+AI双剑合璧!小红书商品笔记自动发布,效率提升2000%[特殊字符]
  • 19.传输层协议UDP
  • linux服务-rsync+inotify文件同步-rsync
  • 机器学习之ravel()的作用
  • Wi-Fi 7路由器性能分析:从传输速率到多设备协同全面解析
  • 【Java手搓RAGFlow】-1- 环境准备
  • 审计部绩效考核关键指标与综合评估方法
  • Photoshop - Photoshop 工具栏(29)钢笔工具
  • 营销型网站策划方案大德通众包做网站怎么样
  • 使用 Web Workers 提升前端性能:让 JavaScript 不再阻塞 UI
  • HTTP与HTTPS深度解析:从明文传输到安全通信
  • 知识图谱与语言教育:AI如何重构小语种学习的基础设施
  • 在 Hadoop 生态使用 JuiceFS,并为Hive提供HDFS存储安装指南
  • Hive内置函数
  • 瑞丽航空公司官方网站网络推广的好处
  • [ROS2]启动文件格式
  • 实现链式结构二叉树--递归中的暴力美学(第13讲)
  • Mac 目录树结构与基础 Linux 指令指南
  • 【大模型面经】千问系列专题面经
  • 什么网站访问量前端开发入门培训
  • Vue 项目实战《尚医通》,获取当前账户就诊人信息并展示出来,笔记42
  • MYSQL的页
  • 企业架构:数字化转型时代业务与IT的战略连接器
  • 【解决】RESP.app GUI for Redis 连接不上redis服务器