AutoSar Classic Platform Os功能安全机制解析

这篇具有很好参考价值的文章主要介绍了AutoSar Classic Platform Os功能安全机制解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AutoSar Classic Platform Os功能安全机制解析


前言

功能安全(Function Safety,有时也简称为FuSa)在工业控制、智能网联汽车、航空航天等安全关键领域中已经有了成熟的应用。在国内和国际,也有众多标准定义了它的思路、流程和规范。本系列文章试图以浅显的方式,为这方面的初学者提供一些有益的参考。


一、如何理解功能安全?

我们不妨先来看看国家标准是怎么描述的(GB/T 20438):
fusa 功能安全,功能安全专栏,安全,系统安全,mcu

这里有几个关键点:


1. 功能安全针对谁

功能安全只针对“电气、电子或者可编程电子设备”,我们在汽车领域中常见的ECU,就属于这类设备。有些读者可能会问:汽车上的机械装置,比如刹车踏板,在不在功能安全研究的范围?答案是:不在。

在工程上,通常认为机械装置是绝对可靠的。虽然机械装置也可能存在设计缺陷,或者原材料供应或者在生产阶段引入的缺陷,但这些是质量管理要解决的问题,而不在功能安全的范畴内。

2. 如何理解失效

失效很容易理解,国标里面也讲的很清楚。但是,有一个概念常常和它形成混淆,那就是“缺陷”。在功能安全培训一开始,也有同学常常问一个问题:如果这个ECU过了功能安全认证,是不是说ECU里面的软件就没有Bug了?当然不是这样的。

众所周知,没有缺陷的软件是不存在的。功能安全的目标是通过一定的流程和技术手段,确保这个ECU失效后,能够有其他手段使系统不会产生预期的危害,或者将危害降低到可以接受的范围内。例如,我们可以在系统中增加一个ECU作为它的备份,如果另一个ECU失效,可以第一时间接替失效的ECU,避免出现列车碰撞、刹车失灵等危害。虽然标准中会引入保证软件质量的方法和技术要求,但是消灭缺陷不是功能安全的最终目标。

3. 几个关键概念

[1]共因失效(Common Cause Failure, CCF)

共因失效是在多通道系统里,两个或多个通道由于共同故障导致的失效。避免共因失效最主要的手段是隔离和异构。一方面,在设计上让各个通道相互独立;另一方面,各个通道尽量采用不同的技术来实现,如采用不同的物理原理的传感器(压力/温度…)。

[2]安全完整性等级(Safety Integrity Level, SIL)

SIL越高,故障的风险也越大,对安全性的要求也越高。GB/T 20438把安全完整性等级分为4个级别:SIL1/SIL2/SIL3/SIL4。SIL4对应最高安全完整性等级。

[3]常用的安全技术:三板斧之冗余

fusa 功能安全,功能安全专栏,安全,系统安全,mcu如上面这张图,冗余的关键在于:各个通道需要保持独立性,避免产生上面讲过的共因失效(CCF)。

[4]常用的安全技术:三板斧之诊断
fusa 功能安全,功能安全专栏,安全,系统安全,mcu
通过诊断通道对通道A的运行状态或者输出进行监控,如果发现异常,则运行异常处理程序。异常处理程序可以是采用重启通道A等手段使通道A重新恢复正常工作,也可以是给整个系统输出错误信息,从而将通道A失效的影响降低到可接受的范围内。

[5]常用的安全技术:三板斧之端到端通信保护
fusa 功能安全,功能安全专栏,安全,系统安全,mcu
端到端通信保护的目标是确保参与通信的两端A和B,它们之间的数据收到不存在重复、丢失、延迟、错误、第三方篡改等异常情况。常用的措施有:给数据加CRC校验,增加计数校验等。


二、AutoSar Classic Platform Os功能安全机制解析

AUTOSAR是AUTomotive Open System Architecture的缩写,是由全球汽车制造商、部件供应商及其他电子、半导体和软件系统公司联合建立的一套体系结构。这个体系结构亮点很多,覆盖面也很大,本文仅以其中的Classic Platform Os这一个模块为例,看它采用了哪些技术来达到功能安全预期目标。


