3. INTEGRITY分区与调度机制

在综合模块化航电(IMA)系统中,多个功能应用共享同一套计算、存储与I/O资源。如果缺乏隔离手段,一个应用的内存越界或CPU占用失控就可能拖垮整个系统。INTEGRITY实时操作系统通过空间分区与时间分区两道防线解决这一问题:空间分区保证各分区只能访问被授权的内存区域,时间分区保证各分区只能在被分配的时间窗口内占用CPU。二者结合,使一个分区的故障被限制在自身范围内,不会传播到其他分区。

空间分区:内存的硬隔离

空间分区的核心是给每个分区分配一段独立的物理内存区域,并由内存管理单元(MMU)在硬件层面强制隔离。每个分区拥有自己的代码段、数据段、堆栈和堆区,分区之间不能直接读写对方内存。INTEGRITY在系统配置阶段为每个分区定义内存映射表,运行时由MMU按分区切换地址空间。

空间分区通常包含三类内存对象:分区私有内存(仅本分区可访问)、共享内存区(经显式配置后多个分区可读写,用于数据交换)、内核内存(仅内核可访问,分区不可见)。共享内存虽然打破了完全隔离,但它是受控的、显式声明的,且通常配合信号量或消息队列使用,避免竞态。

空间分区的配置参数一般包括:分区名称、基地址、大小、访问权限(读/写/执行)、是否共享。例如某飞控分区配置为基地址0x40000000、大小2MB、权限RWX、私有;而显示分区配置为基地址0x50000000、大小4MB、权限RW、私有。若某分区试图访问0x50000000,MMU会触发异常,INTEGRITY的分区健康监控(HM)会捕获该异常并按预定义策略处理。

时间分区与ARINC 653调度

时间分区把CPU时间切分成周期性的主时间帧(Major Time Frame, MTF),每个主帧内再划分为若干时间窗口(Time Window),每个窗口分配给一个分区。分区只在属于自己的窗口内运行,窗口结束即被强制挂起,切换到下一个分区。这种调度方式称为静态时间触发调度,是ARINC 653标准的核心机制。

ARINC 653定义了分区调度的基本模型:一个主时间帧由多个分区窗口组成,窗口按固定顺序循环执行。每个分区窗口内,该分区可以运行自己的进程(Process),进程调度由分区内的局部调度器负责,通常采用优先级抢占或时间片轮转。分区窗口的时长、顺序、周期在配置表中静态定义,运行时不可动态改变,这保证了调度的确定性和可预测性。

以一个典型的航电系统为例,主时间帧周期设为100ms,包含四个分区窗口:

窗口序号分区名称起始偏移窗口时长周期
1飞控分区0ms30ms100ms
2导航分区30ms20ms100ms
3显示分区50ms30ms100ms
4健康监控分区80ms20ms100ms

该配置下,飞控分区每100ms获得30ms的CPU时间,导航分区获得20ms,显示分区获得30ms,健康监控分区获得20ms。所有窗口之和等于主时间帧周期,没有空闲时间。若某分区在窗口内提前完成工作,剩余时间不会被其他分区占用,而是进入空闲等待,直到下一个窗口到来。这种“时间不借用”策略进一步增强了隔离性。

静态调度表配置

静态调度表是时间分区的配置载体,通常以XML或专用配置语言描述。INTEGRITY的调度表配置需要定义以下要素:主时间帧周期、分区窗口列表(分区ID、偏移、时长)、分区内进程列表(进程ID、优先级、周期、执行时间预算)。配置完成后,调度表被编译进系统镜像,启动时由内核加载。

下面是一个简化的调度表配置片段示例:

<ScheduleTable MajorFrame="100ms">
  <PartitionWindow Partition="FlightCtrl" Offset="0ms" Duration="30ms"/>
  <PartitionWindow Partition="Navigation" Offset="30ms" Duration="20ms"/>
  <PartitionWindow Partition="Display" Offset="50ms" Duration="30ms"/>
  <PartitionWindow Partition="HealthMon" Offset="80ms" Duration="20ms"/>
</ScheduleTable>

配置时需要注意几个关键约束:所有窗口的偏移加时长不得超过主时间帧周期;窗口之间不能重叠;每个分区的窗口时长必须大于该分区内所有进程的最坏执行时间(WCET)之和,否则会导致进程被截断。WCET通常通过静态分析工具或实测最坏情况获得,是调度表设计的重要输入。

分区健康监控

分区健康监控(Health Monitoring, HM)是INTEGRITY保障分区隔离的最后一道防线。HM在分区和系统两个层级上监控异常事件,并按预定义策略响应。常见的监控事件包括:

  • 内存保护异常:分区访问未授权地址,MMU触发异常。
  • 时间窗口超限:分区在窗口结束后仍未主动挂起,被内核强制挂起。
  • 进程执行时间超预算:分区内某进程运行超过配置的执行时间预算。
  • 非法系统调用:分区调用了未授权的系统服务。
  • 分区重启或停止:分区因故障被重启或永久停止。

HM的响应策略通常分为四级:忽略(仅记录日志)、警告(记录并通知)、分区重启(重启故障分区,不影响其他分区)、系统停止(严重故障时停止整个系统)。策略在配置阶段为每个分区、每类事件分别指定。例如,飞控分区的内存保护异常可能配置为“分区重启”,而健康监控分区自身的异常可能配置为“系统停止”。

HM的日志和状态通常通过专用接口输出,供地面维护或机载诊断使用。在开发阶段,可以通过INTEGRITY的调试工具查看HM事件记录,验证分区隔离是否按预期工作。

INTEGRITY 时间分区调度与空间隔离示意 主时间帧 (100ms) 0ms 100ms 飞控分区 0–30ms 导航分区 30–50ms 显示分区 50–80ms 健康监控 80–100ms 空间分区内存映射 飞控分区 0x40000000 / 2MB / RWX 导航分区 0x42000000 / 1MB / RW 显示分区 0x50000000 / 4MB / RW 共享内存区 0x60000000 / 512KB / RW MMU 硬件隔离:分区只能访问授权地址,越界触发异常 → 健康监控捕获 健康监控响应策略 忽略 / 警告 记录日志,通知 分区重启 仅重启故障分区 系统停止 严重故障,安全停机 事件日志输出 供诊断与维护使用

综合来看,INTEGRITY的分区机制可以概括为“空间上分而治之,时间上轮流坐庄,异常时隔离止损”。空间分区通过MMU实现内存硬隔离,时间分区通过静态调度表实现CPU时间确定性分配,健康监控则在异常发生时按策略响应,三者共同构成高可靠实时系统的隔离基础。在实际工程中,调度表的设计需要结合各分区的WCET、周期要求和系统主帧周期反复迭代,而健康监控策略则需要根据故障影响程度分级配置,才能在隔离性和可用性之间取得平衡。