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 阻止跨分区访问。这些机制使得“一个分区失效不会导致整个系统失效”成为可证明的属性。
整体学习路径与实验环境搭建
本课程共 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 或串口日志观察分区切换和调度时序。判断环境是否正常的一个简单方法是:让每个分区在启动时打印自己的分区名和绑定的核编号,如果四个分区都能在各自的时间窗口内输出,说明基本调度与隔离已经生效。