功能安全中的软件隔离(二)

来源:知乎-曹文锋
2020-10-21
4238

上篇说到ASIL等级的问题,因为有了不同的ASIL等级,所以就有了不同ASIL等级之间需要隔离(Partition)这个概念,需要避免低等级的任务修改高等级的数据,造成高等级使用了不可信的数据,影响安全功能。在软件架构设计(Software architectural design)阶段,完成静态架构和动态架构之后,需要做软件独立性分析,这里重点就是分析这部分内容,分析结果有可能影响不同模块ASIL等级的调整。

在ISO26262中,总结了一下,关于软件隔离,有以下要求:

重点如下:


1,共享资源的使用方式应确保软件分区免于干扰:
  一个软件分区内的任务彼此之间不能免于干扰;
  一个软件分区不能改变其它软件分区的代码或数据,也不能访问其它软件分区的非共享资源;
  一个软件分区从共享资源获取的服务不能被另一个软件分区影响。这包括相关资源的性能,以及计划访问资源的使用率、延迟、抖动和持续时间。 
2,由专用的硬件功能或等效方法来支持软件分区(该要求适用于 ASIL D,按照 4.3)
3,执行软件分区的软件部分,按照分配给软件分区要求的相同 ASIL 等级进行开发,或按照比分配给软件分区要求的最高 ASIL 等级更高的一个 ASIL 等级进行开发;
      注: 一般来说操作系统提供或支持软件分区
,4,在软件集成和测试(按照第 10 章)过程中执行软件分区的验证。

简单的说,基本上要求硬件上最好具备隔离功能,软件上在task和内存使用上需要隔离

另外,在PART6中隔离额外还提了对Freedom from interference between software elements 要求,见 

这里具体对下面几点提了要求(见标准PART6 Annex D)
*Achievement of freedom from interference 
*Timing and execution
*Memory
*Exchange of information


下面个人谈一谈工程中如何实现。从AUTOSAR角度在软硬件上粗略说一下。

*硬件上
如果使用两块MCU实现系统功能,则不管是在CPU还是内存上已完成物理性独立,则隔离相对容易做到,重点问题则放在了两块MCU的同步性上。我们讨论一下一块MCU的情况下如何做到。做功能安全一般会专门选取已有功能安全设计概念的MCU,现在各大芯片厂商为了争夺这块市场,都已经推出了最高到ASIL D等级功能安全的MCU。例如飞思卡尔MPC5643L,英飞凌的AURIX系列,TI的TMS570芯片等(一般还会搭载自己的电源芯片,绑定出售)。这些芯片的配置都有一些共同之处。例如都具备内核锁步(lockstep)工作模式(一个内核工作的同时另一个内核进行监测)。具有内存保护模块(MPU),具有故障处理模块,具备地址访问和内存数据的ECC校验等。

*软件上

硬件上软件隔离最相关的是MPU(Memory Protection Unit),MPU简单的说是可以给不同的ASIL等级分配不同的内存空间,这些内存空间互相访问有限制,同时寻址的路径也是互相隔离的。避免了低等级的任务修改了高等级的数据问题。
从AUTOSAR的实现来看,软件隔离主要通过OS和RTE实现。硬件上提供的内存保护单元,实际上就是依赖于OS的OS Application的Trusted和Non-Trusted设置,以及RTE中不同的OS Applications见的IOC (InterOS-Application Communicator)接口通讯来实现的。

在AUTOSAR的AUTOSAR_SRS_OS.pdf这个文档中有下面这条是对隔离提的主要要求
    The operating system shall prevent an OS Application from modifying the memory of other OS-Applications。 需要提供防止OS Applications互相修改内存数据的功能,具体描述如下:

*其中,OS Application的概念如下:
The OS shall provide a higher-level abstraction to allow the user to group existing OS objects (tasks, ISRs etc.) so that objects in the group can be manipulated only by objects in the same group. Such a group is called an OS-Application.

简单的说,OS中不同的OS Applications互相访问是有权限的。可设置不允许访问,或访问报警等,这样可以根据要求得到软件隔离的效果。
这条需求实现是基于OS中的Trusted和Non-Trusted的OS-Application做到的。两个区域之间的访问对于read,write,excution等限制做了配置和处理,一旦限制访问,就触发回调函数进入报警或处理。

如此,实现软件隔离。


收藏
点赞
2000