Autosar-Os是怎么运行的?(Os基础模块)

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


书接上文

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


目录

1.Resources

1.1优先级反转

1.2死锁

1.3优先级上限协议&天花板优先级协议

2OS五大基础模块关系

2.1OsApplication

2.2EcucPartition

2.3Ecu core

2.4OS Core

2.5OS-Application分类

2.5.1Trusted OS-Applications

2.5.2Non-Trusted OS-Applications


1.Resources

上文中还遗留了一些问题,如果某些资源同时被task和ISR使用,这是因为当较低优先级的任务或ISR正在更新共享数据时,可能会发生任务或ISR抢占。这种情况被称为竞态条件,非常难以测试。访问需要在任务和ISR之间共享的硬件或数据可能是不可靠和不安全的。

访问共享数据的语句序列称为临界区。为了提供对临界区中引用的代码和数据的安全访问,需要强制互斥。换句话说,必须确保在临界段期间,系统中没有其他任务或二类中断能够抢占正在执行的任务

可以将任务声明为非抢占式可以防止出现互斥问题。然而,这种方法是治标不治本的,因为它通过防止出现抢占来防止抢占带来的问题。

Autosar通过Resources给共享数据进行资源管理,能够实现两个任务不同占用同一资源。

通过调用GetResource,ReleaseResource对资源进行管理

他们是成对出现的。同时遵循严格嵌套规则。

在Davinci中添加相应Resources,并在TASK配置界面,Task Resource Ref进行引用。

1.1优先级反转

当高优先级任务被低优先级任务阻止执行时,这称为优先级反转,因为高优先级任务比低优先级任务需要更长的时间来完成它的执行。较低优先级的任务似乎优先于较高优先级的任务运行,这与实际优先级分配的预期相反。高优先级的任务被低优先级的任务阻塞。

例:存在四个TASK,他们优先级TASK1 > TASK2 > TASK3 >TASK4。TASK4和TASK1共享信号量S1.

T1时刻:TASK4先运行并占用S1,TASK1-3处于suspend状态。

T2时刻:TASK1,TASK2TASK3被激活运行,此时TASK4还没运行结束,S1没有被释放。但是由于信号量S1被TASK4占用,TASK1在判定envent的时候无法获取S1导致TASK1转移到waiting状态。

T3时刻:TASK2由于TASK进入waiting,且TASK2优先级又高于TASK4,所以TASK4被抢占,转移到READY状态。

T4时刻:TASK3由于TASK2运行完毕,且TASK3优先级又高于TASK4,所以TASK4依旧被抢占,转移到READY状态。

T5时刻:TASK3运行完毕,TASK4被抢占结束转移到RUNNING状态运行完毕后释放S1。

T6时刻:由于TASK4释放了S1,TASK1满足所有envent,于是开始转移到RUNNING。

于是,TASK1的运行被低优先级的TASK延迟了运行时间的情况称之为优先级反转。

1.2死锁

两个TASK/ISR同时因只能获取两个resource中的一个并占用,而不能同时获取到两个resoure导致无法运行的情况称之为死锁。

例:存在两个TASK,优先级:TASK1 > TASK2,TASK1和TASK2可共享两个信号量(S1,S2)

T1时刻:TASK1先运行并占用S1。

T2时刻:由于TASK1需要等待一个其他EVENT(例如其他task设置),转入waiting状态,TASK2开始运行并占用S2。

T3时刻:由于TASK1条件满足继续开始执行。TASK2转为ready状态。

T4时刻:TASK1请求占用S2,但是S2已经被TASK2占用,导致TASK1进入WATING状态,TASK2开始运行。

T5时刻:TASK2请求占用S1,但是S1已经被TASK1占用,导致TASK2进入WATING状态.
至此,TASK1和TASK2 同时进入waiting状态且不可能恢复到running,进入死锁。

1.3优先级上限协议&天花板优先级协议

在autosar OS中用于临时提升TASK 或者ISR 的优先级,以最大化减轻优先级反转的影响和避免死锁的产生。

