聊聊航空航天软件中常用的SIFT(Software-Implemented Fault Tolerance)三版本方案
一、SIFT技术
在软件程序控制流程中,特别是在SIFT(Software-Implemented Fault Tolerance)系统中使用三版本编程(Three-Version Programming, 3VP)意味着为同一个任务创建三个独立的软件版本。每个版本由不同的开发团队使用不同的方法和假设来编写,以尽量减少不同版本之间的共同错误模式。这三个版本的程序并行执行相同的计算,并将结果提交给一个投票器(voter),投票器根据多数原则决定最终输出。这种设计是为了提高系统的容错能力,即使其中一个或两个版本出现故障或产生错误的结果,只要有一个版本是正确的,系统仍然可以正常运行。
SIFT系统中的具体应用
-
冗余任务执行:在SIFT系统中,为了实现超高的可靠性,任务会在三个处理器上重复执行。这意味着同一任务会被分解成三个独立的实例,每个实例都由一个不同的软件版本来处理。
-
结果投票:每次迭代后,每个处理器都会生成自己的结果。这些结果随后被送到一个3路多数投票器(3-way majority voter)进行仲裁。如果至少有两个处理器的结果一致,那么这个一致的结果就被选作最终输出。这样的机制可以有效地屏蔽单点故障的影响。
-
错误检测与隔离:当投票过程中发现不一致时,即没有达成多数共识时,系统会产生一个错误信号。这个信号用于检测、隔离和重新配置系统。例如,在航天飞机的例子中,如果四个计算机中有任何一个与其他三个不一致,它可能会被认为是有问题的,并从服务中移除。
-
系统恢复:对于像航天飞机这样的复杂五计算机系统,其中四台计算机组成一组,在正常操作期间提供冗余,而第五台作为备用。如果主组中的两台计算机发生故障,剩余的计算机仍能通过投票继续工作;但如果第三台也出现问题,导致无法形成多数意见,则备用计算机接管系统控制责任。
优点
- 增强可靠性:通过多样化的实现方式减少了共模错误的可能性。
- 快速故障检测:能够迅速识别出异常行为的组件。
- 自动恢复能力:允许系统在不影响整体性能的情况下自动排除故障单元。
实际案例
例如,在航空控制系统中,SIFT架构确保即使某些组件或软件版本出现了未预见的问题,飞机仍然可以安全地完成其飞行任务。这种方法已经被证明是非常有效的,尤其是在需要极高可靠性的环境中,如航空航天领域。
二、汽车软件研发中为什么不用SIFT
在汽车软件研发中,直接采用完整的SIFT(Software Implemented Fault Tolerance)方案并不常见,主要是因为SIFT最初是为航空和航天等对安全性要求极高的领域设计的。这些领域的系统通常需要达到非常高的可靠性标准,例如无故障工作时间可以长达数年,并且必须能够在极端条件下持续运行。相比之下,虽然汽车行业也高度重视安全性和可靠性,但其面临的挑战和技术实现路径有所不同。
然而,汽车行业中确实存在借鉴SIFT理念和技术的情况,尤其是在高级驾驶辅助系统(ADAS)和自动驾驶技术的发展过程中。随着车辆智能化程度的不断提高,车载软件复杂度增加,对于软件可靠性的需求也随之上升。因此,某些SIFT的核心概念如冗余管理和投票机制已经被应用于汽车软件开发中,以增强系统的容错能力和安全性。以下是几个具体的应用方式:
-
冗余架构:类似于SIFT中的多版本编程(NVP),一些关键的安全相关功能可能会有多个独立实现版本。每个版本由不同的团队使用不同方法开发,然后并行执行。这样做的目的是减少共同模式错误的可能性。
-
结果融合与仲裁:当多个传感器或控制单元提供相同类型的数据时(比如速度、位置等),可以通过投票或其他形式的结果融合来决定最终使用的值。这种方法有助于提高测量精度,并能在单个传感器失效时维持系统正常运作。
-
健康监控与自诊断:现代汽车配备了大量的自我诊断功能,能够实时监测各个子系统的状态。如果检测到异常情况,系统可以采取相应的措施,如切换到备用组件或者限制某些功能,直到问题得到解决。
-
故障隔离与恢复:通过硬件分区和软件设计,确保即使某一模块出现故障也不会影响其他部分的工作。同时,具备快速识别故障源的能力,并能自动尝试重启或重新配置受影响的部分。
-
混合关键性调度:为了保证最严格的安全要求得以满足,同时不影响非关键任务的执行效率,采用了混合关键性的任务调度策略。这使得高优先级的安全相关任务总能得到及时处理。
-
基于模型的开发与验证:利用形式化验证工具和技术,从设计阶段就确保软件逻辑正确无误,从而降低潜在的风险。
尽管如此,值得注意的是,由于成本效益考量以及物理空间限制等因素,汽车制造商不会完全复制SIFT那样复杂的架构。相反,他们会根据实际需求选择性地应用其中的关键技术和原则,以达到所需的可靠性水平而不至于过度增加系统复杂度或制造成本。此外,ISO 26262等国际标准也为汽车电子电气系统的功能安全提供了指导方针,促进了更广泛的安全机制的应用。