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

Autosar-Os是怎么运行的?(多核系统运行)

写在前面:
入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!!


目录 

1.Autosar多核操作系统

1.1多核启动过程

1.2多核运行过程

1.2.1核间任务同步

1.2.2Counter/Alarm等

1.2.3SpinLock

1.2.4核间通讯IOC

1.3多核关闭


 书接上文

​​​​​​Autosar-Os是怎么运行的?(二)-CSDN博客

1.Autosar多核操作系统

AUTOSAR多核操作系统采用分区机制,多核处理器的每个核中至少分配一个OS应用(OS Application)。每个OS应用均包含任务、中断服务、计数器、报警、调度表等相关要素,统称为操作系统的对象(OS Object)。同样的每个Core都要有一个EcucCore,OsCore,EcucPartition.

1.1多核启动过程

在AUTOSAR软件架构下,无论是单核操作系统还是多核操作系统,都与EcuM(ECUState Management)和 BswM(BSW Mode Management)两个管理模块息息相关,它们控制着操作系统启动、初始化、运行、关闭等状态及其过程。AUTOSAR操作系统的启动与关闭的过程如下图所示。

由下图知,ECU工作在启动(STARTUP)、正常运行(UP)、睡眠(SLEEP)和关闭(SHUTDOWN)四个状态。

ECU在上电前处于SHUTDOWN状态,上电后进入STARTUP 阶段,它包含 StarPreOS 和 StartPostOS 两个阶段,StartPreOS 阶段对 ECU 进行一些准备工作以初始化 OS,
其主要动作如下:

  • 设置可编程中断的优先级
  • EcuM_AL_DriverInitZero 对没有配置后期编译(Post-build)参数的 BSW 模块进行初始化,该部分代码为手工添加;
  • 调用函数 EcuM_DeterminePbConfiguration(),返回指向 Post-build 数据的指针;
  • 检查数据配置的一致性,若出现错误,则调用 EcuM_ErrorHook
  • EcuM_AL_DriverInitOne 初始化 Mcu, IO, GPT, Watchdog 等模块
  • 获知复位原因
  • 选择默认的 Shutdown 对象
  • 调用EcuM-LoopDetection,检查ECU是否被循环复位;启动 OS。

 StartPostOS 阶段就是 OS 启动后的阶段,该阶段主要执行初始化 BSW 的调度器和初始化 BswM模块两个动作。综上所述,启动阶段的流程如下图所示。

如上图所示,ECU上电后首先执行微控制器的启动引导程序(BootMenu),然后执行Cinit,对栈进行分配,之后,EcuM接管控制权,执行StartPreOS,在该阶段,EcuM执行Callout代码段,启动OS,此时,OS接管控制权,执行OS启动及其回调函数,启动OS需要自动启动的任务,通常为初始化任务,调用EcuM_StartupTwo();EcuM重新接管控制权,执行 StartPostOS完成 ECU 和 OS 的启动OS 中的其他任务被允许执行。ECU的控制权被转移至 BswM。无论是否存在OS,多核的启动和硬件紧密相关,通常情况下,硬件会启动一个核作为主核(Master Core),而从核(Slave Core)由软件启动,这种方式被称为主从模式(Master-SlaveStartup Behavior)。 AUTOSAR规范定义了多核OS的启动为主从模式。多核OS的具体启动流程如下图所示。

在多核启动过程中,通常MasterCore先启动,在Core配置时,MasterCore应该被配置为Autostart。

在调用StartOs时,执行如下逻辑:

  • Core0完成前期的硬件初始化之后启动从核,并随后调用StartOs函数来启动OS,OS完成初始化之后在第一个同步点等待所有从核OS启动
  • 从核被Core0启动后,首先完成硬件相关的初始化,并在第一个同步点等待其他Core的OS启动
  • 在完成第一个同步点后,主从核分别执行StartUp Hook函数之后在第二个同步点进行同步,然后所有Core的Kernel将一起运行。(当非Autosar Os需要运行时,调用StartNonAutosarCore启动)

1.2多核运行过程

多核OS调度相比单核OS调度而言并没有什么区别,都是根据任务或者中断的优先级作为首要因素来决定调度顺序。在同一处理器内核上,优先级越高的任务或者中断优先调度。如果优先级相同,那么就根据激活顺序进行调度。

AUTOSAR多核操作系统的任务调度示意如下图所示。根据调度规则,若有多个任务同时被调用,即同时处于就绪状态,则优先级最高的任务率先进入运行状态,如图中内核0中的任务T2,内核1中的任务T3和内核2中的任务T5,三个任务同时进入运行状态。各个内核上的任务独立运行,其优先级没有相互影响。

