汽车电子笔记之:AUTOSA架构下的OS概述

目录

1、实时操作系统(RTOS)

2、OSEK操作系统

2.1、OSEK概述

2.2、OSEK处理等级

2.3、OSEK任务符合类

2.4、OSEK优先级天花板模式

3、AUTOSAR OS

3.1、 AUTOSAR OS对OSEK OS的继承和扩展

3.2、AUTOSAR OS的调度表

3.3、AUTOSAR OS的时间保护

3.4、AUTOSAR OS的内存保护


1、实时操作系统(RTOS)

        实时系统(Real-Time System)通常是指对任务的执行有严格时间要求的系统。在该类系统中应用所执行的动作及对外部事件的应答都应该是及时的并且是可预见的,否则,任务将会错过截止时间或者丢失数据。实时系统通常包含硬实时系统和软实时系统。硬实时系统要求任务必须在截止时间前完成,否则,系统将会出现故障;软实时系统则是期望任务在预定时间内完成,但一定限度的延迟对系统来说并非是致命的。实时系统通常具备以下特点:

        高的输入输出吞吐量;

        对外部异步信号快速的响应能力;

        快速的任务调度;

        具有任务间安全的通信机制等。

        汽车电子控制系统就是一种实时系统,它要求所有任务都是可预见的,通常情况下,包含硬实时任务和软实时任务,任务较多,系统较为复杂。过去,实时系统的设计方法是采取控制循环的方式来查询任务的执行,这种方法需要程序员对任务的执行时间和执行顺序有严格的把控,编程难度大,同时,造成软件移植难度增大,可重复利用性降低。

        实时操作系统(Real Time Operation System,RTOS)是应用于实时系统的操作系统,为用户提供了结构化的方便的任务执行环境,而且能够很好地满足实时性要求。RTOS有以下优点

        消除了在应用软件中对处理器分配的需要;

        修正或添加任务可在应用软件中完成而且不会影响到系统的响应要求;

        除了对任务进行管理外,多数RTOS提供任务通信、任务同步、定时器及内存管理机制;

        RTOS 隐藏了底层硬件的具体特性,为用户提供了一个不依赖于处理器的实时运行环境;

        可以容易地移植到 RTOS 供应商支持的其他处理器。

        综上所述,当前嵌入式操作系统多为实时操作系统。

2、OSEK操作系统

2.1、OSEK概述

        OSEK操作系统(OS)是一个为分布式嵌入式系统所定义的单核操作系统。为适应汽车电子可靠性、实时性、成本敏感性的需求,OSEK操作系统具有以下特性:

        操作系统中任务、资源、服务是静态配置的;

        支持在只读存储器上运行;

        应用中的任务具有很好的可移植性;

        操作系统中所定义的动作是可预见和可记录的。

OSEK 操作系统提供以下服务:

        任务管理:包括任务的激活与终止、任务状态的切换;

        同步服务:主要通过资源调度和事件控制(下文会有例子)来实现;

        中断服务程序:包括一类中断和二类中断;

        报警机制(ALARM):包括相对报警和绝对报警;

        进程间通信:用于进程间数据的交换;

        错误处理:用于支持各种错误的处理。

        AUTOSAR OS继承了上述全部特性。

2.2、OSEK处理等级

        OSEK操作系统定义了三层处理等级:任务层(task level)、调度器的逻辑层(logicallevel for scheduler)和中断层(interrupt level)。任务层分为全抢占、非抢占和混合抢占(preemption full/non/mixed)。任务的执行时序由调度器(Scheduler)根据调度规则而决定。处理器中有一部分中断是不受操作系统控制的中断,称为一类中断,受操作系统控制的中断称为二类中断。各层的优先级和执行时序如下图所示。        

 由上图可归纳OSEK操作系统的优先级规则如下:

        中断优先级总是高于任务优先级;

        不同的中断和任务可以有一个或多个优先级;

        中断和任务的优先级是静态分配(配置好的)的;

        同一优先级的任务依照 FIFO 原则决定执行次序;

        通过资源调度可实现优先级天花板模式(ceiling priority),避免优先级反转。

AUTOSAR OS 完全继承了上述特性。

