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

news2025/1/31 8:09:51

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


目录 

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 完成相应的回调程序,然后等待至同步点所有核执行关闭回调程序。

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

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

相关文章

【硬件介绍】三极管工作原理(图文+典型电路设计)

什么是三极管? 三极管,全称为双极型晶体三极管,是一种广泛应用于电子电路中的半导体器件。它是由三个掺杂不同的半导体材料区域组成的,这三个区域分别是发射极(E)、基极(B)和集电极&…

STM32 PWM驱动舵机

接线图: 这里将信号线连接到了开发板的PA1上 代码配置: 这里的PWM配置与呼吸灯一样,呼吸灯连接的是PA0引脚,输出比较单元用的是OC1通道,这里只需改为OC2通道即可。 完整代码: #include "servo.h&quo…

基于Go语言的三甲医院人机与智能体协同环境系统(上.文章部分)

一、引言 1.1 研究背景与意义 1.1.1 三甲医院对高效协同系统的需求 三甲医院作为医疗体系的核心力量,承担着疑难病症诊治、医学科研教学等重要任务,其业务具有高度的复杂性。在日常运营中,三甲医院涉及多个科室,每个科室又包含众多专业领域,各科室之间需要紧密协作,共…

对比DeepSeek、ChatGPT和Kimi的学术写作摘要能力

摘要 摘要是文章的精华,通常在200-250词左右。要包括研究的目的、方法、结果和结论。让AI工具作为某领域内资深的研究专家,编写摘要需要言简意赅,直接概括论文的核心,为读者提供快速了解的窗口。 下面我们使用DeepSeek、ChatGPT…

Lua 环境的安装

1.安装Lua运行环境 本人采用的是在windows系统中使用cmd指令方式进行安装,安装指令如下: winget install "lua for windows" 也曾使用可执行程序安装过,但由于电脑是加密电脑,最后都已失败告终。使用此方式安装可以安…

java爬虫工具Jsoup学习

目录 前言 一、基本使用 二、爬取豆瓣电影的案例 三、Jsoup能做什么? 四、Jsoup相关概念 五、Jsoup获取文档 六、定位选择元素 七、获取数据 八、具体案例 前言 JSoup是一个用于处理HTML的Java库,它提供了一个非常方便类似于使用DOM&#xff0…

基于SpringBoot电脑组装系统平台系统功能实现六

一、前言介绍: 1.1 项目摘要 随着科技的进步,计算机硬件技术日新月异,包括处理器(CPU)、主板、内存、显卡等关键部件的性能不断提升,为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…

Java实战项目-基于 springboot 的校园选课小程序(附源码,部署,文档)

Java 基于 springboot 的校园选课小程序 博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ 🍅文末获取源码联系🍅 👇&…

洛谷P3884 [JLOI2009] 二叉树问题(详解)c++

题目链接:P3884 [JLOI2009] 二叉树问题 - 洛谷 | 计算机科学教育新生态 1.题目解析 1:从8走向6的最短路径,向根节点就是向上走,从8到1会经过三条边,向叶节点就是向下走,从1走到6需要经过两条边&#xff0c…

Qt Ribbon使用实例

采用SARibbon创建简单的ribbon界面 实例代码如下所示&#xff1a; 1、头文件&#xff1a; #pragma once #include <SARibbonBar.h> #include "SARibbonMainWindow.h" class QTextEdit; class SAProjectDemo1 : public SARibbonMainWindow { Q_OBJECT pub…

【事务管理】

目录 一. 介绍与操作二. Spring事务管理三. 事务四大特性 \quad 一. 介绍与操作 \quad \quad 二. Spring事务管理 \quad 推荐加在经常进行增删改的方法上 \quad 三. 事务四大特性 \quad ctrlaltt

单细胞-第五节 多样本数据分析,打分R包AUCell

文件在单细胞\5_GC_py\1_single_cell\3.AUCell.Rmd 1.基因 rm(list = ls()) load("g.Rdata")2.AUCell https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9897923 IF: NA NA NA用这个文章里的方法,将单细胞亚群的marker基因与ros相关基因取交集,用作AUCell的基因集…

OSPF邻接关系无法建立之MTU问题

OSPF中路由器间从邻居到建立完全邻接需满足以下条件: 1、邻居之间网络通 2、建立邻接的接口不能为OSPF被动接口 3、两台路由器的HELLO时间间隔和DEAD时间间隔必须一致 4、两台路由器的router-id 必须不同 5、如果开了OSPF认证,认证方式和KEY必须一致 6、两台路由器建立…

OpenEuler学习笔记(十五):在OpenEuler上搭建Java运行环境

一、在OpenEuler上搭建Java运行环境 在OpenEuler上搭建Java运行环境可以通过以下几种常见方式&#xff0c;下面分别介绍基于包管理器安装OpenJDK和手动安装Oracle JDK的步骤。 使用包管理器安装OpenJDK OpenJDK是Java开发工具包的开源实现&#xff0c;在OpenEuler上可以方便…

【蓝桥杯省赛真题02】C++猫吃鱼 第十届蓝桥杯青少年创意编程大赛 算法思维 C++编程省赛真题解

目录 C猫吃鱼 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 七、推荐资料 C猫吃鱼 第十届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 明明家从1号站点出发&#xff0c;开车去旅游&#xff0c;一共要经过n个…

SpringCloudGateWay和Sentinel结合做黑白名单来源控制

假设我们的分布式项目&#xff0c;admin是8087&#xff0c;gateway是8088&#xff0c;consumer是8086 我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目&#xff0c;那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以&#xff1…

CVE-2020-0796永恒之蓝2.0(漏洞复现)

目录 前言 产生原因 影响范围 漏洞复现 复现环境 复现步骤 防御措施 总结 前言 在网络安全的战场上&#xff0c;漏洞一直是攻防双方关注的焦点。CVE-2020-0796&#xff0c;这个被称为 “永恒之蓝 2.0” 的漏洞&#xff0c;一度引起了广泛的关注与担忧。它究竟是怎样的…

构建具身智能体的时空宇宙!GRUtopia:畅想城市规模下通用机器人的生活图景

作者&#xff1a; Hanqing Wang, Jiahe Chen, Wensi Huang, Qingwei Ben, Tai Wang, Boyu Mi, Tao Huang, Siheng Zhao, Yilun Chen, Sizhe Yang, Peizhou Cao, Wenye Yu, Zichao Ye, Jialun Li, Junfeng Long, Zirui Wang, Huiling Wang, Ying Zhao, Zhongying Tu, Yu Qiao, D…

1.五子棋对弈python解法——2024年省赛蓝桥杯真题

问题描述 原题传送门&#xff1a;1.五子棋对弈 - 蓝桥云课 "在五子棋的对弈中&#xff0c;友谊的小船说翻就翻&#xff1f;" 不&#xff01;对小蓝和小桥来说&#xff0c;五子棋不仅是棋盘上的较量&#xff0c;更是心与心之间的沟通。这两位挚友秉承着"友谊第…

YOLOv8改进,YOLOv8检测头融合DynamicHead,并添加小目标检测层(四头检测),适合目标检测、分割等,全网独发

摘要 作者提出一种新的检测头,称为“动态头”,旨在将尺度感知、空间感知和任务感知统一在一起。如果我们将骨干网络的输出(即检测头的输入)视为一个三维张量,其维度为级别 空间 通道,这样的统一检测头可以看作是一个注意力学习问题,直观的解决方案是对该张量进行全自…