1. AutoSar Classic Platform Os简介

AutoSar Classic Platform Os是AutoSar Classic Platform中定义的一个嵌入式实时操作系统标准。这个标准的基础是汽车领域中已经被成熟应用的OSEK标准。虽然在汽车领域中,OSEK已经不是什么新鲜事物,但经过AutoSar Classic Platform扩展之后,这个系统形成了它的独到之处:

1. Os_Application
在OSEK中,最基本的运行单位是任务(Task)和中断(Isr)。而在AutoSar Classic Platform中,在任务和中断的外面又加了一层,称为Os_Application。
Os_Application中可以包含多个任务和中断,这有点类似于进程和线程之间的关系,但又不完全一样。在进行调度时,操作系统处理的最基本单位仍然是任务,Os_Application只是一个逻辑上的容器。这个容器的具体作用和特点,将在下文中单独进行描述。

2. 强实时性
在同一个Os_Application内部,任务调度方式只支持抢占式调度,高优先级任务立即获得处理器并进入执行体。在Os_Application执行结束后,还必须显示调用TerminateApplication触发后续的任务调度。

对于中断,AutoSar Classic Platform继承了OSEK的逻辑:将中断分成两类,一类中断和二类中断。一类中断操作系统不感知,可以抢断正在运行的任务,中断退出时也不触发任务调度,非常适合对中断处理实时性有很高要求的场合。二类中断操作系统可以感知,在退出中断时,操作系统可以触发任务调度。通过以上设计,使AutoSar Classic Platform Os具备了很强的实时性。

3. 静态资源分配
AutoSar Classic Platform Os中,不管是任务还是中断,都是静态配置的,这和通常见到的Ucos这类操作系统有本质区别。

在Ucos中,通过调用OsTaskCreate来创建一个任务。而在AutoSar Classic Platform Os中,每个任务所需要的参数(任务ID、优先级等)和所需要的资源(任务堆栈、执行体指针等),在Os配置阶段(在编译之前),通过专用的配置工具,结合源代码自动生成技术,就被静态指定了。在Os运行时,只能决定哪个任务在什么时候运行,在什么时候退出,而不能对已经指定的任务资源进行动态创建和回收。


2. 空间分区和时间分区

内存分区的作用是使不同功能安全等级的应用在同一个操作系统上共存,且互不影响。比如在一个操作系统之上,构建了3个应用:应用1满足SIL2功能安全等级要求,应用2满足SIL4功能安全等级要求,应用3满足没有功能安全等级要求。很显然,这三个应用所采用的功能安全等级不同,所以在运行时必须确保相互独立,才能避免由于某个应用失效而对其他应用产生不利影响。对于应用来说,确保相互独立,主要从两方面入手:空间和时间,即所谓的空间分区和时间分区。而这也是功能安全标准中所要求的,如前面提到的GB/T 20438以及汽车领域中的ISO26262。AutoSar Classic Platform Os也正是针对ISO26262的要求进行了相应设计。

1. 空间分区

在 AutoSar Classic Platform Os中,一个Os_Application就是一个应用,包含了若干任务和中断。在存储上,Os_Application无非就是由代码段和数据段构成的。这里的数据段包含了像堆栈、BSS段等,因为这些段也都是人为定义的,其本质上也都可以算在数据段里面。所以,空间分区实质上就是把各个Os_Application的代码段和数据段进行隔离,使不同Os_Application只能执行自己的代码段,可以受控访问其他Os_Application的数据段,这样一来,就可以避免Os_Application之间产生不利的相互影响。

同时,在空间分区机制中,还涉及到用户态和特权态的切换。用户态和特权态是处理器的两种工作状态。当处理器工作在用户态时,应用代码不能访问处理器核心控制寄存器等硬件资源,否则会产生异常(Trap)。如果要访问,则必须在应用代码中明确触发一个预定义好的异常,从而使处理器进入特权态,才能访问这些受控硬件资源。通过这种机制,就可以避免应用代码对关键硬件资源产生非法访问。很明显,操作系统应该工作在特权态下,处于用户态的应用代码进出特权态的接口,以及在特权态下所执行的各种操作,都应该由操作系统来提供。

