ArceOS 架构
ArceOS 是 TGOSKits 中的组件化 Unikernel,通过 Rust crate 与 Cargo feature 做编译期装配。它在仓库中同时扮演三种角色:独立运行时、示例应用平台,以及 StarryOS 和 Axvisor 的共享能力提供者。
系统定位
ArceOS 在仓库中同时扮演三种角色:独立运行的 Unikernel、示例应用的平台,以及 StarryOS 和 Axvisor 的共享能力提供者。这种多重定位决定了它的模块化程度和接口设计——既要自身可用,又要便于上游系统复用。
| 角色 | 含义 | 在仓库中的体现 |
|---|---|---|
| 组件化单内核 | 通过 Cargo feature 做编译期装配,只链接被选中的能力 | os/arceos/modules/*、api/*、ulib/* |
| 基础系统平台 | 直接承载示例应用和测试包 | apps/arceos/*、test-suit/arceos/* |
| 共享能力提供者 | 为 StarryOS 和 Axvisor 复用 HAL、 调度、内存、驱动等基础能力 | ax-hal、ax-task、ax-mm、ax-driver 等被上层直接依赖 |
ArceOS 的设计核心在于:"功能是否存在"本质上是编译期装配问题,而非运行时开关问题。 应用只需在 Cargo.toml 中声明所需的 feature,运行时自动按 feature 组装对应的模块链路。
架构概览
ArceOS 的 crate 按职责组织成一条从底层平台到上层应用的能力传递链。
应用最终经由 user lib -> API -> modules -> HAL/platform 链路获取能力。StarryOS 和 Axvisor 直接复用底层模块,因此 ax-hal、ax-task、ax-driver 等模块的改动可能同时影响多个系统。
分层职责
ArceOS 从底部硬件平台到顶部应用,依次经过六层。每一层只依赖比自己更低的层,且尽量通过 Cargo feature 控制是否参与编译,而非在运行时做条件判断。
| 层次 | 主要目录 | 关注点 |
|---|---|---|
| 可复用 crate 层 | components/* | 算法、同步、容器、地址空间、设备抽象等可被多个系统复用的基础构件 |
| 平台与 HAL 层 | platforms/*、os/arceos/modules/axhal | 架构相关启动、时钟、中断、内存映射、设备访问 |
| 内核服务模块层 | os/arceos/modules/* | 内存分配、页表、任务调度、驱动、文件系统、网络、图形等 OS 能力 |
| API 聚合层 | os/arceos/api/* | feature 选择、稳定 API 封装、POSIX 兼容接口 |
| 用户库层 | os/arceos/ulib/* | ax-std、ax-libc 等高层开发接口 |
| 应用与测试层 | apps/arceos/*(9 个)、test-suit/arceos/* | 场景化验证与系统回归 |
模块体系
ArceOS 的 17 个模块按重要性分为两类:四个必选模块构成最小可运行骨架,其余可选模块通过 Cargo feature 按需启用。这种"必选 + 可选"的结构使得最终镜像可以非常精简——一个 Hello World 示例只需四个必选模块加 ax-alloc 即可运行。
必选模块
无论应用选择哪些 feature,以下模块始终参与编译。它们构成 ArceOS 的基础运行时:能启动、处理中断和定时器、调度任务、同步并输出日志。
ax-runtime:启动与初始化总控。ax-hal:统一硬件抽象层。ax-task:任务、调度、等待队列与 timer。ax-sync:任务态同步原语。ax-log:日志输出与格式化。