AutoSar AP平台功能组并行运行原理

在 AUTOSAR Adaptive Platform(AP)中,同一个机器上可以同时运行多个功能组(Function Groups),即使是在单核CPU环境下。其调度机制与进程调度既相似又存在关键差异,具体实现如下:


功能组并行运行原理

graph TBOS[Linux/Adaptive OS] -->|调度| EM[执行管理EM]EM -->|进程控制| FG1[功能组A]EM -->|进程控制| FG2[功能组B]EM -->|进程控制| FG3[功能组C]subgraph FG1P1[进程1] -->|状态机| SM1[SM库]endsubgraph FG2P2[进程2] --> LT[LT库]endsubgraph FG3P3[进程3] -->|业务逻辑| Append

在这里插入图片描述

  • 功能组本质:逻辑进程集合(非物理隔离
  • 并行基础:多个功能组的进程可在同一OS中并发运行

单核CPU下的调度机制

1. 层级化调度架构
操作系统调度器
e.g. Linux CFS
执行管理调度层
功能组状态约束
进程启停控制
  • 第一层:OS调度器
    基于标准Linux调度策略(如CFS)分配CPU时间片给所有进程
  • 第二层:EM调度器
    执行管理(EM)通过功能组状态控制进程启停
2. 关键调度策略对比
维度传统进程调度AP功能组调度
调度单位进程/线程功能组状态约束下的进程
决策依据CPU优先级/时间片功能组状态 + 进程依赖关系
启停控制OS直接管理EM按FG状态启停进程
实时性保障依赖PREEMPT_RT补丁通过ARA::OSAL抽象层实现确定性响应
3. 单核调度流程示例
OS调度器执行管理(EM)功能组A功能组BP1P2检测FG状态变更事件激活Running状态激活Standby状态启动进程P1,P2停止进程P3分配时间片执行(20ms)执行(10ms)跳过P3(已停止)loop[每1ms调度周期]OS调度器执行管理(EM)功能组A功能组BP1P2

功能组状态对调度的核心影响

1. 状态驱动的进程启停
功能组状态进程控制规则单核CPU资源分配效果
Running启动所有关联进程进程参与OS时间片竞争
Standby仅保留监控进程仅占用≤2% CPU
Off终止所有进程释放100% CPU
2. 状态切换的调度影响
// EM内部状态处理伪代码
void HandleFGStateChange(FG_ID id, State new_state) {// 1. 停止不符合新状态的进程foreach (Process p in GetProcesses(id)) {if (!IsAllowedInState(p, new_state)) {StopProcess(p);  // 发送SIGTERM}}// 2. 启动需要运行的进程foreach (Process p in GetStartList(id, new_state)) {if (!IsRunning(p)) StartProcess(p); // 通过fork/exec}// 3. 更新进程调度参数ApplySchedulingPolicy(id, new_state); // 调整优先级/亲和性
}

单核环境下的优化技术

1. 进程优先级分层

在这里插入图片描述

  • 通过 sched_setscheduler() 设置 SCHED_FIFO 优先级
  • 示例:
    PHM监控进程 > 刹车控制进程 > 信息娱乐进程
2. 状态感知的CPU节流
# EM的CPU调控逻辑
def adjust_cpu_usage(current_state):if current_state == "Emergency":set_cpu_boost(True)  # 关闭节能模式elif current_state == "Standby":set_cpu_freq(600MHz) # 降频节电
3. 进程组调度(Cgroups)
# 为每个功能组创建cgroup
cgcreate -g cpu:/FG_Powertrain
echo 200000 > /sys/fs/cgroup/FG_Powertrain/cpu.rt_period_us
echo 50000 > /sys/fs/cgroup/FG_Powertrain/cpu.rt_runtime_us

与进程调度的本质区别

特性传统进程调度AP功能组调度
控制目标最大化CPU利用率满足功能组状态约束
启停时机进程主动创建/退出EM按FG状态强制启停
依赖管理无内置依赖解析跨进程依赖图处理
实时性保障依赖OS实时扩展通过ARA::OSAL抽象硬实时

📌 关键结论
功能组调度是在进程调度之上添加的状态感知层,通过EM作为“智能调度中介”,将功能组状态语义转化为具体的进程启停和资源分配策略。


典型单核调度场景:车辆启动过程

gantttitle 单核CPU时间线(单位:ms)dateFormat  XaxisFormat %Lsection 功能组状态Bootloader : 0, 50EM启动 : 50, 80PowerTrain_Running : 80, 200Cockpit_Standby : 100, 200section 进程CPU占用内核初始化 : 0, 50EM进程 : 50, 200EngineCtrl进程 : 80, 200 : 30%DisplayCtrl进程 : 100, 120 : 5% (启动后休眠)

在这里插入图片描述

  1. 0-50ms:Bootloader运行(独占CPU)
  2. 50ms:EM启动,检测FG状态
  3. 80ms:激活PowerTrain组Running状态 → 启动引擎控制进程(占30% CPU)
  4. 100ms:激活Cockpit组Standby状态 → 短暂启动显示进程后休眠

此时单核CPU总利用率:
EM(15%) + EngineCtrl(30%) + DisplayCtrl(5%) = 50%
剩余50% CPU用于其他后台任务


总结

  1. 功能组可并行运行:通过进程并发实现,与CPU核心数无关
  2. 单核调度本质
    • OS层:标准Linux调度器分配时间片
    • EM层:按功能组状态启停进程 + 调整调度参数
  3. 关键优势
    • 状态驱动调度:Running状态进程获资源,Standby状态进程休眠
    • 安全隔离:关键进程可设置高优先级(SCHED_FIFO)
    • 资源优化:通过状态切换动态调节CPU占用

最终实现效果:即使在单核ARM Cortex-A53(800MHz)上,AP平台也能同时管理10+功能组,确保刹车控制(50Hz实时任务)与导航系统(非实时任务)协同运行,满足ASIL-B安全要求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95614.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux服务器查看某个服务启动,运行的时间

一 查看服务启动运行时间1.1 查看启动时间查看启动时间&#xff08;精确到秒&#xff09;&#xff1a;ps -p <PID> -o lstart例子如下&#xff1a;ps -p 1234 -o lstart1.2 查询运行时长ps -p <PID> -o etimeps -p 1234 -o etime1.3 总结

【JS 性能】前端性能优化基石:深入理解防抖(Debounce)与节流(Throttle)

【JS 性能】前端性能优化基石&#xff1a;深入理解防抖&#xff08;Debounce&#xff09;与节流&#xff08;Throttle&#xff09; 所属专栏&#xff1a; 《前端小技巧集合&#xff1a;让你的代码更优雅高效》 上一篇&#xff1a; 【JS 语法】代码整洁之道&#xff1a;解构赋值…

线性代数 · 直观理解矩阵 | 空间变换 / 特征值 / 特征向量

注&#xff1a;本文为 “线性代数 直观理解矩阵” 相关合辑。 英文引文&#xff0c;机翻未校。 如有内容异常&#xff0c;请看原文。 Understanding matrices intuitively, part 1 直观理解矩阵&#xff08;第一部分&#xff09; 333 March 201120112011 William Gould Intr…

设计模式基础概念(行为模式):策略模式

概述 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 主要目的是通过定义相似的算法&#xff0c;替换if else 语句写法&#xff0c;并且可以随时相互替换 结构示例 策略…

功能组和功能组状态的概念关系和区别

在 AUTOSAR Adaptive Platform 中&#xff0c;功能组&#xff08;Function Group&#xff0c;FG&#xff09; 和 功能组状态&#xff08;Function Group State&#xff09; 是状态管理&#xff08;SM&#xff09;的核心概念&#xff0c;二者构成静态逻辑单元与动态行为模式的协…

力扣326:3的幂

力扣326:3的幂题目思路代码题目 给定一个整数&#xff0c;写一个函数来判断它是否是 3 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 整数 n 是 3 的幂次方需满足&#xff1a;存在整数 x 使得 n 3^x 思路 想要是三的幂次方的话将这个…

前瞻性技术驱动,枫清科技助力制造企业借助大模型完成生产力转化

麦肯锡于近期发布的《技术趋势展望2025》更清晰地定义了AI的角色与发展方向。报告在不止一个章节总结了基础模型加速小型化的趋势&#xff0c;多模态融合成为主流&#xff1a;企业的模型利用从追求“大而全”转向“小而精”&#xff0c;高效专用小模型成本降低90%的同时保持性能…

如何远程连接云服务器上mysql

一&#xff1a;使用系统命令查看端口占用# 查看MySQL进程及其端口sudo netstat -tlnp | grep mysql# 或者使用ss命令sudo ss -tlnp | grep mysql# 查看3306端口&#xff08;MySQL默认端口&#xff09;sudo netstat -tlnp | grep 3306出现如下信息&#xff0c;说明端口3306[root…

今日分享:C++模板(全详解)

&#x1f60e;【博客主页&#xff1a;你最爱的小傻瓜】&#x1f60e; &#x1f914;【本文内容&#xff1a;C模板 &#x1f60d; 】&#x1f914; -------------------------------------------------------------------------------------------------------------------…

ramdisk内存虚拟盘(一)——前世今生

1990 年代&#xff1a;前因——“硬盘太慢、驱动太多” 背景&#xff1a;早期 Linux 根文件系统要么在软盘、要么在 IDE 硬盘&#xff0c;内核把对应的软盘/IDE 驱动编进去即可顺利挂载。矛盾出现&#xff1a;随着 SCSI、PCMCIA、USB、RAID 控制器等百花齐放&#xff0c;如果把…

ETH持续上涨推动DEX热潮,交易活跃度飙升的XBIT表现强势出圈

BOSS Wallet 8月15日讯&#xff0c;随着ETH价格在过去24小时内强势拉升至4300美元&#xff0c;整个加密市场再度掀起涨势狂潮&#xff0c;链上交易活跃度空前高涨。其中&#xff0c;去中心化交易所平台迅速成为市场焦点&#xff0c;其平台活跃度与交易量双双上涨&#xff0c;吸…

Stand-In - 轻量级人物一致性视频生成 高保真视频人脸交换 ComfyUI工作流 支持50系显卡 一键整合包下载

Stand-In 是一个轻量级、即插即用的身份保护视频生成框架&#xff0c;只需要上传一张人物照片&#xff0c;加上一段提示词&#xff0c;即可生成高度一致性的高保真人物视频&#xff0c;人脸相似度和自然都几乎达到100%还原水平。 Stand-In 能把任何一张人脸&#xff08;甚至动漫…

vue3相关基础

1、ref和reactive的区别两者都是响应式数据的声明。Reactive只适用于非基本数据类型&#xff0c;如对象&#xff0c;数组等。而ref是兼容适用于reactive的的数据类型的以及其他数据&#xff0c;灵活性较高。ref声明的变量取值时需要.value。在<template></template>…

云手机存储和本地存储的区别

云手机存储通常指云存储&#xff0c;即数据存储在云端服务器&#xff0c;本地存储则是将数据存储在用户设备硬件中&#xff0c;主要区别体现在存储位置、访问方式、依赖条件等多个方面&#xff0c;具体如下&#xff1a;本地存储主要是将数据存储在用户自有设备的物理硬件中&…

【科研绘图系列】R语言绘制三维曲线图

文章目录 介绍 加载R包 数据下载 导入数据 数据预处理 画图 系统信息 参考 介绍 【科研绘图系列】R语言绘制三维曲线图 加载R包 library(tidyverse) library(ggsignif) library(RColorBrewer) library(dplyr) library(reshape2) library(grid

python常用包

以下按类别列举10个常用Python包&#xff0c;并以一句话概括其核心作用&#xff1a; 一、数据分析与科学计算 NumPy&#xff1a;提供高性能多维数组及数学运算&#xff0c;是数值计算的基础库。Pandas&#xff1a;通过DataFrame结构实现高效表格数据清洗、分析与处理。SciPy&am…

“ 船新版本 ”

在 GeeLark 最新版本中&#xff0c;增强了 AIGC 生成能力以及 AI 协助自定义任务开发功能&#xff0c;给用户优化构建从内容生产到运营自动化的完整技术链&#xff0c;为跨境电商及企业用户提供更完善的智能化解决方案&#xff0c;效率翻倍轻松出海。 AIGC 接入 MiniMax-Hailuo…

力扣 —— 二分查找

搜索插入位置 35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 算法思想&#xff1a; class Solution(object):def searchInsert(self, nums, target):left0 rightlen(nums)-1while left < right :mid (left right) // 2if nums[mid] < target:left mid 1…

USB ADB 简介

概念 ADB 是 Android 平台的 调试桥接协议&#xff0c;允许主机&#xff08;PC&#xff09;与 Android 设备通信。 通过 ADB&#xff0c;开发者可以执行命令、调试应用、传输文件、访问 shell、调试 logcat 等。 ADB 运行在 USB 或 TCP/IP 上&#xff0c;但最常用的是 USB 连…

【Golang】:数据类型

目录 1. 基本数据类型 1.1 布尔类型 1.2 整数类型 1.3 浮点数类型 1.4 复数类型 1.5 字符类型 1.6 字符串类型 2. 类型转换 2.1 基本数据类型 → string 2.2 string → 基本数据类型 3. 常量 1. 基本数据类型 1.1 布尔类型 Go中的布尔类型取值为true或false&#…