Autosar-Os是怎么运行的?(时间保护)

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


1.功能概述

AUTOSAR OS 的四大可定制类型凸显了时间保护(Timing Protection)这一关键功能机制的重要性。作为实时操作系统,AUTOSAR OS 需要在预设时限内精确执行任务。然而,超时错误偶有发生,此时系统需采取有效的时间保护措施以预防此类情况。

Deadline Monitoring 是常见的时间保护手段。一旦 OS 检测到任务运行超时,它会触发相应的 Hook 函数以报告系统错误。然而,AUTOSAR OS 并未采用监控截止时间的方法来实现时间保护,因为这种方式往往无法精确识别错误的根源。

以任务 1 为例,即便其运行时间超过截止时间,也不一定意味着任务 1 本身存在错误。实际上,可能是在执行任务 1 之前,任务 2 频繁抢占资源或长时间阻塞资源访问,间接导致任务 1 超时。若仅因任务 1 超时而判断其为错误并停止,那么真正的罪魁祸首任务 2 则可能继续逍遥法外,这显然不合理,也无法有效保护 OS 中各任务的时间管理。

为了更好地说明这一点,我们可以设想一个操作系统,其中包含任务 A、B、C,每个任务都有明确的优先级、执行时间和截止时间,如下表所示:

假设所有任务均于时间 0 准备就绪,执行流程将严格遵循以下时序,确保所有任务均按时完成。

  • 任务 A 因最高优先级而首先执行。
  • 随后,任务 B 在 1 个 Tick 后启动,任务 C 则在 3 个 Tick 后开始。
  • 任务 C 执行 1 个 Tick 后被任务 A 中断,待任务 A 完成后,任务 C 继续执行。
  • 至第 10 个 Tick,任务 C 完成,整个过程中无超时现象,且剩余 1 个 Tick 的空闲时间。

现考虑任务 A 与 B 出现行为异常的情形。异常状态如下图所示:

  • 任务 A 的第二个周期与任务 B 的第一个周期均出现运行时间延长的情况,但均在截止时间之内完成。
  • 任务 B 在第二个周期提前启动,同样未超过其截止时间。
  • 尽管任务 C 按照正常时序执行,但由于任务 A 与任务 B 的异常行为,导致任务 C 的执行超时,从而引发超时错误。

因此,从上述案例的分析中,我们可以得出以下结论:在固定优先级抢占式操作系统,如 AUTOSAR OS 中,任务或中断服务例程(ISR)是否能够满足其截止日期,主要取决于三大关键因素:

  1. 任务/ISR 的执行时间: 这包括任务从获得 CPU 执行权到主动放弃 CPU 的执行周期时间,以及第二类 ISR 从开始到结束的总运行时间。

  2. 任务/ISR 因低优先级任务/ISR 锁定共享资源或禁用中断而遭受的阻塞时间: 这涉及任务或 ISR 持有共享资源的时间(从 GetResource 调用到 ReleaseResource 调用的时间),操作系统中断被任务/ISR 挂起的时间(OSInterrupts 关闭到打开的时间),以及任务/ISR 暂停/禁用所有中断的持续时间(AllInterrupts 关闭到打开的时间)。

  3. 任务/ISR 的到达间隔率: 这指的是任务从连续两次获得 CPU 执行权之间的间隔时间,包括任务从 SUSPENDED 状态转换到 READY 状态的时间,以及从 WAITING 状态转换到 READY 状态的时间。对于第二类 ISR,这还包括其连续两次执行之间的间隔时间。

针对上述三大关键因素,AUTOSAR OS 采用了以下三种时间保护机制:

  1. 执行时间保护: 确保任务或第二类 ISR 的执行时间在静态配置的上限之内,称为执行预算。这主要保护任务的实际执行时间和第二类 ISR 的完整运行周期。

  2. 锁定时间保护: 确保任务或 ISR 锁定共享资源或禁用中断的时间不超过静态配置的上限,称为锁定预算。这主要涉及对共享资源持有时间、操作系统中断挂起时间以及所有中断禁用时间的监控。

  3. 到达间隔时间保护: 保证任务或第二类 ISR 到达间隔时间在静态配置的下限之上,称为时间帧。这确保了任务从 READY 状态转换的间隔时间以及第二类 ISR 的执行间隔符合预设要求。

