2. INTEGRITY架构与多核支持

INTEGRITY 是一款面向安全关键领域的实时操作系统,其设计出发点与通用操作系统截然不同:它不追求功能丰富,而是把“可证明的隔离”和“可预测的时序”放在首位。理解 INTEGRITY 的架构,核心是抓住四个相互支撑的概念——微内核、分区、多核调度模型以及处理器间通信。它们共同决定了应用如何被组织、时间如何被分配、核与核之间如何协作。

微内核:把特权代码压到最小

INTEGRITY 采用微内核(Microkernel)架构。传统宏内核把文件系统、网络协议栈、设备驱动都放在内核态,任何一处缺陷都可能破坏整个系统的隔离性。INTEGRITY 则只把最不可省略的功能留在内核态:地址空间管理、分区调度、处理器间中断(IPI)分发、时间管理与对象(Object)访问控制。文件系统、网络、驱动等以“服务”形式运行在用户态的分区中,通过内核提供的受控通道通信。

这种划分带来两个直接后果。第一,内核代码量小,便于形式化验证与安全认证,例如面向 DO-178C A 级或 IEC 61508 SIL 3 的认证证据链更容易收敛。第二,内核只提供机制而不提供策略:它不决定“谁该运行”,只保证“被授权的对象才能被访问”。所有资源——任务、信号量、队列、内存区、中断——都以内核对象的形式存在,创建时即绑定到某个分区,跨分区访问必须显式建立连接。

关键理解:INTEGRITY 的隔离不是靠“约定”实现的,而是靠内核对象的所有权与地址空间边界强制实现的。一个分区无法通过指针直接访问另一个分区的数据,必须走内核提供的通信对象。

分区机制:空间隔离与时间隔离

分区(Partition)是 INTEGRITY 中资源分配与隔离的基本单位。每个分区拥有独立的地址空间、独立的代码与数据段,以及一组属于自己的内核对象。分区之间默认互不可见,这构成了空间隔离(Spatial Isolation)。

时间隔离(Temporal Isolation)则由分区调度表保证。INTEGRITY 支持基于时间窗口的静态调度:在一个主时间帧(Major Frame)内,为每个分区分配固定的执行窗口。例如主帧为 20 ms,分区 A 获得 0–5 ms,分区 B 获得 5–12 ms,分区 C 获得 12–20 ms。窗口一旦配置,运行时不会因为某个分区“想多跑一会儿”而侵占其他分区的时间。这种确定性正是安全关键系统所依赖的。

分区内部可以运行多个任务,任务之间的调度策略由分区自行选择(如优先级抢占或轮转)。但无论分区内部如何调度,它对外表现出的时间行为都被限制在分配给它的窗口内。这就形成了“分区管时间边界、任务管分区内并发”的两层结构。

多核调度模型:AMP 与 SMP 的取舍

在多核场景下,INTEGRITY 提供两种主要模型:非对称多处理(AMP)与对称多处理(SMP)。

AMP 模式下,每个核可以运行独立的 INTEGRITY 内核实例,或者由同一个内核管理但各核上的分区集合相互独立。核与核之间通过共享内存和 IPI 通信。AMP 的优点是每个核的时间行为容易分析,适合把不同安全等级、不同实时性要求的负载物理分离到不同核上。缺点是核间负载不均衡时难以动态迁移。

SMP 模式下,所有核共享同一个内核映像和同一套分区对象,调度器可以把分区或任务动态分配到任意核上执行。SMP 提高了资源利用率,但引入了核间缓存一致性、锁竞争和调度抖动等问题,对最坏执行时间(WCET)分析提出更高要求。

实际工程中常见的是混合方案:把高安全等级、强实时负载放在专用核上以 AMP 方式运行,把相对宽松的负载放在 SMP 核组上。INTEGRITY 允许在同一芯片上按核配置调度模型,这为“同一硬件承载不同安全等级应用”提供了基础。

处理器间通信基础

