2. 航空嵌入式软件与安全关键特征
航空嵌入式软件与普通消费电子软件最根本的差别,不在于代码规模或算法复杂度,而在于它必须在一个“失效可能致命”的约束下被开发、验证和运行。理解这一点,是理解故障注入测试为何要如此严格的前提。本节围绕四个相互咬合的概念展开:DO-178C 软件等级决定了“验证强度”,分区操作系统提供了“隔离容器”,时间与空间隔离是隔离的具体手段,健康监控与失效响应机制则是当隔离被突破或组件异常时的最后防线。四者共同构成航空软件安全关键特征的骨架。
DO-178C 软件等级:用失效后果反推验证强度
DO-178C 并不按代码行数或功能重要性划分等级,而是按“软件失效对飞机/系统造成的后果严重性”划分。它定义了 A 到 E 五个软件等级(DAL,Development Assurance Level):
- A 级(灾难性):失效可能导致飞机失去控制、多人死亡。要求最严,包括目标代码覆盖率分析(如 MC/DC)、独立验证、形式化方法可选等。
- B 级(危险性):失效导致严重伤害或重大结构损坏,但未到灾难级。要求决策覆盖率,但不强制 MC/DC。
- C 级(较大):失效导致较大但非危险性的后果,要求语句覆盖率。
- D 级(较小):失效导致轻微后果,要求相对宽松。
- E 级(无影响):失效不影响飞机安全,通常不要求 DO-178C 过程。
等级不是“贴标签”,而是直接决定测试证据链的深度。例如 A 级软件要求每个需求可追溯到测试用例,且测试必须覆盖需求、代码结构和鲁棒性边界。故障注入测试在 A/B 级软件中往往被用来验证“异常路径”是否被正确处理,而不仅仅是正常功能是否实现。一个常见的教学示例参数是:某飞控软件被定为 A 级,其故障注入用例需覆盖所有安全相关需求,且每个注入场景必须记录注入点、注入时刻、预期响应和实际响应,形成可审计的证据。
分区操作系统:把多个功能塞进同一硬件
现代航空电子普遍采用综合模块化航电(IMA)架构,多个功能(如显示、导航、飞控)共享同一计算平台。分区操作系统(Partitioned OS)的核心思想是:把每个功能封装成一个“分区”,分区之间互不干扰。这类似于在同一个物理房间里用隔音墙隔出多个独立房间,每个房间的住户无法影响其他房间。
分区操作系统通常遵循 ARINC 653 标准,提供分区调度和分区间通信(IPC)机制。每个分区有独立的地址空间、独立的执行时间窗口和独立的健康监控状态。分区操作系统的关键职责包括:按时间表调度分区、隔离分区内存、管理分区间消息、监控分区健康状态并执行失效响应。
时间与空间隔离:隔离的两个维度
空间隔离指每个分区只能访问自己的内存区域,无法读写其他分区的数据。实现方式通常依赖内存管理单元(MMU)或内存保护单元(MPU),为每个分区配置独立的页表或保护区域。当分区试图越界访问时,硬件触发异常,分区操作系统捕获并处理。
时间隔离指每个分区只能在分配给自己的时间窗口内执行,不能占用其他分区的时间。分区操作系统维护一张静态调度表,例如一个主时间帧为 100ms,分区 A 占 20ms,分区 B 占 30ms,分区 C 占 50ms。调度表在系统启动前确定,运行时不可动态修改。如果分区 A 在 20ms 内未完成,它会被强制挂起,等待下一个主时间帧,而不是侵占分区 B 的时间。
教学示例:假设某 IMA 平台主时间帧为 100ms,包含三个分区:P1(显示,20ms)、P2(导航,30ms)、P3(飞控,50ms)。若 P2 因故障进入死循环,时间隔离机制会在 30ms 窗口结束时强制切换,P3 仍能获得完整的 50ms 执行时间。若没有时间隔离,P2 的死循环将导致 P3 无法运行,飞控功能失效。
健康监控与失效响应机制
健康监控(Health Monitoring,HM)是分区操作系统的“免疫系统”。它持续监测分区、进程、通信和硬件状态,当检测到异常时,按预定义策略执行失效响应。ARINC 653 定义了三个层级的健康监控:
- 进程级:监控单个进程的异常,如除零、越界、超时。响应通常是重启进程或终止进程。
- 分区级:监控整个分区的健康状态,如分区超时、分区内进程反复失败。响应通常是重启分区、停止分区或切换到备份分区。
- 模块级:监控整个 IMA 模块的健康状态,如模块级通信故障、电源异常。响应通常是模块重启或切换到备用模块。
失效响应不是“一刀切”,而是分级递进。例如,一个显示分区内的某个进程崩溃,进程级 HM 可能先尝试重启该进程;若重启失败次数超过阈值,分区级 HM 会重启整个显示分区;若分区重启仍失败,模块级 HM 可能将显示功能切换到备份模块。这种分级机制确保单个故障不会直接导致系统级失效。
故障注入测试在这里的价值非常直接:它验证 HM 是否能在正确的时间、以正确的级别、执行正确的响应。例如,注入一个“分区超时”故障,观察 HM 是否在预期时间内触发分区重启,并检查重启后分区是否恢复正常功能。如果 HM 没有触发,或者触发了错误的响应级别,就说明健康监控配置存在缺陷。
把四个概念串起来看:DO-178C 等级决定了“这个软件失效后果有多严重,因此需要多强的验证”,分区操作系统提供了“把不同功能隔离开的容器”,时间与空间隔离是“容器壁的具体实现”,健康监控与失效响应是“容器壁被突破后的补救措施”。故障注入测试正是沿着这条链逐层验证:注入一个空间越界,看 MMU 是否触发异常、HM 是否捕获并响应;注入一个时间超时,看调度表是否强制切换、分区是否被重启;注入一个进程崩溃,看进程级 HM 是否在阈值内重启进程。只有每一层都按预期工作,整个安全关键系统才具备可接受的完整性。
测试视角提示:在故障注入测试中,不要只关注“故障是否被检测到”,还要关注“检测延迟”和“响应级别”。例如,分区超时故障的检测延迟应小于主时间帧的某个比例,响应级别应与故障严重性匹配。这些量化指标是判断健康监控配置是否合理的关键依据。