4. INTEGRITY故障模型与失效模式

在INTEGRITY这类分区化实时操作系统中,故障注入不是随机“捣乱”,而是先建立可复现的故障模型,再按模型施加激励并观察系统响应。故障模型的核心任务,是把“可能出错的物理或逻辑对象”映射为“可注入、可观测、可判定的失效模式”。INTEGRITY的可靠性边界由内核、分区、驱动、通信和时钟五类对象共同构成,因此故障建模也应围绕这五类对象展开,并统一按硬件故障、软件故障、瞬态故障、永久故障四个维度分类。

一、五类对象与四类故障的交叉建模

硬件故障指物理器件损坏或参数漂移,例如内存位翻转、总线位错误、时钟抖动、电源跌落。软件故障指设计缺陷或实现错误,例如内核调度器竞态、分区配置表越界、驱动状态机死锁。瞬态故障是短时、可恢复的扰动,如单粒子翻转(SEU)、瞬时中断风暴、通信校验错。永久故障是不可自恢复的持续错误,如内存单元固定为0、时钟源停振、驱动寄存器锁死。

把对象与故障类型交叉,就得到一张可操作的故障模型矩阵。例如:内核对象关注调度表、分区切换、系统调用入口的软件故障与瞬态故障;分区对象关注分区配置、内存隔离、健康监控的永久故障;驱动对象关注寄存器访问、DMA缓冲区、中断处理的硬件与瞬态故障;通信对象关注ARINC 653端口、采样/队列消息、校验与超时的瞬态与软件故障;时钟对象关注晶振、PLL、时间戳的硬件与永久故障。建模时,每个交叉点都应给出“注入位置、注入方式、预期失效、观测点”四要素,否则模型无法落地。

INTEGRITY故障模型:对象 × 故障类型 × 注入/观测 内核 Kernel 分区 Partition 驱动 Driver 通信 Comm 时钟 Clock 硬件故障 位翻转/总线错/电源 软件故障 竞态/越界/死锁 瞬态故障 SEU/中断风暴/校验错 永久故障 固定0/停振/寄存器锁死 注入方式(示例) • 内存位翻转:bit-flip 工具 • 寄存器写错:MMIO 覆写 • 分区配置篡改:表项越界 • 通信丢包/延迟:端口注入 • 时钟抖动:PLL 偏移 • 中断风暴:高频触发 • 驱动状态机卡死:断点挂起 观测点与判定 • 分区健康监控 HM 事件 • 调度超时/截止期错失 • 内存保护异常 MPU • 通信端口 CRC/超时 • 时钟同步偏差 • 看门狗复位计数 • 日志与追踪时间戳 典型失效模式与后果 静默数据错误 内存位翻转未检出 分区读到错误数据 后果:输出偏差 分区隔离失效 配置表越界/MPU失效 跨分区非法访问 后果:级联崩溃 通信超时/丢包 端口校验错/延迟 采样消息过期 后果:控制失联 时钟失步/停振 PLL偏移/晶振停振 时间戳错乱 后果:调度紊乱

二、从故障模型到注入用例

建立模型后,下一步是把模型转成可执行的注入用例。一个完整的注入用例至少包含:目标对象、故障类型、注入位置、注入时机、注入强度、预期失效、观测指标、判定阈值。以“分区内存隔离”为例,目标对象是分区P1的堆区,故障类型为瞬态硬件故障,注入位置为P1堆区某地址,注入时机为P1运行到第3个周期,注入强度为单比特翻转,预期失效为P1读取到错误数据,观测指标为P1输出校验和与HM事件,判定阈值为校验和偏差超过1%或HM上报内存异常。

再以“通信端口”为例,目标对象为ARINC 653采样端口,故障类型为瞬态通信故障,注入位置为端口发送缓冲区,注入时机为每帧发送前,注入强度为丢弃1帧,预期失效为接收分区采样消息过期,观测指标为端口超时计数与接收分区健康状态,判定阈值为连续2帧超时即判定通信失效。这些参数不是凭空设定,而是根据系统周期、端口刷新率和健康监控策略推导出来的。

三、建模方法:自顶向下与自底向上结合

自顶向下从系统失效出发,先定义顶层危害(如“分区输出错误导致执行器误动作”),再逐层分解到内核、分区、驱动、通信、时钟对象,最后落到具体注入点。自底向上从可注入的物理/逻辑位置出发,先枚举所有可注入点(内存、寄存器、端口、时钟源),再向上归并到失效模式。两种方法结合,可以避免遗漏,也能保证注入用例与系统危害对应。

建模时还要区分“故障”与“失效”:故障是原因,失效是表现。同一个故障可能引发多种失效,同一种失效也可能由多个故障导致。因此,故障模型应记录“故障—失效”的多对多关系,并在注入时通过观测点区分。例如,内存位翻转可能导致分区输出错误,也可能被ECC纠正而不产生失效;通信丢包可能导致采样过期,也可能被重传机制掩盖。只有把“是否被容错机制掩盖”纳入模型,才能真实评估系统可靠性。

四、参数化建模与示例

为了便于复现,建议把故障模型参数化。以下是一个简化的故障注入用例表,字段和取值均为教学示例,实际使用时需根据目标系统调整。

用例ID对象故障类型注入位置注入时机强度预期失效观测指标判定阈值
FI-K-01内核软件调度表项分区切换前篡改1项分区超时调度超时计数≥1次
FI-P-02分区瞬态堆区地址第3周期1 bit翻转输出校验和偏差校验和/HM偏差>1%
FI-D-03驱动永久寄存器初始化后固定为0设备无响应驱动状态机超时>10ms
FI-C-04通信瞬态发送缓冲每帧发送前丢1帧采样过期端口超时计数连续2帧
FI-T-05时钟硬件PLL运行中偏移+5%时间戳错乱同步偏差>1ms

表中“强度”和“判定阈值”是建模的关键。强度决定故障是否可被容错机制吸收,阈值决定失效是否被判定。例如,单比特翻转若被ECC纠正,则不应判定为失效;若ECC未覆盖,则按输出偏差判定。通信丢1帧若被重传掩盖,也不应判定为失效。因此,建模时必须先确认系统的容错能力,再设定阈值。

五、建模输出与使用

最终输出的故障模型应包含:对象清单、故障类型清单、注入点清单、失效模式清单、观测点清单、判定阈值清单,以及“故障—失效”映射关系。这份模型可以直接驱动故障注入工具,也可以作为可靠性验证的输入。在INTEGRITY环境中,建议把模型与健康监控配置、分区配置、通信端口配置关联起来,使注入用例能够自动匹配系统配置,减少人工映射错误。

建模时优先覆盖“高危害、高频率、难检测”的故障组合,例如内核调度软件故障、分区隔离永久故障、通信瞬态丢包。这些组合往往对应系统最薄弱的环节。
不要把“注入成功”等同于“系统失效”。必须通过观测点确认失效是否发生,并区分“被容错掩盖”和“未被掩盖”两种情况,否则会高估或低估系统可靠性。

综上,INTEGRITY故障模型与失效模式的核心,是把内核、分区、驱动、通信、时钟五类对象,按硬件、软件、瞬态、永久四类故障进行交叉建模,并落到可注入、可观测、可判定的用例上。建模不是一次性工作,而应随系统配置和容错策略的变化持续更新,才能支撑可靠的故障注入与可靠性验证。