2.3、OSEK任务符合类

        根据不同的软硬件需求,OSEK OS定义了四种符合类(Conformance classes, CC),分别是 BCC1, BCC2, ECC1和ECC2,各种符合类及其属性见下图。

         由上图可知,基本符合类BCC1和BCC2仅支持基本任务,扩展符合类ECC1和ECC2支持基本任务和扩展任务;一类符合类BCC1和ECC1不支持多次任务激活请求,每个优先级只能有一个任务;二类符合类 BCC2 和ECC2支持多次任务激活请求,每个优先级可以有多个任务。各种符合类之间的兼容关系如下图所示。

 OSEK的基本任务与扩展任务

        OSEK 操作系统中有两种任务:基本任务(Basic Task)和扩展任务(Extended Task)。基本任务有三种不同的状态,分别为运行状态(running)、就绪状态(ready)和阻塞状态(suspending)。处于阻塞状态的任务由API函数或报警器(Alarm)激活进入就绪状态,处于就绪状态的任务由调度器决定是否启动进入运行状态,处于运行状态的任务可能被高优先级的任务或中断抢占从而进入就绪状态,任务运行结束后将自己挂起进入阻塞状态。与基本任务相比,扩展任务多了等待状态,当任务的运行需要等待某一或某些事件时进入等待状态(waiting),当任务所等待的事件被置位时,任务进入就绪状态。基本任务与扩展任务的状态机及其之间的切换如下图所示。

         因为基本任务没有等待状态,所以只能够在任务启动和终结时进行同步,基本任务的优点是占用较少的内存和执行时间。扩展任务的优点是包含多个同步点,没有同步请求的麻烦,当进一步的工作出现信息缺失时,任务切换至等待状态;其缺点是占用较多的内存和执行时间。

2.4、OSEK优先级天花板模式

        若存在Task1, Task2, Task3为全抢占模式下的扩展任务,Taskl和Task3有共享资源,若Taskl在运行时占用了资源Sourcel,Task2和Task3被激活处于就绪状态,调度器根据任务优先级使Task3进入运行状态。由于Task3需要访问的资源Sourcel未被Task1释放,故进入等待状态,而Task2的优先级高于Task1,故Task2抢占Task1进入运行状态,运行结束后将自己挂起,Task 1 继续运行,释放资源后,Task 3 运行。其运行时序如下图所示。

下图为优先级反转示意(优先级task3 >task2 >task1)

        由上图可知,本该先于Task2运行的任务却在Task2之后运行,这种现象被称为优先级反转(Priority inversion)。这种现象与系统设计者的意图相违背,为避免这种现象的出现,OSEK操作系统采用优先级天花板模式(ceiling priority)。即,将访问共享资源的任务的优先级在占用资源的过程中提升至共享资源任务的最高优先级之上,从而避免优先级反转现象的出现,如下图所示。

3、AUTOSAR OS

3.1、 AUTOSAR OS对OSEK OS的继承和扩展

        AUTOSAR OS是在OSEK OS的基础上进行修改和扩展的,是向后兼容的,在OSEKOS上运行的应用程序可以在AUTOSAR OS上运行。

        AUTOSAR从4.0版本开始支持多核OS, AUTOSAR多核OS采用分区机制,多核处理器的每个核中至少有一个OS-Application。任务(Task)、中断服务(ISR)、报警(Alarm)、调度表(Schedule Tables)和计数器(Counters)被统称为操作系统的对象(OS Object)。每一个OSObject 必须从属于一个 OS Application,否则会出现错误。OS-Application 分为 Trusted 和Non-Trusted,Trusted和 Non-Trusted OS-Application 在运行过程中均可以配置相应的监控和保护机制。从属于Non-Trusted OS-Application的OS Object对存储器和API的访问受到限制,通常将一些基础软件层的模块的模式管理主函数映射到 Non-Trusted OSApplication中的任务,如: EcuM_MainFuction (), BswM-MainFuction (), CanMainFuction_Mode()等周期性查询函数,前提是这些模块的安全级别为QM

        AUTOSAR OS 有四类可裁剪类型(OsScalabilityClass),分别是 SC1—SC4。根据不同的处理器特性,用户可选择不同的可裁剪类型。与OSEK OS相比,SC1具有调度表(Schedule Tables),SC2具有调度表和时间保护(Timing Protection)特性,SC3具有调度表和内存保护(Memory Protection)机制,SC4具有调度表、时间保护和内存保护机制。四者示意图如下图所示。

3.2、AUTOSAR OS的调度表

        调度表被用于安排复杂任务或事件序列,可视为一个单向的轴,通过在轴上设置一个或复多个静态的终点(Expiry Point)来激活任务或事件,每个终点上可设置单个或多个任务或事件,终点之间的时间间隔以Counter的Tick为单位,故每一个调度表对应一个Counter。调度表可设置为以循环或非循环的方式运行。调度表结构如下图所示。