下图显示了执行时间保护和到达间隔时间保护如何与 AUTOSAR OS 的任务状态转换模型进行交互。

特别的,值得注意的是 AUTOSAR OS 的时间保护机制具备以下基本特性:

  1. 任务与二类中断的专用性: 时间保护机制仅适用于任务和第二类中断,而不适用于第一类中断。这是因为在 AUTOSAR OS 中,第一类中断通常被设计为异步事件处理,其执行时间通常较短且难以预测,因此不适用于时间保护。

  2. OS 启动先决条件: 在操作系统(OS)未启动之前,时间保护机制将不会生效。这是因为时间保护机制依赖于 OS 提供的服务和资源,如任务调度、中断管理等,而这些服务在 OS 未启动前是不可用的。

  3. 信任级别的要求: 在 trusted OS-Applications 场景中,所有的时间信息都必须准确无误,否则系统可能会在运行时发生失败。这是因为信任级别的应用通常对实时性和可靠性有更高的要求,任何时间上的误差都可能导致系统行为异常。然而,对于 non-trusted OS Applications,时间保护机制可以作为加强可执行对象之间定时界限的一个手段,以提高系统的稳定性和可靠性。

  4. 中断禁用限制: DisableAllInterrupts 和 SuspendAllInterrupts 等相关接口并不能关闭时间保护定时器中断。这是因为时间保护定时器中断是确保系统实时性和任务截止日期的重要机制,如果允许这些接口关闭时间保护定时器中断,将会破坏时间保护的完整性和有效性。因此,AUTOSAR OS 设计规定这些接口不得影响时间保护定时器中断的正常工作。

关于时间保护机制在检测到时间异常后的具体处理细节,AUTOSAR_SWS_OS 7.7.2.2 Requirements 规范中进行了明确的规定。当时间保护机制检测到任何与时间相关的异常时,会调用 ProtectionHook 函数,并传递相应的错误码,以便应用程序或系统能够采取适当的措施进行响应。

  • E_OS_PROTECTION_ARRIVAL:当触发到达间隔时间保护时,意味着任务或 ISR 的到达间隔时间违反了静态配置的下限(时间帧)。这种情况下,ProtectionHook 函数将收到 E_OS_PROTECTION_ARRIVAL 错误码。这通常表明系统调度或任务管理存在问题,可能需要重新评估任务的时间需求或调度策略。

  • E_OS_PROTECTION_TIME:当触发执行时间保护或锁定时间保护时,意味着任务或 ISR 的执行时间或锁定时间超过了静态配置的上限(执行预算或锁定预算)。在这种情况下,ProtectionHook 函数将收到 E_OS_PROTECTION_TIME 错误码。这通常表明存在代码效率问题、资源争用或优先级配置不当等问题,需要进行性能调优或资源分配调整。

  • E_OS_PROTECTION_LOCKED:当触发锁定时间保护时,意味着任务或 ISR 因锁定共享资源或禁用中断而遭受的阻塞时间超过了静态配置的上限。此时,ProtectionHook 函数将接收到 E_OS_PROTECTION_LOCKED 错误码。这通常表明资源管理或中断控制存在问题,可能需要优化资源访问方式、减少资源争用或调整中断处理策略。

ProtectionHook 函数的具体实现取决于应用程序或系统的需求。在接收到这些错误码后,它可以用于记录错误信息、触发警报、执行恢复操作或采取其他适当的措施来应对时间异常。

2.硬件实现

以英飞凌芯片为例:

TriCore 架构的时间保护定时器具有以下功能:

  • 单调递减: 时间保护定时器以 CPU 主频的频率单调递减。这意味着定时器从写入的非零值开始,以固定的时钟周期逐渐递减至零。

  • 启动与关闭: 通过写入非零值来启动定时器,而写入零值则关闭定时器。这种机制允许软件精确地控制何时开始和停止时间监控。

  • 异常陷阱触发: 当定时器到期(即递减至零)时,会触发一个异常陷阱(Class-4Tin-7)。这是一个硬件级别的中断,用于通知软件有一个时间保护事件发生了。重要的是,这个异常陷阱是不能通过 DisableAllInterrupts/SuspendAllInterrupts 等接口关闭的,因为它是由硬件直接管理和触发的。

  • 多核支持: 每个核都配备了独立的时间保护定时器。以 TC397 为例,它有 6 个核,每个核有 3 个独立的时间保护定时器。这意味着总共有 6 * 3 = 18 个时间保护定时器可供使用。这种设计允许每个任务或第二类中断服务例程(ISR)在不同的核上运行,并独立地受到时间保护的监控。

另外,TriCore 架构还提供了一个 CPU_CCNT 的寄存器,该寄存器在手册Infineon-AURIX_TC3xx_Architecture_vol1-UserManual-v01_00-EN中的 12.11 Performance Counter Registers 章节可以查阅到,该寄存器会记录当前的 CPU 时钟周期,这个寄存器非常适合用来进行间隔时间保护。

3.功能实现

3.1Scalability Class

Os-OS配置项中的Scalability Class选择SC2或者SC4。

Autosar OS可分为四个等级:SC1~SC4)(SC: Scalability Class,可伸缩的类型 )。各等级支持的功能如下:

3.2Timming Protection

OsTaskAllInterruptLockBudget :一个任务在其执行期间可以锁定所有中断的最大时间(通过suspend endallinterrupts()或DisableAllInterrupts()(以秒为单位)

TaskExecutionBudget:一个任务最大允许执行时间

TaskOsInterruptLockBudget:一个任务运行锁定共享资源或禁用中断的时间的最大时间(通过suspend endosinterrupts())(以秒为单位)。

TaskTimeFrame:连续Task之间的最小到达时间。

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

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

相关文章

Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)

目录 什么是软件包 Linux 软件包管理器 apt 认识apt 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式下各指令汇总 vim底行模式个指令汇总 Linux编译器 - gcc/g gcc/g的作…

计算机网络 (62)移动通信的展望

一、技术发展趋势 6G技术的崛起 内生智能:6G将强调自适应网络架构,通过AI驱动的智能算法提升通信能力。例如,基于生成式AI的6G内生智能架构将成为重要研究方向,实现低延迟、高效率的智能通信。信息编码与调制技术:新型…

【卫星通信】链路预算方法

本文介绍卫星通信中的链路预算方法,应该也适用于地面通信场景。 更多内容请关注gzh【通信Online】 文章目录 下行链路预算卫星侧参数信道参数用户侧参数 上行链路预算链路预算计算示例 下行链路预算 卫星侧参数 令卫星侧天线数为 M t M_t Mt​,每根天线…

详细解释java当中的所有知识点(前言及数据类型及变量)(第一部分)

会将java当中的所有的知识点以及相关的题目进行分享,这是其中的第一部分,用红色字体标注出重点,以及加粗的方式进行提醒 目录 一、Java语言概述 1.Java语言简介 2.语言优势 二、main方法 1.Java程序结构组成 2.运行Java程序 3.注释 4.…

MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询

介绍 在开发商品模块时,通常使用分表的方式进行查询以及关联。在通过表连接的方式进行查询。每个商品都有不同的分类,每个不同分类下面都有商品规格可以选择,每个商品分类对应商品规格都有自己的价格和库存。在实际的开发中应该给这些表进行…

【竞技宝】LOL:两大赛区胜率达到78.6!

北京时间1月29日,英雄联盟2025新赛季正在如火如荼的进行之中,目前由于新春佳节的到来,LCK和LPL赛区都进行了短暂的休赛期。在新春佳节之前的比赛中,由于新版本以及全局BP(LPL)的到来,很多英雄都…

软件测试 —— jmeter(2)

软件测试 —— jmeter(2) HTTP默认请求头(元件)元件作用域和取样器作用域HTTP Cookie管理器同步定时器jmeter插件梯度压测线程组(Stepping Thread Group)参数解析总结 Response Times over TimeActive Thre…

