Skip to content

内核设计 ​

RME 是一个基于权能的微内核。内核提供机制;调度、分页、设备管理和虚拟化等 策略,由用户态通过权能组合。本页依次介绍这些机制。

权能 ​

权能是一个不可伪造的令牌,它命名一个资源,并携带操作该资源的权限。RME 的权能 遵循三条规则:

  1. 用户态不能修改权能;
  2. 权能只能通过定义良好的接口在进程间传递;
  3. 只有可以操作对应资源的进程才能获得权能。

设计采用两级权能表,把查找深度限制在 2(用 seL4 的术语,CSpace 深度为 2)。 权能统一大小,并按 8 字边界对齐,因此表可以在竞争激烈的多核环境中管理, 无需可变大小分配。某些调用会在一个事务中操作多个权能,摊薄查找成本。

进程持有一张权能表
→
第一级固定、统一槽位
→
第二级对象权能
→
对象线程、页表、端点、IRQ

保护域属于进程,而不是线程:进程是一张权能表加一张页表,由其中的所有线程 共享。线程不携带独立的权能空间,这让上下文切换保持廉价,也让权限模型保持清晰。

调度 ​

内核做抢占决策,用户态管理执行预算。

  • 每个线程携带预算。内核调度器是一个简单的 FPRR(固定优先级轮转)机制,只 消耗 预算,从不补充或撤销。
  • 预算补充、撤销和层次化策略都由用户态决定。因此快路径永远不需要调用调度器 线程:抢占决策只是一次有界的内核比较。
  • 在微控制器上,这给出最短的延迟和基本的预算控制。在应用处理器上,可以通过 安排优先级绕过内核 FPRR,改用任意复杂的用户态 MCS 策略,代价是额外一次 上下文切换——当流水线是超标量、且界定的干扰比最后一微秒更重要时,这是 可以接受的。

这种划分让 RME 既能作为 RTOS 级内核,也能作为混合关键度调度的基础,而不把 策略引擎塞进内核。

内存 ​

内核对象位于**内核对象表(KOT)**中。其位图粒度为 32 字节,因此对象边界 在编译期已知,内核快路径不需要通用分配器。

  • 地址空间管理可以留在内核,也可以通过页表权能委托给受信任的用户态页服务器。
  • 内核可以配置为完全移除内核内的地址空间管理,只留下纯权能与调度核心。
  • 内存通过页表权能重型和委托;内核强制执行权限,用户态服务器决定布局。

通信 ​

RME 有两种通信原语:

同步调用 ​

同步调用把客户线程迁移到服务器。客户线程使用自己的时间预算执行服务器代码。 没有单独的服务器线程,不需要调用调度器,也不会因为服务器循环引入优先级反转。 服务器通过 RME_SVC_INV_RET 返回。

异步信号 ​

信号端点等价于每个处理器的计数信号量。发送和接收都是端点权能上的有界操作; 中断信号使用同一机制,因此实测中断信号延迟与进程内信号处于同一量级。

用户态 IPI 让不同核心上的组件互相通知,而不必把每个通知都经过全局内核锁。

虚拟化 ​

RME 为每个 vCPU 提供两个线程:

  1. 一个用户态 vCPU 线程,执行客机代码;
  2. 一个更高优先级的向量线程,处理该 vCPU 的陷阱和中断。

这是 II 型准虚拟化:客机的特权操作被转换为对 vCPU 监视器的调用。在具有硬件 虚拟化扩展的平台上,同样的结构可以承载 I 型 Hypervisor。全虚拟化被刻意限制 在硬件/软件接口存在事实标准的平台上;项目不会在每个架构上尝试影子页表和 动态二进制翻译。

托管 RTOS 时,实测虚拟化开销最低可到 6%。

并行与内核调用 ​

内核为多核设计,但不使用粗粒度锁:

  • 快路径使用无锁数据结构和原子操作;
  • 每个系统调用都是一个有界时间事务,而不是一串各自加锁的步骤;
  • 对象通过基于静默期的 RT-SMR 回收,而不是 stop-the-world;
  • 线程显式绑定到处理器,调度器不需要追逐迁移中的运行队列。

内核本身不可抢占,每个 CPU 一个内核栈,避免无界循环和递归。共有 34 个内核 调用(0–33;34–63 保留),覆盖调用、信号、线程、权能、页表、进程和端点操作。

分组调用
调用 / 信号激活、返回、发送、接收
线程创建、删除、执行、切换、优先级、时间转移、绑定
权能创建、删除、冻结、添加、移除
页表创建、删除、添加、移除、构造、析构
进程创建、删除、设置权能表、设置页表
端点创建/删除信号端点与调用端口

刻意保持很小的内核 ​

与架构无关的核心是一个约 8000 行的 C 文件。内核只暴露机制:页服务器、调度器、 vCPU 监视器和驱动,都是持有权能的普通用户态组件。这正是同一个内核能够从 64 KB MCU 配置到多核机器的原因,也是安全论证可以被审查的原因。

本软件是 EDI 的官方作品,属于公有领域。

GitHub·Discord·QQ 群 1038895132·rtospro.com