组件化微内核系统设计方案 #
v1: 20250904
背景 #
微内核系统在安全性和可扩展性方面有很强的优势,但在内存占用大,CPU利用率不如宏内核。已有前期工作已把seL4用Rust语言进行重写,形成了的ReL4微内核,并在微内核之上的用户态移植了unikernel操作系统ArceOS。本项目希望对ReL4和ArceOS进行组件化分解,最终把ReL4改进成基于内核组件库定制安全和高性能的微内核系统。
项目目标 #
把ReL4和针对微内核修改过ArceOS分解成内核组件,加入到内核组件库中,并基于可多架构复用的组件库定制微内核和其上的传统操作系统功能。
- 经过多轮迭代,逐渐细分形成功能的接口定义合理的微内核相关内核组件;
- 通过合理的接口封装和功能划分,逐步减少内核组件中的不安全Rust代码,并把必须使用的不安全Rust代码集中到少数内核组件中;
- 完善内核组件文档,并发布到crates.io上,以提高复用的可能;
- 利用用户态中断等软硬协同技术,优化微内核系统的性能;
近期目标 #
- 微内核ReL4的代码梳理,以减少冗余代码,优化代码结构;
- 微内核ReL4的 hypervisor 支持;
- 微内核ReL4的内核组件分解,尽可能复用已有内核组件,形成针对微内核架构需求的内核组件;
- 微内核上用户态运行的传统内核的内核组件分解,尽可能复用已有内核组件,形成针对微内核架构需求的用户态功能的内核组件;
任务分解 #
- ReL4代码梳理
- 修复现有代码中的所有 warnning;
- 将现有代码进行梳理,针对一个功能尽可能用一个实现完成;
- 约束 cfg 的影响范围和数量,尽量将一个功能的东西放在一起,凑在一个 cfg 中;
- 函数和其他一些命名规范化,减少阅读和编码成本;
- 收缩 unsafe 代码的存在和范围,对于 asm 指令,尽量使用各个库中提供的,其他的同理;
- 整理现有的模块的层级,将公共部分放在单独的模块中,特性部分根据类别分辨(arch、object、kernel、build 等分类);
- 在修复后对 github 主分支添加保护措施,只能够合并符合规范的 PR,不可直接提交;
- 在 CI 中添加 rust clippy 的检查,保证在合并中没有 warnings 和 错误;
- 如果有可能,后续采用 PR 必须有一个 reviewer 审查的方式。
- ReL4 hyperisor 支持
- 逐渐完善 hypervisor 的页表支持,添加相关特性
- 通过用户态的测例
- 传统内核的适配和组件分解
- 抽象微内核适配 arceos crate,将 reL4 能力,内存,任务等功能进行封装成一个单独的 crate
- 开发底层适配相关功能,如 paging,中断操作,任务切换等等
- 多核功能适配
- 支持同时运行多个操作系统,设计多系统情况下的资源分配和虚拟化,资源如 中断、外设、内存、核心等
- 提高 arceos + reL4 的易用性,目前运行还需两个仓库分别编译。目标尽量适配 arceos 原有编译脚本。