1. INTEGRITY多核调度与资源隔离课程导入

在航空电子、汽车电子、工业控制与医疗设备中,处理器早已从单核走向多核。硬件算力提升的同时,软件复杂度也急剧上升:一个 SoC 上可能同时运行飞行控制、显示渲染、通信协议栈、健康监控等不同安全等级的任务。如果这些任务共享 CPU 却没有明确的调度与隔离机制,高优先级任务可能被低优先级任务阻塞,一个模块的内存越界可能污染另一个模块的数据,最终导致系统失效。本课程围绕 Green Hills Software 的 INTEGRITY 实时操作系统,讲解多核调度与资源隔离的核心机制、配置方法和验证手段。

课程目标与 INTEGRITY 的定位

INTEGRITY 是一款面向安全关键系统的分离内核(Separation Kernel)实时操作系统。它最显著的特征是:每个分区(Partition)运行在独立的地址空间中,由内核强制隔离;分区之间的通信必须通过受控的通道(如 Channel、Connection)进行,不能直接访问对方内存。这种设计使 INTEGRITY 能够同时承载不同 DAL(Design Assurance Level)等级的应用,例如把 DAL-A 的飞控任务与 DAL-D 的显示任务放在同一颗多核芯片上,仍能证明高安全等级任务不受低等级任务影响。

本课程的学习目标可以归纳为三条主线:

  • 理解机制:掌握 INTEGRITY 的分离内核架构、分区模型、多核调度策略(如 Rate Monotonic、Time Partitioning、Affinity 绑定)以及资源隔离的边界。
  • 学会配置:能够使用 INTEGRITY 的配置工具(如 MULTI 集成开发环境、.int 配置文件)定义分区、分配 CPU 核、设置时间窗口和内存配额。
  • 能够验证:通过日志、跟踪工具和测试用例,观察调度时序、分区切换和隔离效果,判断配置是否满足实时性与安全性要求。

INTEGRITY 在系统中的位置可以用一个分层结构来描述:最底层是硬件(多核 CPU、MMU、中断控制器),其上是 INTEGRITY 分离内核,内核之上是各个分区,每个分区内可以运行 RTOS 或裸机应用。内核只负责调度、隔离和基本 IPC,不参与应用逻辑,从而保持极小的可信计算基(TCB)。

多核调度与资源隔离在安全关键系统中的作用

多核调度解决的是“哪个任务在哪个核上、什么时候运行”的问题。在安全关键系统中,调度不仅要满足实时性,还要满足可预测性。例如,一个飞控任务周期为 10 ms,必须在每个周期内获得足够的 CPU 时间;如果它被其他任务延迟超过 2 ms,就可能错过控制律计算窗口。INTEGRITY 通过时间分区(Time Partitioning)为每个分区分配固定的时间窗口,窗口内该分区独占指定的 CPU 核,窗口外即使有任务就绪也不能抢占。这种“时间隔离”与“空间隔离”(地址空间隔离)共同构成了资源隔离的两大支柱。

资源隔离还包括中断隔离、内存配额和 I/O 访问控制。例如,一个低安全等级的分区如果频繁触发中断,可能干扰高安全等级分区的执行。INTEGRITY 允许将中断绑定到特定核或分区,并限制中断处理时间。内存方面,每个分区的代码、数据和堆栈都被映射到独立的物理页,内核通过 MMU 阻止跨分区访问。这些机制使得“一个分区失效不会导致整个系统失效”成为可证明的属性。

INTEGRITY 多核调度与资源隔离架构 多核硬件平台 CPU Core 0 | CPU Core 1 | CPU Core 2 | CPU Core 3 | MMU | 中断控制器 | 共享内存 INTEGRITY 分离内核(Separation Kernel) 调度器 | 时间分区管理 | 地址空间隔离 | 中断路由 | 分区间通信(IPC) 可信计算基(TCB)—— 极小化、可验证 分区 A DAL-A 飞控任务 周期:10 ms 绑定:Core 0 时间窗口:0–6 ms 独立地址空间 分区 B DAL-C 显示任务 周期:20 ms 绑定:Core 1 时间窗口:6–10 ms 独立地址空间 分区 C DAL-D 通信协议栈 周期:50 ms 绑定:Core 2 时间窗口:10–15 ms 独立地址空间 分区 D 健康监控 周期:100 ms 绑定:Core 3 时间窗口:15–20 ms 独立地址空间 IPC 高安全等级分区 中安全等级分区 低安全等级分区 监控分区 受控 IPC 通道

整体学习路径与实验环境搭建

本课程共 30 章,建议按“概念—配置—验证—综合”的路径推进。前几章建立分离内核、分区、调度策略的基本概念;中间章节进入 INTEGRITY 的配置实践,包括创建分区、分配 CPU 亲和性、设置时间窗口、配置内存配额和 IPC 通道;后续章节通过跟踪工具和测试用例验证隔离效果,最后完成一个多分区多核调度的综合案例。

实验环境建议如下:

  • 宿主开发机:Windows 或 Linux,安装 Green Hills MULTI 集成开发环境(示例版本 MULTI 7.x 或更高)。
  • 目标硬件:支持多核的评估板,例如 NXP S32G、TI TDA4 或 QEMU 模拟的 ARM Cortex-A53 四核平台。若没有硬件,可使用 INTEGRITY 提供的模拟器进行功能验证。
  • 配置文件:每个实验提供一个 .int 配置文件,定义分区、核绑定、时间窗口和内存区域。例如:
# 示例:四核分区配置片段(教学示例,非实测)
Partition "FlightControl" {
    Core = 0;
    TimeWindow = [0ms, 6ms];
    Memory = 4MB;
    Entry = "flight_main";
}

Partition "Display" {
    Core = 1;
    TimeWindow = [6ms, 10ms];
    Memory = 8MB;
    Entry = "display_main";
}

Partition "Comms" {
    Core = 2;
    TimeWindow = [10ms, 15ms];
    Memory = 2MB;
    Entry = "comms_main";
}

Partition "HealthMonitor" {
    Core = 3;
    TimeWindow = [15ms, 20ms];
    Memory = 1MB;
    Entry = "health_main";
}

搭建步骤可以概括为:安装 MULTI 与 INTEGRITY BSP;创建工程并导入 .int 配置文件;编译内核与各分区镜像;通过调试器下载到目标板或启动模拟器;运行后使用 INTEGRITY Trace 或串口日志观察分区切换和调度时序。判断环境是否正常的一个简单方法是:让每个分区在启动时打印自己的分区名和绑定的核编号,如果四个分区都能在各自的时间窗口内输出,说明基本调度与隔离已经生效。

学习建议:每章至少动手完成一次配置修改,并观察修改前后的调度日志差异。例如,把分区 B 的核绑定从 Core 1 改为 Core 0,观察两个分区在同一核上的时间窗口是否仍然互不重叠。这种对比能帮助理解“时间隔离”与“空间隔离”的独立作用。