自学内容网 自学内容网

功能安全之“不同SIL软件的隔离原则”

引言

轨道交通安全相关系统设计中,会遇到不同SIL等级的软硬件处于同一系统内的情况,比如一个系统中既有SIL4软件,又有SIL2软件;或者一个系统中既有SIL2软件,又有SIL0软件。这种情况下,要求安全功能与非安全功能、低安全等级组件与高安全等级组件进行隔离,目的是非安全功能不对安全功能产生影响。由于轨道交通功能安全标准没有说明符合此要求的设计方法,不同的人理解起来会有偏差,呈现出两个极端:

情况1:按照这个要求做隔离,安全和非安全功能在不同的硬件上,软件自然也不在一起,但仍存在相互影响的情况;

情况2:设计之初未注意隔离要求,安全和非安全的软硬件在一起,耦合程度高。

本篇来讲讲如何理解不同安全等级功能的隔离原则,不满足隔离会产生的问题,及解决方法。

一、独立性丧失导致的问题

硬件隔离要求是比较好理解的,如电源、电磁兼容、高低温、振动、共有接口、共用硬件资源等带来的共因失效影响,隔离是避免不同SIL等级的硬件组件相互影响的主要控制措施。下面主要看看软件独立性丧失存在的问题:

所谓安全软件,目的是在确定的时间点产生如设计预期的功能,比如列车自动制动功能软件,要求就是当检测到列车符合超速防护的条件时,在限定的时间内输出紧急制动指令。当安全功能软件和非安全功能软件处于同一系统中时,两者会在以下方面(但不限于)产生关联性:

共享内存;

共享外设;

共享处理器时间;

软件之间的数据交互;

组件失效导致软件崩溃(如堆栈溢出、除零异常、指针越界)

举两个例子:

例1:在计算机系统中,动态内存中存储每个线程的堆栈,就是每个软件任务自身的数据空间,当一个非安全功能软件由于设计缺陷导致内存越界,给它分配的内存范围会侵入安全软件任务的内存空间,造成安全软件的数据被篡改,安全软件的逻辑运算结果受到了非安全软件的影响。

例2,不同软件任务共享处理器运算时间,尽管在操作系统中可以对不同任务分配优先级,高优先级任务可以中断低优先级任务保证实时性,但这些软件任务在通用性操作系统中都运行在用户空间,存在低优先级任务在特殊情况下堵塞高优先级任务的可能,一种情况是通信任务在处理时会进入中断,进入中断后将会禁止其它任务的执行,当存在设计缺陷时会阻碍安全软件的执行实时性,影响软件的实时性(下图)。
在这里插入图片描述
在软件变更管理方面:安全软件涉及到系统的安全功能实现,要求软件数据结构尽量简化,逻辑关系简单,与其它软件模块耦合度低,这样的软件可靠性高,软件变更少;非安全软件关联的功能可能有人机接口、日志存储、维护更新、界面显示等,在实际应用中需求迭代快,软件经常会发生变更,这样两种不同性质的软件耦合在一起,不可避免会影响到安全软件。

二、功能安全标准条款要求

先来看看标准中的要求:

轨道交通功能安全标准EN50128-2011的要求
7.3.4.9 Where the software consists of components of different software safety intearity levels then al of thesoftware components shall be treated as belonging to the highest of these levels unless there is evidence ofindependence between the higher software safety integrity level components and the cy soitat sa tyintegrity level components. This evidence shall be recorded in the Software Architecture Specification.

中文为:当软件包括不同安全完整性等级软件组件,所有软件组件应视为最高等级要求,除非有高安全完整性和低安全完整性软件之间的独立性证据。

条款要求的具体解释,标准中没有说明。
功能安全标准IEC61508-3的要求

