1.通过识别潜在的引起相关失效的原因及相关失效的发起点(DFI, Dependent Failure Initiators),确认在设计中充分实现了功能安全所需的独立性或免于干扰的能力 (to confirm that a required independence or freedom from interference is sufficiently achieved in the design by analysing their potential causes or initiators)2.必要时定义安全措施以减轻可能引起的相关性故障 (to define safety measures to mitigate plausible dependent failures, if necessary.)其中,对独立性的要求常见于读者比较熟悉的ASIL分解,ISO 26262中要求ASIL分解的前提是:ASIL分解需要安全要求具有冗余性,且分配给充分独立的架构要素。在上一期(EPB功能安全笔记(16):ASIL分解及其关键点)中结合案例说明了ASIL分解的原理及关键点。而免于干扰的能力(freedom from interference)指的是两个或两个以上的要素之间不存在可能导致违背安全要求的级联失效,这一要求主要是针对软件要素。举个例子,如果功能安全概念往下分配时对软件模块A是ASIL D的要求,而对其他软件模块是QM的要求,那么对于其他模块存在的比如篡改模块A存储地址的风险,被称为对模块A的干扰,需要有相应的安全机制来避免这些干扰。共因失效(左);级联失效(右)文本将对软件要素间的干扰进行说明,同时提供定义避免干扰的安全机制的一些思路,抛砖引玉,希望能给读者带来一些参考。
1.要素共存的准则(Criteria for coexistence of elements)一个系统往往需要同时实现多条ASIL等级不同的功能安全需求,当这些需求分配到软件模块上,不同的模块需要满足不同的ASIL等级,如下图所示。不同的软件模满足不同ASIL等级需求(示例)另外,如今越来越普遍的一种开发模式是将第三方软件集成到某个资源富裕的ECU中,从而节约一个ECU的成本。EPB系统就是一个典型案例。第三方供应商提供的电机控制软件(PBC, parking brake controller)集成到车身稳定性控制系统(ESC, Electric Stability Control)中,VDA305标准中对PBC软件只有ASIL B的要求,而ESC系统则有最高ASIL D的要求,意味着ESC中有需要满足ASIL D要求的软件模块。PBC软件集成到ESC系统中以上两种情况本质上是一类问题,都是要在同一个系统中执行不同ASIL等级要求的软件模块。ISO 26262,part6对此有如下要求:7.4.10:如果嵌入式软件不得不实现不同 ASIL等级的软件组件,或实现安全相关及非安全相关的软件组件,除非软件组件符合 ISO 26262.9第6章定义的共存准则,否则全部嵌入式软件应按照最高ASIL等级来处理。(If the embedded software has to implement software components of different ASILs, or safety-related and non-safety-related software components, then all of the embedded software shall be treated in accordance with the highest ASIL, unless the software components meet the criteria for coexistence in accordance with ISO 26262-9:2011, Clause 6.)如果所有的软件模块统一按照最高ASIL等级来处理,不失为一个省事的办法,因为不用去考虑各个模块间的共存准则,但这也同时意味着开发成本的增加。所以不同的企业会做出不同的选择。而如果选择实现共存准则,具体要求是什么呢?ISO 26262, part9中指出:如果同一要素中存在不同ASIL等级,包括 QM(x)的安全相关子要素,若能证明对分配给要素的每个安全要求,某个子要素不会干扰任何分配了较高ASIL等级的其他子要素,则应仅视该子要素为较低ASIL等级的子要素。否则,应将不具备免于干扰证据的共存安全相关子要素的最高ASIL等级分配给该子要素。(If safety-related sub-elements with different ASILs […] coexist in the same element, then a sub-element shall only be treated […] with a lower ASIL assigned if evidence is made available that […] it cannot interfere with any sub-element with a higher ASIL assigned. Otherwise, this sub-element shall be assigned the highest ASIL of the coexisting safety-related sub-elements for which evidence of freedom from interference is not made available.)简单来说,要素共存的准则为ASIL等级要求低的要素不能干扰到ASIL等级要求高的要素。
2.软件干扰的常见形式及常见措施对于不同ASIL等级的软件模块,要想避免干扰一实现要素共存准则,首先要清楚干扰是如何存在的。ISO 26262, part6的附录D将软件干扰总结为三类:
时序和执行 (Timing and execution)
内存 (Memory)
信息交换 (Exchange of information)
时序和执行
关于时间限制,每个软件分区中执行的软件要素应该考虑如下所列的故障影响:
执行阻塞 (blocking of execution)
死锁 (deadlocks)
活锁 (livelocks)
执行时间的不正确分配 (incorrect allocation of execution time)
件要素间的不正确同步 (incorrect synchronization between software elements)
对于这种情况,可以考虑的处理机制如:循环执行调度、固定优先级调度、时间触发调度、处理器执行时间监控、程序执行次序监控和到达(发生)率监控。举个例子,如下图所示,QM软件模块由于错误地超出了执行时间,导致对有ASIL等级要求的软件模块的执行造成了干扰。具有不同ASIL值的软件组件之间也可能发生这种干扰。对于这种情况,可以通过将“检查点(check points)”引入软件以实现超时监控,从而检测到时序干扰便及时进入安全状态。时序干扰造成的软件要素发生级联失效(示例)
内存(RAM/ROM/EEROM)
关于内存每个软件分区中执行的软件要素可考虑如下所列的故障影响:
内容损坏 (corruption of content)
对已分配给其他软件要素的内存进行读写访问 (read or write access to memory allocated to another software element)
信息交换
关于信息交换,针对每个发送方或接收方,可考虑如以下所列各故障的原因或故障的影响:
信息重复 (repetition of information)
信息丢失 (loss of information)
信息延迟 (delay of information)
信息插入 (insertion of information)
信息伪装或信息的不正确寻址 (masquerade or incorrect addressing of information)
信息次序不正确 (incorrect sequence of information)
信息损坏 (corruption of information)
从发送方传送到多个接收方的信息不对称 (asymmetric information sent from a sender to multiple receivers)
发送方发送的信息只能被部分接收方接收 (information from a sender received by only a subset of the receivers)
通信信道阻塞 (blocking access to a communication channel)
对于“内存”和“信息交换”两类干扰,常见的措施是使用内存保护单元(Memory Protection Unit , MPU)来实现软件分区。MPU是微控制器上的一个特殊单元,它可以限制和监视对存储器映射表某些地址范围的访问。当MPU检测到对保护区的任何写入或执行访问时,该访问将被阻止,并进入相应的安全状态。MPU实现软件分区应满足如下要求:1.一个软件分区内的任务彼此之间不能免于干扰。2.一个软件分区不能改变其他软件分区的代码或数据,也不能控制其他软件分区的非共享资源。3.一个软件分区从共享资源获取的服务不能被另一个软件分区影响。这包括相关资源的性能,以及对资源调度访问的使用率、延迟、抖动和持续时间。MPU图示
下期预告截至到本期文章一直在围绕着功能安全的设计阶段进行讨论,从下一期文章开始将对功能安全的验证以及审核展开讨论。