1.2.1核间任务同步

在多核 AUTOSAR OS中,事件是可以跨核触发的。这也就意味着,核与核之间的同步可以通过事件触发的形式来实现。

如下图所示,当Core0 中任务 R1 执行时,可以通过setEvent来激活位于Core 1 中的R2,这个Event可以是变量的写入、读取或者任务执行结束等,使R2可以获得运行的权力,如果Corel中的任务调度允©许,则R2可以获得CPU的执行权力。通过这种方式,可以实现Core0 和 Corel 的任务同步机制。这种方法适用于事件触发的任务或者定期执行的任务的同步。定期执行的任务只需使用Alarm或调度表定期触发Event即可。(事件触发),在IOC通讯中比较常用。

采用任务调度表实现任务同步可以同时触发不同Core的多个任务,这种方法只适用于定期执行的任务之间的同步。

1.2.2Counter/Alarm等

AUTOSAR 多核操作系统中,以系统组件中的计数器(Counter)作为任务调度的时间基准,同时,计数器本身也以硬件平台上的时钟(Timer)配置为时间基准,即计数器的参数配置与搭载系统的硬件平台也密切相关。根据上文所述,计数器作为一个应用程序的系统组件之一,是专属于一个内核的,即不同内核上的计数器无法作为不同内核中任务调度的基准。

 AUTOSAR操作系统中的任务调度是通过报警器(Alarm)或调度表(Schedule Table)实现的。一般情况下,报警器和调度表均是根据同一内核上的相应计数器触发,特殊情况下,也可以被其他核上的应用程序所调用如可以在内核0上调用AUTOSAR标准函数SetRealAlarm来设定内核1中报警器的偏移量等。计数器、报警器和调度表三者配合工作形成了AUTOSAR操作系统任务调度机制,如下图所示。

1.2.3SpinLock

AUTOSAR多核操作系统为实现核间资源互斥,保证数据一致性,设计了自旋锁(Spinlock)机制,该机制不适用于实现核内资源互斥。核内资源使用Resources.当某个任务或二类中断成功申请占用自旋锁时,其他内核上的所有任务和二类中断均无法成功申请占用自旋锁,并会处在停滞状态,等待自旋锁占用者将其释放。此时,其他内核仍然处在工作状态,CPU负载率不会下降。因此,对于自旋锁的使用应当谨慎,执行时间较长的任务不宜申请占用自旋锁,以防止对于其他内核的资源浪费。若对自旋锁的使用比较复杂,还可能导致不合理的死锁状态。根据上述现象,处理器内核之间的通信或共用数据应尽可能减少,耦合性较强的任务应被分配至同一核中。如下图所示,一旦低优先级的任务在占用自旋锁的情况下被高优先级任务抢占,如果高优先级任务也需要申请占用同一个自旋锁,根据自旋锁机制的设定,其必须等待低优先级任务将其释放。而根据AUTOSAR操作系统任务调度机制,高优先级任务在运行过程中不可能被低优先级任务打断。故此时内核0陷入了死锁状态。AUTOSAR操作系统为了防止上述情况发生,在任何任务或中断占用自旋锁时,操作系统会自动挂起所有中断,即某任务成功申请自旋锁占用之后,不会被同一内核上的任何任务或中断抢占。

如下图所示,内核0上的某任务在运行过程中,需要先申请占用自旋锁A,再申请占用自旋锁B;同时,在内核1上的某任务,运行过程中需要先申请占用自旋锁B,再申请占用自旋锁A.如果两个任务在相近的时刻开始运行,则很有可能发生自旋锁A被内核0上的任务占用,自旋锁B被内核 1 上的任务占用,此时,两个内核上的任务相互锁死,即自旋锁的嵌套调用导致的死锁。

为了防止该现象的发生,需要相关技术人员在进行系统设计时,禁用嵌套使用自旋锁的请求或者严格按照顺序嵌套自旋锁的方式进行请求。顺序地访问自旋锁不会造成死锁,而形成回环访问时,会产生死锁现象。根据上述规则,在进行系统设计时,任务对自旋锁的申请占用应尽量避免嵌套和回环,以避免造成可能的死锁现象。

1.2.4核间通讯IOC

AUTOSAR 规范定义了包括核内通信、核间通信和外部通信在内的三种类型的通信方式,其中前二者统称为内部通信。每当不同内核中的应用程序需要进行数据传输时,操作系统会为其开辟共享的内存Cache区域,通信双方的应用程序通过对该区域的读写,完成数据的传输。但Cache区域的数据有可能在被读的过程中发生更新,导致数据的不一致性。