信息安全专业优秀毕业设计选题汇总:热点选题

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光,一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整理…

在线课堂小程序设计与实现(LW+源码+讲解)

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

vim如何解决‘’文件非法关闭后,遗留交换文件‘’的问题

过程描述: 由于我修改文件时(一定得修改了文件,不做任何修改不会产生这个问题)的非法关闭,比如直接关闭虚拟机,或者直接断开远程工具的远程连接,产生了以下遗留交换文件的问题: 点击…

SpringBoot 数据访问(MyBatis)

SpringBoot 数据访问(MyBatis) 向 SQL 语句传参 #{} 形式 #{}:如果传过来的值是字符串类型。那两边会自动加上 单引号。当传递给 #{} 的参数值是非字符串类型(如整数、浮点数、布尔值等),MyBatis 不会为这些值添加引…

SpringBoot整合Swagger UI 用于提供接口可视化界面

目录 一、引入相关依赖 二、添加配置文件 三、测试 四、Swagger 相关注解 一、引入相关依赖 图像化依赖 Swagger UI 用于提供可视化界面&#xff1a; <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactI…

【ArcGIS遇上Python】批量提取多波段影像至单个波段

本案例基于ArcGIS python,将landsat影像的7个波段影像数据,批量提取至单个波段。 相关阅读:【ArcGIS微课1000例】0141:提取多波段影像中的单个波段 文章目录 一、数据准备二、效果比对二、python批处理1. 编写python代码2. 运行代码一、数据准备 实验数据及完整的python位…

[EAI-027] RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation

Paper Card 论文标题&#xff1a;RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者&#xff1a;Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接&#xff1a;https://arxiv.org/ab…

可扩展架构:如何打造一个善变的柔性系统?

系统的构成:模块 + 关系 我们天天和系统打交道,但你有没想过系统到底是什么?在我看来,系统内部是有明确结构 的,它可以简化表达为: 系统 = 模块 + 关系 在这里,模块是系统的基本组成部分,它泛指子系统、应用、服务或功能模块。关系指模块 之间的依赖关系,简单…

【LLM】DeepSeek-R1-Distill-Qwen-7B部署和open webui

note DeepSeek-R1-Distill-Qwen-7B 的测试效果很惊艳&#xff0c;CoT 过程可圈可点&#xff0c;25 年应该值得探索更多端侧的硬件机会。 文章目录 note一、下载 Ollama二、下载 Docker三、下载模型四、部署 open webui 一、下载 Ollama 访问 Ollama 的官方网站 https://ollam…

讯飞智作 AI 配音技术浅析(二):深度学习与神经网络

讯飞智作 AI 配音技术依赖于深度学习与神经网络&#xff0c;特别是 Tacotron、WaveNet 和 Transformer-TTS 模型。这些模型通过复杂的神经网络架构和数学公式&#xff0c;实现了从文本到自然语音的高效转换。 一、Tacotron 模型 Tacotron 是一种端到端的语音合成模型&#xff…

JavaScript 进阶(下)

原型 what 首先&#xff0c;构造函数通过原型分配的函数是所有对象所 共享的。 然后&#xff0c;JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象 这个对象可以挂载函数&#xff0c;对象实…

Effective Objective-C 2.0 读书笔记—— 消息转发

Effective Objective-C 2.0 读书笔记—— 消息转发 文章目录 Effective Objective-C 2.0 读书笔记—— 消息转发前言消息转发机制概述动态方法解析处理dynamic的属性用于懒加载 消息转发快速消息转发完整消息转发 总结 前言 在前面我学习了关联对象和objc_msgSend的相关内容&a…

Hive:struct数据类型,内置函数(日期,字符串,类型转换,数学)

struct STRUCT&#xff08;结构体&#xff09;是一种复合数据类型&#xff0c;它允许你将多个字段组合成一个单一的值, 常用于处理嵌套数据&#xff0c;例如当你需要在一个表中存储有关另一个实体的信息时。你可以使用 STRUCT 函数来创建一个结构体。STRUCT 函数接受多个参数&…