空间分区这一机制在高安全嵌入式实时操作系统中被广泛应用,如Ucos安全版、VxWorks认证版、Qnx微内核操作系统等。但是 AutoSar Classic Platform Os所设计的空间分区方案有自己的特点:AutoSar Classic Platform Os把Os_Application分为两类,一是可信Os_Application,二是不可信Os_Application。在这里,可信Os_Application主要是指由厂商自行开发的应用,而不可信Os_Application主要是指由第三方开发的应用。可信Os_Application可以和操作系统一起,运行在处理器特权态下,不可信Os_Application必须运行在用户态下。这样做的好处是能够减少Os_Application进出特权态而产生的消耗。可别小看这个消耗:由用户态进入特权态,需要引发一次异常,而异常可以看做是中断,那么就会多出1个中断响应时间。如果需要频繁进入特权态,那么这个时间累积起来,还是非常可观的。像Qnx这样的微内核操作系统,把操作系统内核放在特权态,而把外设驱动、上层应用等统统作为应用看待,放在用户态。这样做虽然有它的好处,但是也带来了由于频繁进行处理器状态切换而产生的性能问题。

那么,空间分区如何实现呢?这里就要依赖于处理器本身。只有处理器具备MMU(内存管理单元),或者MPU(内存保护单元),才能实现这一机制。MMU把存储空间划分成多个页面(Page),每个页面可以设置访问权限(只读、可写、可执行等),这样以来,就可以把Os_Application的代码段和数据段映射到不同的页面上,就可以实现不同Os_Application之间的隔离。使用MPU也可以实现,只不过MPU在灵活性上通常比MMU要差一些。

2. 时间分区

时间分区是指,不同应用在运行时间上相互隔离,不能产生相互影响。例如,应用1出现死循环,占着处理器不放,其他应用都没法运行,就是一个典型的例子。

时间分区的实现机制相对简单一些。一般的做法是采用时间片轮转的调度策略,就是每个任务运行完自己的时间片之后,就切换到其他任务运行,这样就可以避免由单一任务运行时间过长,使其他任务“饿死”的问题。但在AutoSar Classic Platform Os中,由于没有时间片轮转调度机制,所以也就不能采用这种方式。

AutoSar Classic Platform Os定义了时间保护机制,变相实现时间分区。时间保护机制针对任务或者第二类中断,通过预先配置的时间上限,来控制任务或者中断的执行时间、执行频次和锁定资源的时间,具体如下:
1、执行时间上限:当任务或者中断的执行时间达到该上限时,操作系统强制结束该任务或者中断,避免任务或者中断运行时间过长;
2、间隔时间下限:当任务或者中断到来的间隔小于该下限时,操作系统需要捕获这一异常,避免系统出现时序错误;
3、锁定资源上限:当任务或者中断锁定资源的时间达到该上限时,操作系统强制结束该任务或者中断,避免任务或者中断长时间占用资源而阻塞其他任务或者中断。


3. 保护类机制

AutoSar Classic Platform Os在错误处理方面主要包括三块内容:堆栈保护、服务保护和Hook机制。

1. 堆栈保护

堆栈保护的主要目的是避免出现堆栈溢出。堆栈是任务或者中断执行所必须依赖的数据结构。堆栈通常用来存放函数入参、出参、局部变量等运行时数据。堆栈有生长方向,向低地址生长还是向高地址生长,不同处理器定义有所不同。

堆栈保护的实现同样依赖于处理器是否具备MMU或者MPU。如果具备,则利用MMU或者MPU的页保护/段保护机制对堆栈进行保护,如果堆栈指针超出了页面/段的保护范围,则会产生异常。如果不具备MMU或者MPU,AutoSar Classic Platform Os同样要求实现一种简化的堆栈保护机制,但是这个时候,只能在发生任务调度或者中断发生时去判断任务或者中断是否已经发生了堆栈溢出,而无法在任务或者中断执行过程中实时监控。