为了解决上述问题,AUTOSAR多核操作系统提供了应用于核间通信的IOC(Inter OSApplication Communication)方式。IOC不同于核内通信,核内通信是在运行时环境层完成,而IOC是在操作系统中完成的,如下图所示。应用程序在对上述共享Cache区域进行读写时,会申请占用一个自旋锁,以防止其他内核上的应用程序同时访问。由于通常情况下IOC不涉及自旋锁的多次调用,故在本书的研究中,可以采用 Vector MicroSAR 提供的迷你自旋锁(Minilock)机制。迷你自旋锁的功能与自旋锁一致,只是占用的系统资源更少,执行时间比自旋锁更短,且配置更容易,有利于减少IOC通信所需的时间。

通讯流程:

一种是发送方等待接收方回复才会结束任务

  • Core0发送方通过RTE将数据写入IOC,并触发Core1任务。
  • Core1执行完任务将结果通过RTE反馈到IOC并触发Core0任务。
  • Core0得到反馈数据结束处理。

在发送放调用Rte_IocSend函数后会等待Event。

在接收方接受到信号后会调用ReleaseSpinlock释放。

一种是发送方在发送时写入数据时会写入数据,发送后会释放自旋锁,同样接受方在接收时会加锁,读取后释放。

1.3多核关闭

与OS 的启动类似,OS的关闭也是由EcuM完成。若在关闭过程中有唤醒事件出现,则ECU在关闭后立刻重新进行启动。在关闭过程中,系统会选择Shutdown Target,Shutdown Target包含关闭(Off)、睡眠(Sleep)和复位(Reset)。关闭ECU的具体过程如下图所示。

在多核系统中,目前AUTOSAR 4.x不支持只关闭单个核,即若关闭指令发出或者致命错误出现时所有核必须全部关闭。关闭 OS 的具体过程如下图所示。

如上图所示,若某一任务拥有调用 Shutdown All Cores 的权限时,关闭信号会被发送至所有核。当关闭过程启动后,所有的中断服务和任务都不会被激活,关闭前必须完成的程序由 EcuM 保证完成。关闭完成前,由 OS Application Shutdown Hooks 完成相应的回调程序,然后等待至同步点所有核执行关闭回调程序。

相关文章:

Autosar-Os是怎么运行的?(多核系统运行)

写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 目录 1.Autosar多核操作系统 1.1多核启动过程 1.2多核运行过程 1.2.1核间任务同步 1.2.2Counte…...

golang命令大全4--测试与调试

Go 语言提供了一系列强大的工具和命令来帮助开发者进行代码的测试与性能调优。 1、go test 功能 go test是 Go 语言内置的测试工具,用于执行 Go 项目中的单元测试。它会查找当前包中所有以 _test.go 结尾的文件,运行其中定义的测试函数,并…...

第27篇 基于ARM A9处理器用C语言实现中断<三>

Q:基于ARM A9处理器怎样设计C语言工程,同时使用按键中断和定时器中断在红色LED上计数? A:基本原理:设置HPS Timer 0和按键中断源,主程序调用set_A9_IRQ_stack( )函数设置中断模式的ARM堆栈指针&#xff0c…...

linux下使用脚本实现对进程的内存占用自动化监测

linux系统中常用cat /proc/{pid}/status和pmap -x {pid}来监测某个进程的内存资源占用情况。 其中注意各参数的含义如下: VmSize:表示进程当前虚拟内存大小 VmPeak:表示进程所占用最大虚拟内存大小 VmRSS:表示进程当前占用物理内…...

安宝特方案 | 智能培训:安宝特AR如何提升企业技能培训的效率与互动性

随着企业不断推进数字化转型,传统培训方式已无法满足现代企业对高效、灵活培训的需求。尤其在技术更新频繁、工艺流程复杂、员工流动性大的环境中,传统培训模式的局限性愈加明显。为了提升培训质量、降低培训成本,并帮助员工迅速掌握新技能&a…...

golang通过AutoMigrate方法自动创建table详解

一.AutoMigrate介绍 1.介绍 在 Go 语言中,GORM支持Migration特性,支持根据Go Struct结构自动生成对应的表结构,使用 GORM ORM 库的 AutoMigrate 方法可以自动创建数据库表,确保数据库结构与定义的模型结构一致。AutoMigrate 方法非常方便&am…...

【信息系统项目管理师-选择真题】2013上半年综合知识答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

智能调度体系与自动驾驶技术优化运输配送效率的研究——兼论开源AI智能名片2+1链动模式S2B2C商城小程序的应用潜力

