1. 课程导入

在嵌入式、车载、工业控制与云计算等场景中,一颗CPU上同时运行多个操作系统(Multi-OS)已不再罕见。典型形态包括:Linux与RTOS共存的双域架构、Hypervisor之上的多虚拟机、AMP(非对称多处理)下各核独立运行不同OS,以及安全域与通用域并行的混合关键系统。多OS资源规划,研究的正是在多个操作系统共享同一颗SoC或同一台物理机时,如何对CPU、内存与设备资源进行划分、隔离、调度与验证,使各OS既能满足各自的实时性、吞吐与安全要求,又不互相破坏。

它与单OS资源管理的根本差别在于:资源不再由单一内核统一仲裁,而是先经过一层“静态或半静态的划分”,再由各OS内部二次管理。因此规划的核心矛盾是隔离性与共享效率的平衡——划分过粗会导致资源浪费,划分过细又会引入通信开销与碎片化。

学习目标

  • 理解多OS系统的资源视图:物理资源、虚拟资源与逻辑资源三层映射关系。
  • 掌握CPU核分配、内存分区、设备直通与共享的规划方法。
  • 能够根据实时性、安全等级与成本约束,选择合适的隔离方案(AMP、SMP+Hypervisor、混合)。
  • 学会用参数与指标(延迟、抖动、带宽、占用率)评估规划结果。
  • 具备排障意识:识别资源争用、缓存干扰、中断风暴等典型问题。

整体知识框架

本课程的知识框架可归纳为“一个目标、三条主线、四个阶段”。一个目标是让多OS在共享硬件上稳定共存;三条主线分别是CPU资源、内存资源、设备资源;四个阶段是需求分析、划分设计、配置实现、验证调优。下图展示了三线资源与四阶段流程的对应关系,以及各阶段的关键输出物。

多OS资源规划知识框架 CPU 资源主线 核分配 · 亲和性 · 调度域 · 隔离 内存 资源主线 分区 · 预留 · 共享内存 · 缓存 设备 资源主线 直通 · 虚拟化 · 中断 · DMA ① 需求分析 实时性 / 安全等级 负载画像 / 成本约束 ② 划分设计 核 / 内存 / 设备分配表 隔离策略选型 ③ 配置实现 设备树 / Hypervisor 配置 启动参数 / 共享通道 ④ 验证调优 延迟 / 抖动 / 带宽测试 争用与干扰排查 关键输出物 资源分配表 · 隔离策略说明 · 设备树/Hypervisor 配置 · 共享内存与IPC方案 · 性能基线报告 · 排障手册 典型应用场景 车载座舱(Linux+RTOS) · 工业PLC(安全域+通用域) · 机器人(实时控制+视觉) · 边缘网关(多租户隔离) · 航空电子(混合关键)

核心原理:三层资源视图

多OS资源规划的本质,是建立“物理资源→虚拟资源→逻辑资源”的三层映射。物理层是真实的CPU核、内存条、外设控制器;虚拟层由Hypervisor或AMP框架提供,把物理资源切分成若干虚拟实例;逻辑层是各OS内核看到的CPU、内存与设备。规划工作就是设计这张映射表,并保证映射关系在运行时不被破坏。

核心原则:先隔离,后共享;先静态,后动态;先关键,后一般。对实时与安全关键域,优先采用静态划分与独占;对通用域,可采用动态调度与共享,但必须设置上限与回收机制。

方法流程:从需求到验证

  1. 需求分析:列出每个OS的实时性等级、峰值负载、安全等级、通信需求与成本预算。
  2. 划分设计:确定CPU核归属、内存分区大小与地址、设备直通或虚拟化方式,形成资源分配表。
  3. 配置实现:通过设备树、Hypervisor配置文件、内核启动参数等落地划分方案。
  4. 验证调优:测量延迟、抖动、带宽与CPU占用,排查资源争用与缓存干扰。

下面是一个典型的资源分配表片段,用于描述双域系统中Linux与RTOS的资源归属:

资源类型 Linux 通用域 RTOS 实时域 隔离方式
CPU 核 CPU0、CPU1 CPU2、CPU3 核独占 + 亲和性绑定
内存 0x8000_0000–0xBFFF_FFFF 0xC000_0000–0xCFFF_FFFF 静态分区 + MMU 隔离
网卡 虚拟网卡 vNIC0 物理网卡直通 VFIO 直通 / 虚拟化
串口 共享(分时) 独占 UART1 设备树裁剪
中断 GIC SPI 32–63 GIC SPI 64–95 中断路由隔离

案例场景:车载座舱双域系统

某车载座舱采用一颗8核SoC,Linux负责仪表与娱乐,RTOS负责倒车影像与CAN通信。规划时把CPU4–CPU7划给RTOS并绑定中断,内存为RTOS预留512MB连续物理内存,CAN控制器直通RTOS,显示控制器由Linux管理并通过共享内存向RTOS传递图层。验证阶段重点测量倒车影像的端到端延迟,要求小于50ms,抖动小于5ms。若发现Linux侧大内存拷贝导致RTOS延迟抖动,则通过限制Linux的DMA带宽与缓存占用来消除干扰。

常见误区与复盘

误区一:只做CPU核划分,忽略内存带宽与缓存干扰,导致实时域抖动超标。
误区二:设备全部共享,未做中断路由隔离,引发中断风暴拖垮关键域。
误区三:预留内存过大,通用域内存不足频繁换页,整体吞吐下降。
误区四:验证只测平均延迟,不测最坏情况,上线后偶发超时。

复盘时应回到资源分配表,逐项核对“谁在用、用多少、超了怎么办”。建议在项目早期就建立性能基线,把延迟、抖动、带宽、占用率作为持续跟踪指标,而不是等到集成阶段才补救。

# 示例:查看CPU核隔离与亲和性配置
cat /proc/cmdline
# isolcpus=2,3 nohz_full=2,3 rcu_nocbs=2,3

# 查看中断亲和性
cat /proc/irq/64/smp_affinity_list

# 查看内存分区预留
cat /proc/meminfo | grep -i reserved