4. INTEGRITY故障模型与失效模式
在INTEGRITY这类分区化实时操作系统中,故障注入不是随机“捣乱”,而是先建立可复现的故障模型,再按模型施加激励并观察系统响应。故障模型的核心任务,是把“可能出错的物理或逻辑对象”映射为“可注入、可观测、可判定的失效模式”。INTEGRITY的可靠性边界由内核、分区、驱动、通信和时钟五类对象共同构成,因此故障建模也应围绕这五类对象展开,并统一按硬件故障、软件故障、瞬态故障、永久故障四个维度分类。
一、五类对象与四类故障的交叉建模
硬件故障指物理器件损坏或参数漂移,例如内存位翻转、总线位错误、时钟抖动、电源跌落。软件故障指设计缺陷或实现错误,例如内核调度器竞态、分区配置表越界、驱动状态机死锁。瞬态故障是短时、可恢复的扰动,如单粒子翻转(SEU)、瞬时中断风暴、通信校验错。永久故障是不可自恢复的持续错误,如内存单元固定为0、时钟源停振、驱动寄存器锁死。
把对象与故障类型交叉,就得到一张可操作的故障模型矩阵。例如:内核对象关注调度表、分区切换、系统调用入口的软件故障与瞬态故障;分区对象关注分区配置、内存隔离、健康监控的永久故障;驱动对象关注寄存器访问、DMA缓冲区、中断处理的硬件与瞬态故障;通信对象关注ARINC 653端口、采样/队列消息、校验与超时的瞬态与软件故障;时钟对象关注晶振、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故障模型与失效模式的核心,是把内核、分区、驱动、通信、时钟五类对象,按硬件、软件、瞬态、永久四类故障进行交叉建模,并落到可注入、可观测、可判定的用例上。建模不是一次性工作,而应随系统配置和容错策略的变化持续更新,才能支撑可靠的故障注入与可靠性验证。