摘要:随着全球化和数字化进程的加速,消费者需求日益呈现出碎片化和个性化的趋势,这对物流运输行业提出了前所未有的挑战。传统的物流调度体系与调度方式已难以满足当前复杂多变的物流需求,因此,物流企业必须积极引入大…...

【软件测试项目实战 】淘宝网:商品购买功能测试

一、用例设计方法分析 在对淘宝网商品下单功能进行测试时,不同的测试角度和场景适合运用不同的用例设计方法,以下是针对该功能各方面测试所适用方法及其原因的分析: 商品数量相关测试:对于商品数量的测试,主要采用等…...

[牛客]公交线路(dijkstra+链式前向星)

登录—专业IT笔试面试备考平台_牛客网 #include<bits/stdc.h> using namespace std; #define endl \n typedef long long ll; const int N1e65,M1e85; int cnt0,head[N]; int n,m,s,t; struct node {int v,w,next; }edge[M]; void addedge(int u,int v,int w) {cnt;edge…...

SpringAI 搭建智能体(二):搭建客服系统智能体

在现代人工智能应用中&#xff0c;智能体&#xff08;Agent&#xff09; 是一个重要的概念&#xff0c;它的核心能力是自主性与灵活性。一个智能体不仅能够理解用户的需求&#xff0c;还能拆解任务、调用工具完成具体操作&#xff0c;并在复杂场景中高效运行。在本篇博客中&…...

豆包MarsCode:前缀和计算问题

问题描述 思路分析 问题理解 小S的任务是计算一个整数数组 nums 的前缀和。前缀和是指从数组开始到某个位置的所有元素的累加值&#xff0c;形成一个新数组。例如&#xff1a; 输入数组&#xff1a;nums [4, 5, 1, 6]前缀和数组&#xff1a;[4, 9, 10, 16] 4 49 4 510 …...

【16届蓝桥杯寒假刷题营】第2期DAY5

2.最大公因数 - 蓝桥云课 问题描述 给你2个正整数N&#xff0c;M。 你需要构造一个有N个数的正整数序列a&#xff0c;满足以下条件&#xff1a; ∑i1N​ai​M。 求gcd(a)&#xff0c;可能的最大值。 输入描述 输入一行两个正整数N&#xff0c;M&#xff0c;表示数组的长…...

Python 合并 Excel 单元格

合并 Excel 单元格是 Excel 数据处理和表格设计中的一项常用操作。例如&#xff0c;在制作表格标题时&#xff0c;经常会将多个单元格合并&#xff0c;使标题能够跨列显示&#xff0c;更加醒目和美观。此外&#xff0c;当对数据进行分类时&#xff0c;为了使同一类别的数据在视…...

[EAI-023] FAST: Efficient Action Tokenization for Vision-Language-Action Models

Paper Card 论文标题&#xff1a;FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者&#xff1a;Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…...

解锁微服务:五大进阶业务场景深度剖析

目录 医疗行业&#xff1a;智能诊疗的加速引擎 电商领域&#xff1a;数据依赖的破局之道 金融行业&#xff1a;运维可观测性的提升之路 物流行业&#xff1a;智慧物流的创新架构 综合业务&#xff1a;服务依赖的优化策略 医疗行业&#xff1a;智能诊疗的加速引擎 在医疗行业迈…...

java入门笔记基础语法篇(4)

变量 在Java中&#xff0c;每个变量都有一个类型&#xff08;type&#xff09;。在声明变量时&#xff0c;变量的类型位于变量 名之前。例如&#xff1a; int days; double salary; long earthPopulation; boolean done; 在Java中&#xff0c;每个声明以分号结束。变量名必须…...

java语法学习

目录 一、基础语法 1.注释 2.关键字 3.字面量 4.变量 定义与使用 存储 5.数据类型 6.标识符 7.集成环境 二、运算符 1.概念 2.种类 算术运算符 除法与取模 转化规则 自增减 赋值运算符 关系运算符 逻辑运算符 短路运算符 三元运算符 其它运算符 三、流…...

装饰SpringMVC的适配器实现响应自动包装

文章目录 1.common-tool-starter1.目录结构2.ResultWrapper.java 2.common-web-starter1.目录结构2.IgnoredResultWrapper.java 自定义注解&#xff0c;忽略对返回结果的自动包装3.ReturnValueHandlersDecorator.java 对适配器进行扩展的装饰器4.WebAutoConfiguration.java 将装…...

【Rust自学】15.4. Drop trait:告别手动清理,释放即安全

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.4.1. Drop trait的意义 类型如果实现了Drop trait&#xff0c;就可以让程序员自定义当值…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...