2. INTEGRITY系统架构与可靠性机制解析
要为INTEGRITY做故障注入,第一步不是写注入脚本,而是把“靶点地图”画清楚:哪些资源由微内核独占管理、哪些资源被分区隔离、哪些故障会被健康监控捕获并触发降级。INTEGRITY是Green Hills Software的RTOS产品族,其可靠性设计围绕一个核心思想展开——把系统拆成若干互不信任的执行单元,由微内核统一仲裁所有跨单元的资源访问。理解这套仲裁规则,才能判断一次注入会落在哪一层、被谁拦截、最终以什么形式暴露。
微内核:唯一可信的仲裁者
INTEGRITY采用微内核架构,内核态代码被压缩到极小规模,只保留任务调度、地址空间切换、分区间通信(IPC)和中断分派这几类不可回避的功能。文件系统、网络协议栈、设备驱动等通常放在内核之外的用户态服务分区中运行。这种划分对故障注入的直接意义是:内核态与用户态的边界就是第一道靶点分界线。注入到用户态服务分区的内存越界,通常只会导致该分区被终止;而注入到内核态调度器或IPC路径的错误,则可能引发全局性失效。
微内核对外暴露的关键对象包括:任务(Task)、分区(Partition)、地址空间(Address Space)、IPC通道(Channel/Connection)以及中断向量。这些对象在配置阶段由集成开发环境生成静态描述,运行时不再动态创建。静态配置意味着靶点集合在系统启动前就已确定,注入前可以按对象类型枚举,而不必依赖运行时探测。
分区与内存保护:空间隔离的边界
分区是INTEGRITY中资源隔离的基本单位。每个分区拥有独立的虚拟地址空间,由MMU(内存管理单元)强制隔离。分区内的任务共享该分区的地址空间,但无法直接访问其他分区的内存。跨分区数据传递必须通过微内核提供的IPC机制,由内核完成地址空间切换和消息拷贝。
内存保护的关键配置项包括:分区的代码段、数据段、堆栈段的基地址与长度,以及访问权限(读/写/执行)。在故障注入视角下,这些配置项构成三类靶点:一是越界访问,即任务访问超出本分区映射范围的地址;二是权限违规,例如向只读代码段写入;三是IPC消息长度与目标缓冲区不匹配。前两类通常由MMU触发异常,第三类则由内核在消息传递路径上校验。
时间隔离:分区调度与时间窗口
时间隔离通过分区调度表实现。INTEGRITY支持基于时间窗口的轮转调度:每个分区在配置中声明自己的执行周期和窗口长度,内核按调度表在固定时刻切换分区。例如,一个周期为20ms的调度表可以安排分区A在0~5ms执行、分区B在5~12ms执行、分区C在12~20ms执行。分区在窗口内未完成的工作不会侵占其他分区的时间,只能等待下一个周期。
时间隔离的靶点主要有三类:窗口超时(分区在分配窗口内未主动让出CPU)、周期抖动(实际切换时刻偏离调度表)以及优先级反转(高优先级任务被低优先级任务阻塞)。注入窗口超时故障时,可以观察内核是否在窗口结束时强制切换,以及该分区是否被标记为超时事件。这类事件通常由健康监控模块记录,是判断时间隔离是否生效的直接依据。
健康监控:故障的捕获与响应
健康监控(Health Monitoring)是INTEGRITY可靠性机制的中枢。它持续收集来自MMU异常、调度器超时、IPC错误、看门狗溢出等事件,并按照预定义策略执行响应动作。响应动作的粒度从轻到重包括:记录事件、通知指定分区、重启故障分区、重启整个系统。策略在配置阶段以“事件—响应”映射表的形式定义,运行时由内核或专用监控分区执行。
对故障注入而言,健康监控既是靶点也是观测点。作为靶点,可以注入虚假的健康事件或抑制真实事件上报,验证监控策略是否被正确触发;作为观测点,注入内存越界后应检查监控日志中是否出现对应的MMU异常记录,以及响应动作是否与配置一致。如果注入后系统静默重启而无事件记录,说明监控路径本身可能被绕过,这本身就是需要记录的发现。
靶点地图的建立方法
把上述机制落到可操作的靶点清单,建议按“对象—接口—故障类型—观测信号”四列组织。对象是微内核、分区、调度表或健康监控策略;接口是该对象对外暴露的配置项或运行时入口;故障类型是注入的具体错误;观测信号是判断注入是否生效的依据。例如:对象为分区A的堆缓冲区,接口为动态内存分配调用,故障类型为写越界4字节,观测信号为MMU异常记录和分区A终止事件。
建立靶点地图时需要注意两个容易忽略的约束。第一,INTEGRITY的静态配置意味着某些靶点在运行时不可达,例如未映射的地址空间区域,注入访问会直接触发异常而非产生数据损坏,这类靶点适合验证保护机制而非模拟真实故障。第二,健康监控的响应动作可能掩盖故障的原始表现,例如分区重启后系统看似恢复正常,但事件日志中应保留重启原因。注入前应确认日志通道可用,否则观测链会断裂。
从架构到注入的映射关系
微内核、分区、时间隔离和健康监控四层机制并非孤立存在,而是形成一条从故障发生到系统响应的完整链路。一次内存越界首先被MMU捕获,MMU异常上报至健康监控,监控根据策略决定终止分区或记录事件,分区终止后调度表重新分配时间窗口。故障注入的价值在于:通过人为触发链路中的某一环,观察后续环节是否按预期响应。如果注入越界后分区未被终止,说明MMU配置或监控策略存在缺口;如果分区被终止但日志无记录,说明观测通道需要补强。