3.3、AUTOSAR OS的时间保护

        如上所述,实时操作系统需要在预定的时间内完成一些任务,但是在某些情况下会出现超时错误,因此,操作系统须采用一定的措施来预防超时错误的产生。这种措施称为时间保护。一个时间保护的方法是时间监控,即:当检测到某一任务运行时间超出其截止时间时,操作系统报错并调用相应的钩子(Hook)函数。AUTOSAR OS并不是采用监控截止时间的方式来进行时间保护的,因为对截止时间的监控并不能识别出引起错误的原因。当任务的执行超过截止时间时,任务本身的执行可能没有出错,而是由于受到其他任务或中断过于频繁的抢占或者过长的阻塞资源的访问而衍生出来的错误。这种情况下,如果采用监控截止时间的方式,则有可能结束正确的任务,而错误的任务仍被允许运行。

        假设所有任务在0时刻就绪,则期望时序如下表和下图所示。由于任务A的优先级最高,故任务 A 先执行,1 个Tick之后任务B 执行,3个Ticks之后任务C执行,当任务C执行 1 个 Tick 后任务 A将其打断,任务A执行完毕后,任务C继续运行,到第 10 个Tick任务C执行完毕,周而复始,整个过程并未出现超时现象,并且有1个Tick的空闲状态。

        下图给出了任务错误运行的状态。任务 A 的第二个周期和任务 B 的第一个周期都出现运行时间过长的现象,但并未超出其截止时间。任务B在第二个周期提前进入运行状态,但也未超出截止时间。任务 C 按照正确的方式运行,但由于任务 A 和 B 的出错导致任务 C运行超时,发生超时错误。采用超时监控机制只能检测到任务C超时,这时,操作系统调用钩子函数,由于出错原因并未被检测到,从而操作系统采取的措施无法有效解决错误。

任务超时图如下:

 在实时操作系统中,任务或中断能否满足其截止时间取决于以下三个因素:

        1、静态任务或中断的执行时间上限;

        2、被低优先级任务锁住共享资源或屏蔽中断所引起的阻塞时间;

        3、任务或中断之间的间隔执行时间。

针对上述三个因素,AUTOSAR OS采取了三种时间保护机制:

        针对1,AUTOSAR OS为任务和二类中断服务设定了运行时间上限;

        针对2,AUTOSAR OS设定了共享资源被任务或二类中断锁定的时间上限,设定了OS中断被任务或二类中断挂起的时间上限,设定了所有中断被任务或二类中断挂起或屏蔽的时间上限;

        针对3, AUTOSAR OS设定了任务或二类中断执行间隔的时间下限。

        当任务或中断服务函数在运行过程中不符合上述要求时,AUTOSAR OS调用相应的钩子(HOOK)函数,作出相应的错误处理。

3.4、AUTOSAR OS的内存保护

        内存保护需要特定的硬件支持,即处理器上应该有MPU(Memory Protection Unit),英飞凌AURIX单片机具备该特性。内存保护可防止某些出错的应用程序影响到其他模块。内存保护分为以下三种形式:

         1、栈保护(Stack Protection):每一个 OS Application 和其中的 OS Object 都有各自的私有栈不同的 OS Object之间没有共享栈的存在。栈保护可以更快速地检测出栈上溢和栈下溢,同时,栈保护是划分OS Application的一种方式和依据。

        2、 数据保护(Data Protection):OS Application 和其中的 Objects 都具有各自的私有数据,OS Application 的私有数据区是从属于该OS Application 的Objects 的共享数据区。

        3、代码保护(Code Protection):代码区既可以为 OS Application 所私有,也可以被共享。在没有代码保护的情况下,错误的代码执行会导致内存、时间和服务上的出错。

        OS 通过 MPU 监控内存的访问权限,AUTOSAR 中的访问权限分为:受信任 Object 的和非受信任的Object(Trusted and Non Trusted)两级。受信任的Object 有读写大部分内存的权限,但是没有读取其他非激活栈的权限。非受信任的Object 仅有读写少数内存的权限,包括当前活跃的栈、当前OS Application的数据以及LMU中的共享数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OS 内核级线程

用户级线程是两个栈,核心级线程是两套栈,用户栈和内核栈 用户级是并发(同时触发、交替执行),这个是并行(同时触发可以同时执行) 进入内核的唯一方式是中断 根据TCB的切换,实现内核…

C++11特性详解

一、简介 在C11标准出来之前,一直是C98/03标准占引领地位,而C98/03标准是C98标准在2003年将存在的一些漏洞进行了修复,但并没有核心语法的改动。相比于C98/03,C11则带来了数量可观的变化,其中包含了约140个新特性&…

深度学习处理文本(NLP)

文章目录 引言1. 反向传播1.1 实例流程实现1.2 前向传播1.3 计算损失1.4 反向传播误差1.5 更新权重1.6 迭代1.7 BackPropagation & Adam 代码实例 2. 优化器 -- Adam2.1 Adam解析2.2 代码实例 3. NLP任务4. 神经网络处理文本4.1 step1 字符数值化4.2 step 2 矩阵转化为向量…