系统中的每个资源都被分配了一个上限优先级,该优先级等于需要访问该资源的任何任务或ISR的最高优先级。当任务或ISR获得资源时,任务/ISR的运行优先级将增加到资源的最高优先级(当且仅当该优先级高于任务/ISR当前的运行优先级)。当资源被释放时,任务或ISR的优先级恢复到该任务或ISR发出呼叫之前的优先级。

:同样存在四个TASK,优先级TASK1 > TASK2 > TASK3 >TASK4。TASK1和TASK4共享同一个信号量S1。

T1时刻:TASK4开始运行,S1被占用。

T2时刻:TASK1,TASK2,TASK3被开始激活,想要抢占TASK4,由于有priority ceiling protocol,此时TASK4的优先级被临时调整到和TASK1一样的优先级,TASK1无法抢占TASK4,且此时TASK4优先级临时比TASK2和TASK3高,所以继续运行TASK4,而TASK2,Task3进入ready状态。

T3时刻:由于TASK4运行完毕并释放S1,TASK1开始执行。

T4时刻:TASK2由于TASK1运行完成,所以转移到了running。

T5时刻:TASK3由于TASK2运行完成,所以转移到了running。

由此可见,引入了priority ceiling protocol后,最大化减小了TASK4对TASK1的的影响。

2OS五大基础模块关系

Physical core、EcucCore、EcucPartition、OS Core、OS Application这五个Autosar CP最核心的基本模块到底是什么关系呢?简单作了个图如下所示,图中描述了各模块的依赖关系,关系线上的描述是其实例化的配置举例。

  1. physical core:物理核,即片上硬件有几个核。
  2. EcuC core:autsoar 抽象出来的核,与物理核一一对应。
  3. Os Core:与EcuC partition同级,依赖于EcuC core,与抽象核意义对应,用于创建Os application。
  4. EcuC partition :为了支持memory-partitioning 和multi-core,EcuC虚拟模块中引入了EcucPartition的概念,基本用于功能安全隔离。
  5. Os application:OS的五大基本对象(COUNTER,ALARM,ISRS,TASK,SCHEDULE TABLE)的所在

上图中是如何理解依赖呢?比如:OS Application依赖EcucPartition,怎么依赖的呢,EcucPartition实例化出EcucPartition_Core0_xxx(也就是配置出EcucPartition_Core0_xxx),OS Application基于EcucPartition_Core0_xxx进行配置。

2.1OsApplication

由此也可以看到OsApplication依赖EcucPartition,Os Core.

OS往上的软件运行,都是基于OS Application,是OS内核用于承载各功能的容器,包含五大对象:Counter、Task、Alarm、ISR、Schedule Table;一个核,可以包含多个多个受信任(Trusted)的OS Application与非受信任(Not Trusted)的OS Application

2.2EcucPartition

由于EcucPartition基本用于功能安全隔离,也可以看到ASIL配置项。

2.3Ecu core

Ecu core依赖于Physical core,Core Id配置的就是Physical core索引号。

2.4OS Core

OS Core是对OS部署在哪几相核,启动函数,堆栈等基本功能进行定义的容器

2.5OS-Application分类

在 AUTOSAR 中,Trusted OS-Applications 和 Non-Trusted OS-Applications 是与安全性相关的两个概念,它们涉及到系统中不同部分的安全性级别和可信度。

2.5.1Trusted OS-Applications

受信任的操作系统应用程序允许在运行时禁用监控或保护功能。它们可以不受限制地访问内存、操作系统模块的API,并且不需要在运行时强制执行它们的计时行为。当处理器支持时,它们被允许在特权模式下运行。
特点:
  这些应用程序在系统中被认为是高度可靠和受信任的,它们可能包含一些关键的安全功能或操作。
Trusted OS-Applications 通常会被配置在安全环境中,受到更加严格的安全措施和保护。
用途:
  Trusted OS-Applications 可能包括处理敏感数据的任务、执行关键的安全操作或者运行在安全保护区域内的应用程序。

