2. INTEGRITY多核架构基础
INTEGRITY作为面向高安全、高实时场景的RTOS,其多核支持并不是简单地把单核内核“复制”到多个核上,而是围绕分区(Partition)—虚拟地址空间—调度器—核间通信这条主线重新组织。理解多核架构,首先要区分两种基本运行模型:对称多处理(SMP)与非对称多处理(AMP),以及它们与INTEGRITY调度器、核间中断(IPI)之间的关系。
一、SMP与AMP:两种多核组织方式
在INTEGRITY中,SMP指多个物理核共享同一个内核实例、同一份全局调度器状态和同一套系统对象(如任务、信号量、分区)。所有核看到的是同一个逻辑系统,任务可以被全局调度器分配到任意一个核上运行,核间通过共享内存和自旋锁保护内核数据结构。SMP的优点是负载均衡自然、编程模型统一;代价是内核临界区需要加锁,核数越多,锁竞争和缓存一致性开销越明显。
AMP则相反:每个核运行独立的操作系统实例(可以是INTEGRITY,也可以是INTEGRITY加裸机程序或另一个RTOS),各自拥有独立的调度器、地址空间和中断向量。核与核之间通过显式的共享内存、消息通道或硬件邮箱通信。AMP的优点是隔离性强、确定性好、单核失效不易扩散;代价是资源不能自动均衡,通信需要显式设计,启动顺序也必须严格编排。
实际工程中,INTEGRITY常采用混合模型:一部分核组成SMP集群运行通用分区,另一部分核以AMP方式运行安全关键或专用I/O分区。选择依据通常包括:是否需要硬实时确定性、核间数据耦合程度、认证范围(是否要求核间故障隔离)、以及SoC是否支持缓存一致性互联。
二、全局调度器与本地调度器
INTEGRITY的调度体系可以理解为两层:全局调度器(Global Scheduler)负责跨核的任务放置与负载均衡,本地调度器(Local Scheduler)负责每个核上就绪队列的实时调度决策。全局调度器并不直接决定“下一个运行谁”,而是决定“任务应该放在哪个核的就绪队列里”;本地调度器则在该核上按优先级、时间片或ARINC 653分区窗口执行。
在SMP模式下,全局调度器维护全局任务表,当某个核空闲或负载超过阈值时,触发任务迁移。迁移的粒度通常是任务(Task)或分区(Partition),迁移过程需要暂停任务、保存上下文、更新全局映射,再在目标核上恢复。在AMP模式下,全局调度器退化为配置期的静态分配表,运行期不再迁移,本地调度器完全自治。
一个关键参数是调度器锁的持有时间。在SMP中,全局调度器访问全局就绪队列时必须持有自旋锁,锁持有时间过长会阻塞其他核。INTEGRITY通过将就绪队列按核分片、减少全局共享结构来降低竞争。对于硬实时任务,通常建议将其绑定到固定核(CPU亲和性),避免迁移带来的缓存失效和调度抖动。
三、核间通信机制
INTEGRITY提供多种核间通信手段,按耦合程度从松到紧排列:
- 共享内存 + 信号量/自旋锁:适合同一SMP集群内的高吞吐数据交换,需要处理缓存一致性和内存屏障。
- 消息队列(Message Queue):INTEGRITY的核间消息通道,支持固定长度消息,发送方和接收方可位于不同核甚至不同分区,由内核负责拷贝和通知。
- 核间中断(IPI):用于事件通知、调度器唤醒、TLB/缓存维护等控制路径,延迟低但数据量小。
- 共享内存环形缓冲区 + IPI通知:工程中最常见的组合,大数据走共享内存,IPI只传递“有新数据”的信号。
以共享内存环形缓冲区为例,典型实现需要定义:缓冲区基地址、长度、读指针、写指针、以及一个用于保护指针的核间自旋锁或原子操作。发送方写入数据后更新写指针,然后向接收核发送IPI;接收核在IPI处理程序中读取写指针,从缓冲区取走数据并更新读指针。指针更新必须使用内存屏障,防止编译器和CPU重排序导致接收方看到“数据未写完但指针已更新”的错误状态。
四、多核启动流程与核间中断
INTEGRITY多核启动通常分为三个阶段:主核引导、从核释放、系统同步。上电后,主核(Boot Core)首先执行BootROM和INTEGRITY内核初始化,建立全局数据结构、内存池和中断控制器;然后主核通过SoC特定的寄存器(如ARM的CPU Release Address、PowerPC的Spin Table)释放从核。从核从指定入口开始执行,完成本地MMU、缓存、本地调度器初始化后,置位“就绪”标志。主核等待所有从核就绪,再统一打开全局中断,进入多核调度状态。
核间中断是这一过程的“神经系统”。INTEGRITY将IPI用于:唤醒目标核上的调度器、通知任务迁移、触发远程TLB失效、以及传递核间消息到达事件。IPI的发送通常通过中断控制器(GIC、MPIC等)的软件生成寄存器完成,接收核在IPI处理程序中根据中断号或消息寄存器判断事件类型,再分派到对应处理函数。
下面这张图展示了INTEGRITY SMP/AMP混合架构下,主核与从核的启动顺序、全局/本地调度器位置,以及共享内存+IPI的核间通信路径。
五、工程配置要点与判断依据
在INTEGRITY工程中配置多核,通常需要关注以下参数与判断点:
| 配置项 | 典型取值/示例 | 判断依据 |
|---|---|---|
| 核运行模式 | SMP / AMP / 混合 | 硬实时任务是否要求核间故障隔离;数据耦合是否紧密 |
| 任务亲和性 | 绑定Core 0或Core 1 | 避免迁移抖动;缓存局部性要求高时绑定 |
| 共享内存大小 | 示例:64 KB环形缓冲区 | 按峰值消息速率×最大延迟估算 |
| IPI中断号 | 示例:GIC SPI 10 | 需与SoC中断分配表一致,避免冲突 |
| 内存屏障 | DMB / ISB(ARM) | 指针更新与数据写入之间必须插入屏障 |
总结来看,INTEGRITY多核架构的核心不是“核越多越好”,而是根据确定性、隔离性和吞吐需求,在SMP与AMP之间做出合理取舍,并用全局/本地调度器、共享内存和IPI把多个核组织成一个可预测、可验证的整体。理解启动顺序和核间中断路径,是后续进行多核分区配置和实时性调优的基础。