3. 静态分区基础

在综合模块化航空电子(IMA)与高安全实时系统中,分区(Partition)是隔离资源、约束干扰、保障确定性的核心机制。理解静态分区,必须先厘清“分区”到底分的是什么:它既分空间,也分时间,并通过配置表在系统运行前固定下来。本节从分区概念出发,对比静态与动态分区,剖析时间分区与空间分区,并介绍 ARINC 653 标准的基本框架。

一、分区概念:把共享资源切成互不干扰的“隔间”

分区是一种资源隔离单元。在一个共享的处理器、内存和 I/O 平台上,多个应用(如飞控、显示、导航、健康管理)被划分到不同分区中运行。每个分区拥有独立的地址空间、独立的执行时间窗口和独立的故障边界。分区内发生的错误——越界写、死循环、异常跳转——不应传播到其他分区。

分区通常由三个要素定义:

  • 空间边界:该分区可访问的内存段、外设寄存器与通信端口;
  • 时间边界:该分区在周期调度中获得的执行时间片与释放时刻;
  • 通信接口:分区之间通过受控的采样端口、队列端口或服务端口交换数据,而非直接共享内存。

这三者共同构成分区的“契约”。操作系统(通常是分区化 RTOS 或 Hypervisor)负责强制执行该契约,任何越界访问都会被内存保护单元(MPU/MMU)拦截,任何超时执行都会被调度器强制切换。

二、静态分区与动态分区对比

静态分区在系统集成阶段就确定所有分区的数量、内存布局、时间窗口和通信通道,生成一张不可变的配置表。运行时调度器只按表执行,不做资源再分配。动态分区则允许在运行时根据负载、优先级或请求创建、迁移、合并分区,资源分配具有弹性。

对比维度 静态分区 动态分区
配置时机 集成期固定,运行期只读 运行期可创建、调整、销毁
时间确定性 强,最坏执行时间可静态分析 弱,受运行时分配影响
资源利用率 较低,需按峰值预留 较高,可复用空闲资源
故障隔离 边界清晰,易于认证 边界随分配变化,验证复杂
典型标准 ARINC 653、DO-297 部分虚拟化平台、云化边缘系统
适用场景 飞控、航电、核电、轨交 通用计算、弹性业务、研发验证

静态分区的代价是“预留即占用”,但换来的是可预测性和可认证性。在安全关键领域,这种交换通常是值得的。

三、时间分区与空间分区

空间分区解决“谁能访问哪块内存”。它依赖 MMU/MPU 为每个分区建立独立的地址映射,分区之间不能直接读写对方数据。空间分区防止的是内存越界与数据污染。

时间分区解决“谁在什么时候运行、运行多久”。它采用周期性时间片轮转:一个主时间帧(Major Time Frame)被划分为若干固定长度的时间窗,每个分区在自己的窗口内运行,窗口结束即被强制挂起。时间分区防止的是CPU 独占与执行超时。

两者必须同时存在。只有空间分区,一个分区仍可能死循环占满 CPU;只有时间分区,一个分区仍可能越界改写其他分区数据。下图展示了静态分区中空间与时间双重隔离的协同关系:

静态分区:空间隔离 + 时间分区 空间分区(内存映射) 分区 A · 飞控应用 地址段 0x1000_0000 – 0x100F_FFFF 分区 B · 显示应用 地址段 0x2000_0000 – 0x200F_FFFF 分区 C · 健康管理 地址段 0x3000_0000 – 0x300F_FFFF MMU/MPU 强制隔离,越界触发异常 分区之间不共享可写内存 时间分区(主时间帧调度) t A 10 ms B 15 ms C 5 ms 主时间帧 = 30 ms(周期重复) 调度规则 • 每个分区仅在自身时间窗内运行 • 窗口结束强制挂起,不等待任务完成 • 窗口内未用完的时间不转移给其他分区 • 主帧周期固定,抖动可静态分析

图中左侧是空间分区:三个应用各自拥有独立地址段,由 MMU/MPU 强制隔离。右侧是时间分区:主时间帧 30 ms 被切分为 A(10 ms)、B(15 ms)、C(5 ms) 三个窗口,周期重复。两者叠加,才构成完整的静态分区隔离。

四、ARINC 653 标准简介

ARINC 653 是航空电子领域定义分区化操作系统接口的权威标准,全称《Avionics Application Software Standard Interface》。它规定了分区管理、进程管理、时间管理、分区间通信和健康监控等核心服务。

ARINC 653 的核心模型包括:

  • 分区(Partition):独立的地址空间与时间窗口,是调度的基本单位;
  • 进程(Process):分区内的执行实体,分为周期进程与偶发进程;
  • 主时间帧(Major Time Frame):由配置表定义的周期调度循环;
  • 分区间通信(IPC):通过采样端口、队列端口和服务端口进行受控数据交换;
  • 健康监控(Health Monitoring):在进程、分区、模块三级处理故障。

一个典型的 ARINC 653 分区配置片段如下:

Partition {
  Name        = "FLIGHT_CTRL";
  Period      = 30 ms;        // 主时间帧周期
  Duration    = 10 ms;        // 本分区时间窗
  Offset      = 0 ms;         // 在主帧中的起始偏移
  Memory      = 0x10000000..0x100FFFFF;
  Processes   = { "guidance", "control_law", "actuator_cmd" };
  Ports       = { Sampling("nav_data", IN),  Queue("cmd_out", OUT) };
}

该配置在集成期固化,运行时由分区化 OS 按表调度。任何分区无法通过修改配置在运行时扩大自己的时间窗或内存段,这正是静态分区确定性的来源。

理解要点:ARINC 653 不是一款软件产品,而是一组接口规范。不同厂商的 RTOS 只要符合该规范,就能实现可移植的分区化应用。它把“隔离”从工程约定提升为标准化契约。

五、常见误区与复盘

误区一:有了空间分区就不需要时间分区。空间隔离只防内存越界,不防 CPU 独占。一个分区内的死循环仍会拖垮整个模块,必须靠时间窗强制切换。
误区二:静态分区就是“不能通信”。静态分区禁止的是直接共享内存,但通过采样端口、队列端口等受控 IPC 仍可交换数据,且通信行为可预测。
误区三:时间窗越大越好。时间窗按最坏执行时间(WCET)加余量确定。窗口过大浪费 CPU,过小导致任务被截断。需结合 WCET 分析与抖动预算反复迭代。

复盘来看,静态分区的本质是用集成期的确定性换取运行期的可预测性。空间分区划定“能碰什么”,时间分区划定“能跑多久”,ARINC 653 则把这两者标准化。掌握这三层关系,才能理解后续实时性与抖动优化的所有手段。