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最核心的基本模块到底是什么关系呢?简单作了个图如下所示,图中描述了各模块的依赖关系,关系线上的描述是其实例化的配置举例。

- physical core:物理核,即片上硬件有几个核。
- EcuC core:autsoar 抽象出来的核,与物理核一一对应。
- Os Core:与EcuC partition同级,依赖于EcuC core,与抽象核意义对应,用于创建Os application。
- EcuC partition :为了支持memory-partitioning 和multi-core,EcuC虚拟模块中引入了EcucPartition的概念,基本用于功能安全隔离。
- 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在哪配置的。


相关文章:
Autosar-Os是怎么运行的?(Os基础模块)
写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 书接上文 Autosar-Os是怎么运行的?(一)-CSDN博客 目录 1.Resourc…...
OPencv3.4.1安装及配置教程
来到GitHub上opencv的项目地址 https://github.com/opencv/opencv/releases/tag/3.4.1 以上资源包都是 OpenCV 3.4.1 版本相关资源,它们的区别如下: (1). opencv-3.4.1-android-sdk.zip:适用于 Android 平台的软件开发工具包(SDK…...
选择困难?直接生成pynput快捷键字符串
from pynput import keyboard# 文档:https://pynput.readthedocs.io/en/latest/keyboard.html#monitoring-the-keyboard # 博客(pynput相关源码):https://blog.csdn.net/qq_39124701/article/details/145230331 # 虚拟键码(十六进制):https:/…...
Vue.js组件开发-如何实现带有搜索功能的下拉框
创建 Vue 项目: 如果还没有创建一个 Vue 项目,可以使用 Vue CLI 来创建一个新的项目。 vue create my-project cd my-project安装依赖: 如果需要使用第三方组件库,比如 Element UI 或 Ant Design Vue,可以安装相应的…...
java 字符串日期字段格式化前端显示
在 Java 应用程序中,如果你有一个字符串类型的日期字段,并希望将其格式化后显示在前端,可以通过多种方式实现。这通常涉及到在后端将字符串转换为 Date 或 LocalDateTime 等对象,然后使用适当的注解或配置来确保它们以正确的格式序…...
LeetCode题练习与总结:安装栅栏--587
一、题目描述 给定一个数组 trees,其中 trees[i] [xi, yi] 表示树在花园中的位置。 你被要求用最短长度的绳子把整个花园围起来,因为绳子很贵。只有把 所有的树都围起来,花园才围得很好。 返回恰好位于围栏周边的树木的坐标。 示例 1: 输…...
< OS 有关 > 阿里云 几个小时前 使用密钥替换 SSH 密码认证后, 发现主机正在被“攻击” 分析与应对
信息来源: 文件:/var/log/auth.log 因为在 sshd_config 配置文件中,已经定义 LogLevel INFO 部分内容: 2025-01-27T18:18:55.68272708:00 jpn sshd[15891]: Received disconnect from 45.194.37.171 port 58954:11: Bye Bye […...
使用八爪鱼爬虫和Web Scraper抓取数据实战案例,附详细教程
最近有不少小伙伴咨询怎么抓取抖音视频或者评论的数据,他们多是自媒体或者商家,想要模仿爆火视频或者分析视频评论区的舆情信息,确实呀,现在抖音是流量高地,淘金的地方,真的是一个值得挖掘的宝藏。当然我一…...
海外问卷调查渠道查如何设置:最佳实践+示例
随着经济全球化和一体化进程的加速,企业间的竞争日益加剧,为了获得更大的市场份额,对企业和品牌而言,了解受众群体的的需求、偏好和痛点才是走向成功的关键。而海外问卷调查才是获得受众群体痛点的关键,制作海外问卷调…...
【C++数论】880. 索引处的解码字符串|2010
本文涉及知识点 数论:质数、最大公约数、菲蜀定理 LeetCode880. 索引处的解码字符串 给定一个编码字符串 s 。请你找出 解码字符串 并将其写入磁带。解码时,从编码字符串中 每次读取一个字符 ,并采取以下步骤: 如果所读的字符是…...
从ai产品推荐到利用cursor快速掌握一个开源项目再到langchain手搓一个Text2Sql agent
目录 0. 经验分享:产品推荐 1. 经验分享:提示词优化 2. 经验分享:使用cursor 阅读一篇文章 3. 经验分享:使用cursor 阅读一个完全陌生的开源项目 4. 经验分享:手搓一个text2sql agent (使用langchain l…...
freeswitch在centos上编译过程
操作系统:centos9-last usr/local/freeswitch/bin/freeswitch -version FreeSWITCH version: 1.10.13-devgit~20250125T131725Z~3f1e4bf90a~64bit (git 3f1e4bf 2025-01-25 13:17:25Z 64bit)vi /etc/ssh/sshd_config ip a nmtui reboot ip a curl -o /etc/pki/rpm-…...
项目测试之MockMvc
文章目录 基础基础概念Mockxxx一般实现文件位置 实战MockMvc与Test注解不兼容RequestParams参数RequestBody参数 基础 基础概念 定义:是Spring框架提供的一种用于测试Spring MVC控制器的工具,它允许开发者在不启动完整的web服务器的情况下,…...
Blazor-选择循环语句
今天我们来说说Blazor选择语句和循环语句。 下面我们以一个简单的例子来讲解相关的语法,我已经创建好了一个Student类,以此类来进行语法的运用 因为我们需要交互性所以我们将类创建在*.client目录下 if 我们做一个学生信息的显示,Gender为…...
【第一天】零基础入门刷题Python-算法篇-数据结构与算法的介绍(持续更新)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.基本概念2.Python中的数据结构1. 列表(List)2. 元组(Tuple)3. 字典&#…...
appium自动化环境搭建
一、appium介绍 appium介绍 appium是一个开源工具、支持跨平台、用于自动化ios、安卓手机和windows桌面平台上面的原生、移动web和混合应用,支持多种编程语言(python,java,Ruby,Javascript、PHP等) 原生应用和混合应用…...
大数据Hadoop入门2
目录 第三部分(Hadoop MapReduce和Hadoop YARN) 1.课程内容-大纲-学习目标 2.理解先分再合、分而治之的思想 3.hadoop团队针对MapReduce的设计构思 4.Hadoop MapReduce介绍、阶级划分和进程组成 5.Hadoop MapReduce官方示例-圆周率PI评估 6.Hadoo…...
21.Word:小赵-毕业论文排版❗【39】
目录 题目 NO1.2 NO3.4 NO5.6 NO7.8.9 NO10.11.12 题目 NO1.2 自己的论文当中接收老师的修改:审阅→比较→源文档:考生文件夹:Word.docx→修订的文档:考生文件夹:教师修改→确定→接收→接收所有修订将合并之…...
【go语言】并发编程
一、协程、线程、进程 在计算机编程中,进程、线程和协程都是用于并发执行任务的不同概念。他们的区别主要体现在创建、管理和调度的复杂度上,特别是在不同的编程语言中有不同的实现方式。下面是他们的详细区别和在 go 语言中的实现方式。 1.1 进程 定义…...
算法1-1 模拟与高精度
目录 一 阶乘数码 二 麦森数 三 模拟题 一 阶乘数码 本题中n<1000,1000的阶乘为以下这么大,远超long的范围 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901…...
JS中对数组的操作哪些会改变原数组哪些不会?今天你一定要记下!
JavaScript 数组方法:变更原数组与不变更原数组的区别 在 JavaScript 中,数组是非常常见且重要的数据结构。作为开发者,我们常常需要使用数组方法来处理数组数据。但是,数组的不同方法会以不同的方式影响原数组,它们可…...
公式与函数的应用
一 相邻表格相乘 1 也可以复制 打印标题...
ShenNiusModularity项目源码学习(7:数据库结构)
ShenNiusModularity项目默认使用mysql数据库,数据库连接字符串放到了ShenNius.Admin. Mvc、ShenNius.Admin.Hosting的appsettings.json文件内。 ShenNiusModularity项目为自媒体内容管理系统,支持常规管理、CMS管理、商城管理等功能,其数…...
【STL笔记】字符串
字符串 下标从0开始,常规用法不再赘述,持续更新中… 1. substr(pos,len): 返回从位置 pos 开始,长度为 len 的子串。(len默认为npos) std::string str "Hello, World!"; std::string sub1 str.substr(7, 5); // 提…...
java知识点 | java中不同数据结构的长度计算
在Java中,size 和 length是两个不同的属性,分别用于不同的数据结构。以下是它们的详细区别和适用场景: 1.length 适用对象: 数组(Array):数组是一个固定长度的线性数据结构,其长度是…...
WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)
手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍) 目录 手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)DDPM 原理图Stable Diffusion 原理Stable Diffusion的原理解释Stable Diffusion 和 Diffus…...
AI软件栈:LLVM分析(一)
文章目录 AI 软件栈后端编译LLVM IRLLVM的相关子项目AI 软件栈后端编译 AI软件栈的后端工作通常与硬件架构直接相关,为了实现一个既能适配现代编程语言、硬件架构发展的目标,所以提出了LLVM具备多阶段优化能力提供基础后端描述,便于进行编译器开发兼容标准编译器的行为LLVM …...
编程语言中的常见Bug及解决方案
在编程过程中,不同语言有其独特的特性和挑战,这也导致了各种常见Bug的出现。本文将总结几种主流编程语言中的常见Bug,包括JavaScript、Python、C/C、Java和Go,并提供相应的解决方案和案例。 一、JavaScript中小数相加精度不准确的…...
论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(三)
Understanding Diffusion Models: A Unified Perspective(三) 文章概括 文章概括 引用: article{luo2022understanding,title{Understanding diffusion models: A unified perspective},author{Luo, Calvin},journal{arXiv preprint arXiv:…...