多核之间不可能完全独立,必然需要数据交换与同步。INTEGRITY 的处理器间通信(IPC)建立在共享内存与 IPI 之上,但对上层暴露为受内核管理的对象,而不是裸共享内存。

典型机制包括:跨核信号量、跨核消息队列、以及基于共享内存区的连接(Connection)。发送方把数据写入共享内存区,通过内核对象触发接收方核上的 IPI,接收方在中断或任务上下文中读取。内核负责保证访问的原子性与顺序性,避免竞态。

设计 IPC 时需要关注三点:一是数据所有权,共享区由哪个分区创建、哪些分区有读写权限;二是同步语义,是阻塞等待还是非阻塞轮询;三是时序影响,IPI 会打断目标核当前执行,必须评估其对实时性的扰动。在安全关键系统中,IPC 路径通常要求有界延迟,因此消息长度、队列深度和中断优先级都需要在配置阶段确定。

INTEGRITY 多核架构:微内核 · 分区 · 调度 · IPC Core 0(AMP 专用核) INTEGRITY 微内核 地址空间 · 分区调度 · 对象管理 · IPI 分发 分区 A 窗口 0–5 ms 任务 T1 / T2 优先级抢占 独立地址空间 分区 B 窗口 5–12 ms 任务 T3 轮转调度 独立地址空间 共享内存区(跨核连接) 消息队列 · 信号量 · 数据缓冲区 Core 1(SMP 核组) INTEGRITY 微内核 地址空间 · 分区调度 · 对象管理 · IPI 分发 分区 C 窗口 12–20 ms 任务 T4 / T5 优先级抢占 独立地址空间 分区 D 窗口 12–20 ms 任务 T6 轮转调度 独立地址空间 共享内存区(跨核连接) 消息队列 · 信号量 · 数据缓冲区 IPI + 共享内存 主时间帧 20 ms: A 0–5ms B 5–12ms C/D 12–20ms ← 静态窗口,互不侵占 →

四者如何协同:一个配置视角

把上述概念串起来,可以用一个简化的配置过程来理解。假设某飞控系统使用双核处理器:Core 0 运行飞行控制分区(安全等级 A),Core 1 运行任务管理与健康监控分区(安全等级 B)。

第一步,在 Core 0 上创建分区 A,分配独立地址空间,并为其配置 0–5 ms 的执行窗口。第二步,在 Core 1 上创建分区 C 和 D,共享 12–20 ms 窗口,分区内部用优先级调度。第三步,在共享内存中创建一个消息队列对象,授权分区 A 写、分区 C 读。第四步,配置 IPI 优先级,确保跨核通知不会长时间阻塞高优先级任务。

运行时,分区 A 在 0–5 ms 内完成控制律计算,把结果写入共享队列并触发 IPI;Core 1 在 12 ms 之后进入分区 C 的窗口,读取队列数据并执行任务管理逻辑。整个过程中,两个核的时间窗口互不重叠,IPC 路径有界,最坏情况可分析。

判断配置是否合理,可以问三个问题:每个分区的窗口是否覆盖了其最坏执行时间?跨核通信的最坏延迟是否小于接收方的窗口起点?是否存在两个分区同时访问同一共享对象而未加同步?

常见误区与排障线索

初学者容易把“分区”等同于“进程”。在 INTEGRITY 中,分区是资源与时间的容器,进程/任务只是分区内部的执行单元。另一个误区是认为多核一定比单核快——在安全关键场景中,多核带来的核间干扰可能使 WCET 反而增大,因此 AMP 的确定性往往比 SMP 的吞吐量更有价值。

如果系统出现偶发超时,排查顺序通常是:先看分区窗口是否被正确配置,再看 IPC 是否引入了不可预期的阻塞,最后检查 IPI 是否被低优先级中断延迟。INTEGRITY 提供的跟踪与统计对象可以帮助定位这些时序问题,但前提是配置阶段已经为每个对象设定了明确的权限与优先级。