HTML基础知识点

目录 ​编辑一、使用 vscode 二、研究代码的特点 三、HTML 常见标签 注释标签 标题标签 段落标签 换行标签 格式化标签 图片标签 超链接标签 表格标签 列表标签 表单标签: form 标签 input标签: select textarea标签: 无语…

【stable-diffusion使用扩展+插件和模型资源(下)】

插件模型魔法图片等资源:https://tianfeng.space/1240.html 书接上文:(上) 插件推荐 1.lobe theme lobe theme是一款主题插件,直接可以在扩展安装 界面进行了重新布局,做了一些优化,有兴趣的…

HDLBits-Verilog学习记录 | Verilog Language-Vectors

文章目录 11.vectors | vector012.vectors in more detail | vector113.Vector part select | Vector214.Bitwise operators | Vectorgates15.Four-input gates | Gates416.Vector concatenation operator | Vector317.Vector reversal 1 | Vectorr18. Replication operator | …

平衡二叉树的插入和删除(从现在开始摆脱旋转)

平衡二叉树是指任意节点的左子树和右子树高度之差的绝对值不超过1 一.插入操作 1.找到合适位置插入 2.从下到上,沿着插入节点与根节点的连线,找到不平衡的二叉树 以68为根节点的二叉树平衡,左右子树高度差为1 以60为根节点的二叉树不平衡&a…

【Adobe After Effects】关于ae点击空格不会播放反而回退一帧的解决方案

最近玩ae的时候遇见了一个小问题,就是有时候敲空格,视频没办法播放,反而会回退一帧,经过摸索发现了一个解决办法: 点击编辑---首选项 然后选择“音频硬件” 然后选择正确的默认输出,点击确定即可

Android 13 - Media框架(6)- NuPlayer::Source

Source 在播放器中起着拉流(Streaming)和解复用(demux)的作用,Source 设计的好坏直接影响到播放器的基础功能,我们这一节将会了解 NuPlayer 中的通用 Source(GenericSource)关注本地…

【LeetCode】224. 基本计算器

224. 基本计算器(困难) 方法:双栈解法 思路 我们可以使用两个栈 nums 和 ops 。 nums : 存放所有的数字ops :存放所有的数字以外的操作,/- 也看做是一种操作 然后从前往后做,对遍历到的字符做…

万字精讲——数据结构栈与队列必会OJ练习

W...Y的主页 💕 代码库分享 😊 在之前的博客中,我们学习了栈与队列的基本内容,并且实现了栈与队列。今天我们进行刷题训练,走进栈与队列的世界中去感受一番!!! 目录 括号匹配问题…

redis 7高级篇1 redis的单线程与多线程

一 redis单线程与多线程 1.1 redis单线程&多线程 1.redis的单线程 redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取 (socket 读)、解析、执行、内容返回 (socket 写) 等都由一个顺序串行的主线程处理…

【VsCode】SSH远程连接Linux服务器开发,搭配cpolar内网穿透实现公网访问(1)

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

synchronized锁升级

在 Java SE 1.6中, 锁 一共有 4 种状 态 , 级别 从低到高依次是:无 锁 状 态 、偏向 锁 状 态 、 轻 量 级锁 状 态和重量 级锁 状 态 , 这 几个状 态 会随着 竞 争情况逐 渐 升 级 。 锁 可以升 级 但不能降 级 ,意味…

mysql的登录与退出

mysql是c/s架构,意味着同时要有客户端和服务端 1 找到客户端。mysql.exe的安装目录 打开命令行 2 输入对应的服务器的ip,如果是本地,就是Localhost,如果是远程服务器,那就输入对应ip/域名。并且指定mysql监听的端口 …

workbench连接MySQL8.0错误 bad conversion 外部组件 异常

阿里云搭建MySQL实用的版本是8.0 本地安装的版本是: workbench 6.3 需要升级到: workbench 8.0 https://dev.mysql.com/downloads/workbench/

elment-ui中使用el-steps案例

el-steps案例 样式 代码 <div class"active-box"><div class"active-title">请完善</div><el-steps :active"active" finish-status"success" align-center><el-step title"第一步" /><…

SpringCloud入门实战(十四)Sentinel微服务流量防卫兵简介

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

2023年高教社杯数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米&#xff0c;宽为12米&…

Android相机-HAL-Rockchip-hal3

引言&#xff1a; 对于Android相机的 HAL层而言对上实现一套Framework的API接口&#xff0c;对下通过V4L2框架实现与kernel的交互。不同的平台会有不同的实现方案。主要是对Android HAL3的接口的实现。看看rockchip是怎么支持hal3的&#xff1f; 代码目录&#xff1a; hardw…