对于不具备MMU或者MPU的场景,这里介绍一种实现方法:
1、在操作系统初始化阶段,将每个任务或者中断所对应的堆栈(就是一个静态数组)初始化为预定义的魔术字,例如0xCC;
2、在任务调度时,在进入待执行任务体之前,首先判断该任务堆栈顶端数组元素值是否仍未预定义的魔术字0xCC,如果不是,则说明栈顶已经被改写过,说明任务已经用满了整个堆栈,有可能产生堆栈溢出;
3、在中断(二类中断)到来时,咱中断响应函数(Isr)头部,执行第二点中的操作,判断中断是否已经用满了整个堆栈。

2. 服务保护

服务保护中的“服务”是指操作系统对外提供的API编程接口,服务保护的意义就是要确保API编程接口本身抵抗出错的能力。具体包含以下三类场景:
1、API接口入参合法性检查;
2、API接口上下文错误检查。例如:在禁止调用某接口的场景下调用了该接口,比如在操作系统启动时,在StartupHook里面不能调动启动任务的接口;
3、排除可能导致出错的调用场景。例如:在任务结束时,必须调用相应接口释放所占用的资源;在Os_Application之间相互调用接口时,需要检查该接口的调用权限。

服务保护贯彻了功能安全标准中提倡防御式编程这一思想。

3. Hook机制

Hook顾名思义就是:钩子。它的作用是给用户向操作系统的执行过程插入自定义代码提供一种接口。以StartupHook为例:这个Hook由用户自行定义,其调用的时间点是在操作系统初始化过程中。通过这个接口,用户可以向系统初始化过程插入自己想要的代码,例如初始化某些硬件寄存器、初始化某些全局变量等等。

AutoSar Classic Platform Os中定义的Hook类型很多,大多数是用来为用户插入错误处理代码而提供的,这里就不再一一赘述了。

结语:功能安全的思想和方法千头万绪,AutoSar Classic Platform Os也只是涉及到了其中一部分机制,其他相关内容后续再和大家分享。文章来源地址https://www.toymoban.com/news/detail-622419.html