7.4.2.8 Where the software is to impleme!t both safety and non-safety functions, then all ofthe software shall be treated as safety-relaed,unless adequate design measures ensure thatthe failures of non-safety functions cannot adversely affect safety functions
ent safety functions of different safety integrity7.4.2.9 Where the software is to implemated as belonging to the highest safety integritylevels, then all of the software shall be trlevel, unless adequate independence betveen the safety functions of thedifferent safetysign.lt shall be demonstrated either (1)thatintegrity levels can be shown in the dindependence is achieved by both in thespatial and temporal domains, or(2)that anyviolation of independence is controledThe justification for independence shall bedocumented

NOTE See AnnexF for techniques for achieving oneaspect of independence of software

不同安全完整性软件组件之间的隔离称为independence(独立性),IEC61508的要求更进了一步,符合软件独立性应满足两个要求之一:

独立性在软件的空间域和时间域得到了保证,或;

违背独立性的行为应进行控制,并在附录F中给出了推荐技术。

汽车功能安全标准ISO26262-6的要求

7.4.10 lf the embedded software has to implement software components of different ASlLs, or safety-relateoand non-safety-related software components, then all of the embedded sofware shall be treated inaccordance with the highest ASlL, unless the software components meet the wfbrl ir ccexuietenk inaccordance with lS0 26262-9:2011, Clause 6.

如果嵌入式软件不得不实现不同 ASIL等级的软件组件,或实现安全相关及非安全相关的软件组件,除非软件组件符合 ISO26262-9:2011第6章定义的共存准则,否则全部嵌入式软件应按照最 高 ASIL等级来处理。

ISO26262-9:2011第6章共存准则,即避免未分配 ASIL等级的子要素或分配了较低 ASIL等级的子要素,对分配了较高 ASIL等级 的子要素发生了级联失效。

三、实现软件独立性的技术

第一部分说的两个例子就是典型的非安全软件在空间域和时间域对安全软件产生了非预期的影响,结果可能导致安全软件无法输出预期的指令、无法在规定时间输出指令。现实情况中,安全软件和非安全软件存在于同一处理器系统的情况经常存在,如安全系统也有图形显示,网络通信和日志存储等非安全功能。

因此,实现软件独立性的技术变得很重要,IEC61508-3从空间域和时间域独立性各给出了一些推荐技术,原文的描述较为专业,尽量用通俗易懂的语言描述:

3.1 实现空间独立性的技术

采用硬件方式对不同等级的软件数据进行保护;

采用具有软件内存保护的操作系统实现,同时硬件支持内存保护;

没有用以上技术的硬件和软件操作系统,需要根据个体情况进行严格的设计、源代码和目标代码分析,意思是自己想办法以避免非法内存篡改,这种在比较简单的嵌入式系统较为常见;

高安全等级软件的数据不会被低安全等级软件非法更改,如低安全等级软件的数据避免传送到高安全等级软件。
在这里插入图片描述
3.2 实现时间独立性的技术

操作系统对不同软件分配的时间是确定性的,即确定性调度;

操作系统对不同软件分配的优先级是确定性的,即严格优先级调度;

监控软件执行时间,超出执行时间终止其执行,并确保终止后不会有危险侧输出;

操作系统采用时间切片方式,确保每个软件任务都能执行到。PS:个人认为这种技术并不能完全解决时间延迟抖动问题,如存在中断时,非硬实时操作系统无法规避软件任务被中断拉长的情况。

除标准中介绍软件的独立性技术外,系统层面防护软件独立性丧失的技术也有必要考虑在内,比如:

软件数据接收方对于数据有效性和实时性的检查;

采用硬件编码技术对软件输出数据的正确性进行检查;

利用冗余通道对软件数据的正确性进行校验等。

综上所述,软件独立性的技术要求应从空间域和时间域两个维度进行设计,设计层次上,可以分为两层递进关系,第一层是从设计上避免两者之间的干扰,涉及较多软件底层技术,如操作系统、内存保护、调度算法等,第二层是当出现违背第一层要求时,有额外的防护手段能够避免产生危险侧输出影响,如系统内硬件、通信等方法。


原文地址:https://blog.csdn.net/qq_40240275/article/details/136802988

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!