3. 任务隔离的核心机制

在综合模块化航电(IMA)中,多个功能——显示、导航、飞控、告警——共享同一套计算、内存和 I/O 资源。共享带来重量与成本的下降,但也带来一个根本问题:一个功能出错,凭什么不能拖垮其他功能?答案就是任务隔离。隔离不是单一技术,而是由时间隔离、空间隔离、故障隔离三层机制叠加,并由“分区”这一抽象单元统一承载,最终由 ARINC 653 标准规定其管理与调度规则。

一、分区:隔离的抽象单元

分区(Partition)是航电软件运行的最小隔离容器。一个分区通常对应一个功能或一个功能子集,拥有自己的代码、数据、执行周期和资源配额。分区不是进程,也不是线程,而是比进程更“硬”的边界:它由操作系统在时间和空间两个维度上强制约束,应用软件无法越过边界访问其他分区的资源。

分区有两种典型形态:系统分区负责健康监控、调度表管理等核心服务;应用分区承载具体航电功能。每个分区有唯一标识(Partition ID)、周期(Period)、持续时间窗口(Duration)和优先级。这些参数不是应用自己决定的,而是由系统集成阶段写入配置表,由操作系统在启动时加载。

二、时间隔离:每个分区只在自己的窗口里跑

时间隔离的核心是静态时间分区调度。操作系统维护一张主时间框架(Major Time Frame,MTF),把时间切成固定长度的小片,每个小片分配给一个分区。分区只能在属于自己的时间窗口内执行,窗口一到,无论任务是否完成,操作系统都会强制切换。

例如,一个 MTF 设为 100 ms,包含四个窗口:分区 A 占 20 ms,分区 B 占 30 ms,分区 C 占 20 ms,分区 D 占 30 ms。分区 A 即使因为死循环没有跑完,20 ms 后也会被挂起,B 照常启动。这样,A 的异常不会侵占 B 的时间。时间隔离的代价是:分区必须按最坏执行时间(WCET)设计,窗口长度要留有余量,否则会频繁超时。

三、空间隔离:内存地址的硬边界

空间隔离依靠 MMU(内存管理单元)实现。每个分区拥有独立的逻辑地址空间,操作系统为每个分区建立页表,把逻辑地址映射到物理内存的不同区域。分区 A 的代码无法读写分区 B 的物理页,因为页表中根本没有这条映射;一旦越界访问,MMU 触发异常,由健康监控接管。

空间隔离还涉及资源配额:每个分区的代码段、数据段、堆栈、I/O 端口都有上限。配置时,集成人员需要为每个分区分配内存块,并确保总和不超出模块物理内存。如果分区 A 申请了 2 MB,实际只用了 1.2 MB,剩余 0.8 MB 也不能被分区 B 使用——这是隔离的代价,也是确定性的来源。

四、故障隔离:从“出错”到“可控降级”

故障隔离是时间隔离和空间隔离的“上层建筑”。当分区越界、超时、除零或触发非法指令时,操作系统不会让整个模块崩溃,而是按预定义策略处理:

  • 分区级重启:只重启出错分区,其他分区继续运行;
  • 分区级关闭:停止出错分区,将其输出置为安全值;
  • 模块级重启:当故障影响调度表或健康监控本身时,重启整个模块;
  • 降级运行:关闭非关键分区,保留关键功能。

这些策略由健康监控表(HM Table)配置,每个分区可以定义自己的故障响应动作。故障隔离的目标不是“不出错”,而是“出错后影响可控”。

五、ARINC 653 的分区管理机制

ARINC 653 是 IMA 分区操作系统的接口标准,它规定了分区管理、进程管理、时间管理、分区间通信和健康监控五类服务。其中与隔离直接相关的是:

  • 分区调度表:定义 MTF 长度、每个分区的窗口偏移和持续时间;
  • 分区间通信:通过采样端口(Sampling Port)或队列端口(Queuing Port)传递数据,端口由配置表静态定义,不允许动态创建;
  • 健康监控:定义故障级别(模块级、分区级、进程级)和对应的恢复动作;
  • 进程管理:分区内的进程由分区调度器管理,进程优先级和周期在分区内确定,不影响其他分区。

下面这张图展示了 ARINC 653 分区管理下,一个主时间框架内三个分区的调度关系、空间映射和故障隔离路径。

ARINC 653 分区管理:时间调度 · 空间映射 · 故障隔离 主时间框架(MTF = 100 ms) 0 25 ms 50 ms 75 ms 100 ms 分区 A(显示)20 ms 分区 B(导航)25 ms 分区 C(告警)25 ms 空闲 / 系统分区 30 ms 时间隔离:窗口到时强制切换,分区 A 超时不会侵占 B、C 的时间 空间隔离:逻辑地址 → 物理内存映射 分区 A 逻辑空间 代码段 0x0000–0x3FFF 数据段 0x4000–0x7FFF 分区 B 逻辑空间 代码段 0x0000–0x5FFF 数据段 0x6000–0x9FFF 分区 C 逻辑空间 代码段 0x0000–0x2FFF 数据段 0x3000–0x5FFF 分区 A 物理页 分区 B 物理页 分区 C 物理页 空间隔离:MMU 页表强制映射,分区 A 无法访问 B、C 的物理页 故障隔离:越界/超时 → 健康监控捕获 → 分区级重启或关闭 → 其他分区不受影响

六、配置示例:一个可参考的分区参数表

下面给出一个教学用的分区配置示例,假设模块物理内存 16 MB,MTF 为 100 ms。表中参数为合理假设,用于说明配置字段和约束关系,并非实测数据。

分区 ID功能周期 (ms)窗口偏移 (ms)持续时间 (ms)内存配额 (MB)故障响应
P1显示1000204分区级重启
P2导航10025255分区级关闭
P3告警10050253分区级重启
P4系统监控10075304模块级重启

配置时需要注意:各分区窗口之和不能超过 MTF;内存配额之和不能超过物理内存;故障响应级别要与功能关键度匹配——告警分区可以重启,但系统监控分区一旦失效,通常只能模块级重启。

七、隔离的代价与权衡

隔离不是免费的。时间隔离要求每个分区按 WCET 设计,窗口留余量,导致 CPU 利用率下降;空间隔离要求每个分区独占内存,导致内存利用率下降;故障隔离要求健康监控表覆盖所有异常路径,增加了配置和验证工作量。因此,实际工程中需要在“隔离强度”和“资源效率”之间做权衡:关键功能给足窗口和内存,非关键功能可以适当压缩,但绝不能取消隔离边界。

理解要点:时间隔离管“什么时候跑”,空间隔离管“能碰什么”,故障隔离管“出错后怎么办”,分区是这三者的统一载体,ARINC 653 则规定了分区的调度、通信和健康监控接口。四者缺一不可。