在安全系统设计中,为防护硬件随机性故障造成的功能失效,会用到不同于一般电子产品的设计方法,这些设计方法在功能安全标准如IEC61508、ISO26262有推荐的方法列表,根据电子系统的不同组成部分,可以应用不同的设计方法。本文来谈谈应用比较多的冗余技术,具体有硬件冗余、信息冗余、软件冗余。
硬件冗余: 硬件冗余是将多个硬件单元复制作为一个整体来提供功能。从组成部分来看,多个硬件单元可以是相同的,也可以是不同的,如使用相同的硬件,但是操作系统和应用不同,或者只有应用不同的。从最终输出来看,可以没有独立的表决器,由其中一个处理单元准备输出,也可以有独立的表决器。
下面介绍几种典型的冗余架构:
主/从控制架构:以一个计算单元作为主控制输出,另一个计算单元作为从控制。在下面的架构中,主控制单元和从控制单元都对输入数据进行处理,并进行互相交互的校核,当从控制单元检查主控制单元的输出存在故障时,对主控制单元进行复位。该架构中当从控制单元的检查存在时间上的延迟,需要对故障输出的延迟时间影响增加分析。
双核锁步架构:芯片内的双核锁步架构冗余技术,每条CPU指令都由两个处理器独立地执行,每个处理器读取、写入数据后执行下一条指令,主处理器控制总线,从控制器控制一个监控器,当两个处理器发生不一致时,监控器用来使芯片输出导向安全,输出报警给外部的监控芯片。为了防止外部瞬态的电磁干扰,两个处理器在执行的时序上采用分时执行的方法。
NooM架构:由两个硬件计算单元构成的2oo2架构,由2个以上的计算单元可以构成2*2oo2或2oo3架构。2oo2架构能检查单个单元的故障,但是无法容错。它的共因故障是需要避免的,软件要具备硬件同样等级的安全性水平,硬件设计避免有共用部分,对CPU、内存应引入自检机制,以避免潜伏故障。
2oo2架构的一种近似架构是1oo2D架构,它也是由两个处理单元组成,每个处理单元都有对应的故障检测模块,比如说独立的看门狗,看门狗的输出用来控制选择开关,授权哪个处理单元对外输出。
多个处理单元的NooM架构有2oo3,兼顾了安全性和可用性。对于单个处理单元的故障,通常是将其导向安全侧输出,但也有设计为故障后进行重置,分享其状态给其它处理单元。举Boeing 777中的飞控计算机为例,由三个处理单元PFC(Primary Flight Computer)组成,PFC之间通过独立三个通信网络进行通信,每个PFC内部有三个异构的处理器Intel、Motorola和AMD,从而避免处理器的共因故障。每个处理单元在三种状态之间转换:控制、待机和监视,执行器对处理单元的输出进行选择。
信息冗余: 信息冗余增加多余的信息码,用于检测传输数据的错误,也可用于纠错,应用于内存,数据总线和通信网络的数据错误。常用的有奇偶校验,CRC校验,海明码和算术码。奇偶校验只能检测单bit错误,无法检测双重bit错误。
CRC校验还可以应用于校验存储在内存中的数据或程序是否被篡改。 海明码用于存储或传输数据时检测和纠正错误,通过增加额外的奇偶校验位实现。标准汉明码只能检测和纠正单bit错误。对于双重bit错误,可以添加一个额外的总体奇偶校验位,以可靠地检测两位中的错误。这称为单纠错/双纠错检测(SECDED)。 算术编码用包含两个字段的编码替代原来的数据:数据部分和编码部分。能够检测三种类型的错误:
operation error(操作数错误):计算机使用预期操作符处理操作数得到了错误的结果。这种类型的错误,非常类似于传输错误,但不会给代码设计带来新的约束。
operator error(操作符错误):计算机使用好的操作数,但有一个非预期的运算符。例如,如果一个加法运算符被替换成乘法运算符,结果是假的,即使乘法计算的结果是正确的。对这种类型的错误的检测,不是数据传输通道存在的错误,需要对运算符增加编码。
operand error(操作错误):一种情况是地址错误,相当于用一个变量替换了另一个变量。这种类型的错误发生在传输系统中,在不同的通道之间发生了串扰。类似于传输过程中收到了发送到另一个接收者的数据。另一种情况是存储错误,存储的数据变化或者没有被更新,是过时的数据。
编码安全计算机SACEM中应用了算术编码技术,参见功能安全之SACEM安全计算机原理。
软件冗余: 软件在同一个处理器执行两次,由外部设备进行表决,可以用于检测内存错误。需要将软件分别加载到不同的内存区域,因此,各种内存的故障如RAM、ROM、EPROM,都可以在运行过程中检测出来。但软件冗余属于执行程序的冗余,对于共享的硬件处理器故障无法检测。
可以在执行过程中加入指令的自测试,对不一致的数据进行比较,对处理器进行全面的功能测试。为了进行有效的检测,测试覆盖率必须足够(覆盖应用指令等),并且必须在正确的时间执行(初始化,在每个周期内,定期,在任务结束时)。
这种做的缺点是增加了处理器的性能开销。 软件冗余相比硬件冗余更简单,但检测错误的有效性需要应用其它技术进行弥补,采用软件的多样化和自检测技术可以作为很好的补充。另外,由于软件的冗余执行,执行时间较长,适用于对时间性能要求不高的系统。
总结
以上是三种冗余技术的介绍,都是通过增加冗余的资源以实现故障的检测,有硬件资源的冗余,数据信息的冗余和软件执行层的冗余,通过一些简单的示例进行了说明。在实际系统的设计中,往往不仅仅采用单一的技术,而是多种冗余技术相结合。同时,冗余技术在于它对随机故障的检测有效性,与异构多样化相结合,实际使用可以提高对系统性故障的检测能力。
(文章来源:薄说安全 )