2.5.2Non-Trusted OS-Applications

不受信任的操作系统应用程序不允许在运行时禁用监控或保护功能,被视为不太可信或安全性较低的操作系统应用程序。它们限制了对内存的访问,限制了对操作系统模块API的访问,并在运行时强制执行定时行为。当处理器支持时,它们不允许以特权模式运行。
特点:
  这些应用程序在系统中被认为不太可靠,可能不包含关键的安全功能,或者执行的任务相对较为普通。
Non-Trusted OS-Applications 可能被配置在普通的环境中,相对于 Trusted OS-Applications,它们的安全性要求可能较低。
用途:
  Non-Trusted OS-Applications 可能包括一般的应用程序、非安全关键的任务或者在安全性要求较低的场景下执行的任务.

3.HOOK

在OSEK OS中,PreTask和PostTask Hook在具有不受限制的访问权限的OS级别上运行,因此必须受到信任。强烈建议这些Hook函数仅在调试期间使用,而不在最终产品中使用。

当OS-Application被终止时,不调用OSApplication的Shutdown和Startup Hook。可以在重新启动任务中完成OS-Application特定数据的清理。

所有特定于应用程序的Hook函数(Startup, Shutdown and Error)必须返回(不接受阻塞或无限循环)。

接下来,看看在Configurator中,这些Hook在哪配置的。

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

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

相关文章

如何使用 DeepSeek API 结合 VSCode 提升开发效率

引言 在当今的软件开发领域,API 的使用已经成为不可或缺的一部分。DeepSeek 是一个强大的 API 平台,提供了丰富的功能和数据,可以帮助开发者快速构建和优化应用程序。而 Visual Studio Code(VSCode)作为一款轻量级但功…

【ComfyUI专栏】推荐几个常用的云端ComfyUI平台

如果我们本身的系统资源不足,但是我们依然能够使用显卡来利用ComfyUI生成我们需要的图片或者视频。当前平台中主要有两个不同的廉价平台提供了ComfyUI的功能,这里提供的资源基本上都是基于分钟进行计算。这些平台的好处就是基本上不需要你额外进行配置。 一.端脑云 二.AutoD…

「数学::质数」分解质因子 / LeetCode 2521(C++)

概述 由算数基本定理,我们知道任意一个大于1的自然数可以表示为一些质数的乘积: LeetCode 2521: 给你一个正整数数组 nums ,对 nums 所有元素求积之后,找出并返回乘积中 不同质因数 的数目。 注意: 质数 是…

基于微信小程序的移动学习平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

ESP32服务器和PC客户端的Wi-Fi通信

ESP32客户端-服务器Wi-Fi通信 本指南将向您展示如何设置ESP32板作为服务端,PC作为客户端,通过HTTP通信,以通过Wi-Fi(无需路由器或互联网连接)交换数据。简而言之,您将学习如何使用HTTP请求将一个板的数据发…

[笔记] 极狐GitLab实例 : 手动备份步骤总结

官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复,请确保您系统已安装 Rsync。 如果您安装了极狐GitLab: 如果您使用 Omnibus 软件包,则无需额外操作。如果您使用源代码安装,您需要确定是否安装了 rsync。…

NFT Insider #166:Nifty Island 推出 AI Agent Playground;Ronin 推出1000万美元资助计划

引言:NFT Insider 由 NFT 收藏组织 WHALE Members、BeepCrypto 联合出品, 浓缩每周 NFT 新闻,为大家带来关于 NFT 最全面、最新鲜、最有价值的讯息。每期周报将从 NFT 市场数据,艺术新闻类,游戏新闻类,虚拟…

Cyber Weekly #41

赛博新闻 1、豆包大模型1.5Pro正式发布 1月22日,豆包大模型1.5Pro在模型能力、多模态能力、推理能力上进行了全面升级。该模型使用MoE架构,通过训练-推理一体化设计,在较小激活参数下达到一流超大稠密预训练模型的性能,并在多个…

idea对jar包内容进行反编译