到了这里,关于AutoSar Classic Platform Os功能安全机制解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • [AutoSar]BSW_OS 06 Autosar OS_Alarms

    [AutoSar]BSW_OS 06 Autosar OS_Alarms

       嵌入式、C语言、autosar、OS、BSW 项目 Value OS autosar OS autosar厂商 vector , 芯片厂商 TI 英飞凌 编程语言 C,C++ 编译器 HighTec (GCC) 回到总目录   不管何种单片机,其硬件肯定都会有晶振,它将为系统提供基本的时钟信号。autosar OS可以用这个基准时钟去触发 alarms 和 schedul

    2024年01月23日
    浏览(14)
  • [AutoSar]BSW_OS 05 Autosar OS_schedule table

    [AutoSar]BSW_OS 05 Autosar OS_schedule table

       嵌入式、C语言、autosar、OS、BSW 项目 Value OS autosar OS autosar厂商 vector , 芯片厂商 TI 英飞凌 编程语言 C,C++ 编译器 HighTec (GCC) 回到总目录   Alarms(定时器)是用于实现定时触发任务的机制。然而,实际系统中可能会存在一些与 Alarms 触发相关的缺陷或问题。以下是一些

    2024年01月20日
    浏览(14)
  • 【小猫爪】AUTOSAR学习笔记12-功能安全之E2E模块

    【小猫爪】AUTOSAR学习笔记12-功能安全之E2E模块

      从这一节开始,正式步入功能安全专题。这一节先来看一个与Communication Stack强相关的且与功能安全有关的模块,它就是E2E模块。   E2E在AUTOSAR架构中,它被定义成是一个函数库。E2E 可以保护安全相关的数据交换,避免数据交换过程中通信链路造成的错误。E2E通信保护库

    2023年04月25日
    浏览(10)
  • 【AUTOSAR】 项目和代码详解(二)----RTA-OS配置

    【AUTOSAR】 项目和代码详解(二)----RTA-OS配置

    RTA-OS是一个静态可配置的、先发制人的实时操作系统用于高性能、资源受限的应用程序。RTAOS是开放标准AUTOSAR R3的完整实现。AUTOSARR4.0(含多核)、AUTOSAR R4.1、AUTOSAR R4.2、AUTOSAR R4.3操作系统规范,也完全符合版本2.2.3的OSEK/VDX操作系统的标准。OSEK现已在ISO 17356中标准化。 rtaoscfg是

    2024年02月07日
    浏览(84)
  • npm ERR! notsup Unsupported platform for n@9.0.0: wanted {“os“:“!win32“,“arch“:“any“} (current: {“os

    出现场景: 执行 npm install -g n 时,本意是借助n模块去更新node版本,出现npm ERR! notsup Unsupported platform for n@9.0.0: wanted {\\\"os\\\":\\\"!win32\\\",\\\"arch\\\":\\\"any\\\"} (current: {\\\"os\\\":\\\"win32\\\",\\\"arch\\\":\\\"x64\\\"}) 看了一位网友的解决办法是直接在后面--force 运行成功之后,再次执行n -v 会出现\\\'\\\"bash\\\"\\\' 不是内部或外部命令

    2024年02月12日
    浏览(6)
  • 深度解析C++异常处理机制:分类、处理方式、常见错误及11新增功能

    异常是程序在运行过程中出现非正常情况的处理机制。当出现异常时程序会停止运行并调用异常处理程序。 异常可以分为内置异常和自定义异常 2.1 内置异常 C++ 标准库提供了许多预定义的异常类,称为内置异常,包括以下几种: std::exception :所有标准异常类的基类。 std::

    2024年01月18日
    浏览(15)
  • 深度解析:算法推荐服务的安全评估与备案机制

    在当今数字化快速发展的时代,算法推荐服务已经成为行业内不可或缺的重要组成部分。这些服务,通常采用复杂的机器学习算法,可以有效地匹配用户需求,提供定制化的内容推荐。然而,算法推荐服务的广泛应用同时也带来了一系列的安全和隐私问题。因此,对这些服务

    2024年02月16日
    浏览(8)
  • 【安全】web中的常见编码&浅析浏览器解析机制

    【安全】web中的常见编码&浅析浏览器解析机制

    目录 常见编码 一、ASCII码 二、URL编码  三、Unicode编码 四、HTML实体编码 结合编码理解浏览器解析机制         ASCII (American Standard Code for Information Interchange,美国信息交换标准代码)               计算机内部,所有信息最终都是一个二进制值。每一个二进制位(

    2024年02月15日
    浏览(11)
  • 应用案例 | 升级OPC Classic到OPC UA,实现安全高效的数据通信

    应用案例 | 升级OPC Classic到OPC UA,实现安全高效的数据通信

    OPC (OLE for Process Control,用于过程控制的OLE)是工业自动化领域中常见的通信协议。它提供了一种标准化的方式,使得不同厂商的设备和软件可互相通信和交换数据。OPC Classic是旧版OPC规范,通过使用COM(Component Object Model,组件对象模型)技术来实现数据交换。 然而,基于

    2024年02月11日
    浏览(13)
  • 汽车电子笔记之:基于AUTOSAR的多核监控机制

    汽车电子笔记之:基于AUTOSAR的多核监控机制

    目录 1、概述 2、系统监控的目标 2.1、任务的状态机 2.2、任务服务函数 2.3、任务周期性事件 2.4、时间监控的指标 2.5、时间监控的原理 2.6、CPU负载率监控原理 2.6.1、设计思路 2.6.2、监控方法的评价 3、基于WDGM模块热舞时序监控方法 3.1、活跃监督 3.2、截至时间监督 3.3、逻辑监

    2024年02月10日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包