1.先安装一下这个插件java Bytecode Decompiler 2.找到这个插件的路径,在idea的plugins下面的lib文件夹内:java-decompiler.jar。下面是我自己本地的插件路径,以作参考: D:\dev\utils\idea\IntelliJ IDEA 2020.1.3\plugins\java-d…

LLM幻觉(Hallucination)缓解技术综述与展望

LLMs 中的幻觉问题(LLM 幻觉:现象剖析、影响与应对策略)对其可靠性与实用性构成了严重威胁。幻觉现象表现为模型生成的内容与事实严重不符,在医疗、金融、法律等对准确性要求极高的关键领域,可能引发误导性后果&#x…

苍穹外卖-day06

[!IMPORTANT] HttpClient 是什么?它的作用是什么?在微信登录流程中,code 是什么?它的作用是什么?微信登录的具体步骤有哪些?在微信登录流程中,token 的作用是什么?在微信登录中&…

Jetson Xavier NX (ARM) 使用 PyTorch 安装 Open3D-ML 指南

由于 Jetson 为 ARM64 (aarch64) 的系统架构,所以不能用 pip install 直接安装,需要通过源码编译。 升级系统 JetPack 由于 Open3D-ML 目前只支持 CUDA 10.0 以及 CUDA 11.*,并且 JetPack 的 CUDA 开发环境只有10.2、11.4以及12.2&#xff0…

Juc22_什么是中断、interrupt、isInterrupted、interrupted方法源码解析、如何使用中断标识停止线程

目录 ①. 什么是中断 ②. 源码解读(中断的相关API) ③. 如何使用中断标识停止线程 ①. 什么是中断 ①. 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,所以,Thread.stop、Thread.suspend、Thread. resume都已经被废弃了 ②. 在Java中没有办法立即停止…

AI赋能医疗:智慧医疗系统源码与互联网医院APP的核心技术剖析

本篇文章,笔者将深入剖析智慧医疗系统的源码架构以及互联网医院APP背后的核心技术,探讨其在医疗行业中的应用价值。 一、智慧医疗系统的核心架构 智慧医疗系统是一个高度集成的信息化平台,主要涵盖数据采集、智能分析、决策支持、远程医疗等…

mongoDB常见指令

即使我们自己开发用不到mongoDB,但是接手别人项目的时候,别人如果用了,我们也要会简单调试一下 虽然mongoDB用的不是sql语句,但语句的逻辑都是相似的,比如查看数据库、数据表,增删改查这些 我们下面以doc…

K8S部署DevOps自动化运维平台

持续集成(CI) 持续集成强调开发人员提交了新代码之后,立刻自动的进行构建、(单元)测试。根据测试结果,我 们可以确定新代码和原有代码能否正确地集成在一起。持续集成过程中很重视自动化测试验证结果&#…

SpringCloud系列教程:微服务的未来(十七)监听Nacos配置变更、更新路由、实现动态路由

前言 在微服务架构中,API 网关是各个服务之间的入口点,承担着路由、负载均衡、安全认证等重要功能。为了实现动态的路由配置管理,通常需要通过中心化的配置管理系统来实现灵活的路由更新,而无需重启网关服务。Nacos 作为一个开源…

Lua 环境的安装

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

03-画P封装(制作2D+添加3D)

画P封装的方法2D制作3D添加 使用P封装自己画0603格式的电阻的P封装1. 看规格书,找参数2. 创建一个新的P封装3. 灯泡两侧放焊盘4.设置焊盘大小和形状5.根据坐标定义中间间隔: L/2原则6. 画最外层丝印(丝印层直接围住即可)7.在平面的P封装上,添加3D立体封装库 立创商城下载P封装向…

libOnvif通过组播不能发现相机

使用libOnvif库OnvifDiscoveryClient类, auto discovery new OnvifDiscoveryClient(QUrl(“soap.udp://239.255.255.250:3702”), cb.Build()); 会有错误: end of file or no input: message transfer interrupted or timed out(30 sec max recv delay)…