NoAxiom 操作系统是由杭州电子科技大学NoAxiom 团队从零自主开发的一款基于 Rust 的混合内核操作系统。NoAxiom 自主实现了一套完整的硬件抽象 HAL 层,能够在不修改内核代码的情况下,同时于 RISC-V64 和 LoongArch64 两种架构上运行。此外,NoAxiom采用 Rust 的无栈协程与异步语法实现了异步调度,在 I/O 方面具备优秀性能。
在2025年全国大学生计算机系统能力大赛中,NoAxiom获得了OS内核实现赛道一等奖的成绩。
NoAxiom 操作系统整体分为以下四个层次:机器层、硬件抽象层、内核实现层、用户层
目标是支持多平台多架构(如 RISC-V64 与 LoongArch64),同时适配 QEMU 虚拟机与物理开发板平台。这些被统一归为机器层,并由上层的硬件抽象层统一封装。
该层抽象底层硬件,向上提供统一接口,主要子模块如下:
- 指令集架构抽象层:定义统一
Archtrait,封装所有架构相关的函数与常量,位于lib/arch。 - 平台抽象层:根据编译时平台定义常量,解耦虚拟与物理环境差异。
- 内存抽象层:封装架构/平台相关的内存初始化逻辑,提供统一访存接口。
- 驱动抽象层:启动时自动设备嗅探与注册,支持设备树与中断注册(如 RISC-V 下的 PLIC)。
目前我们已经将NoAxiom-HAL提取为独立的代码仓库,后续将在此仓库上完善、优化HAL库功能,为社区生态贡献力量。
基于 HAL 提供的接口,内核实现各类功能子模块,并向用户提供统一系统调用接口。主要子模块包括:
- 进程管理:维护 PCB、任务管理器等。
- 任务调度:基于无栈协程实现异步调度。
- 文件系统:通过 VFS 抽象底层,支持多文件系统、异步调度与 I/O 多路复用。
- 信号系统:支持进程间异步通信。
- 内存管理:支持懒分配、异常检查、用户指针校验。
- 时间管理:支持可靠的定时功能。
- 网络模块:实现 TCP/UDP、支持 IPv4/IPv6,具备高并发性能。
提供用户程序运行支持,初始进程 ELF 文件内嵌于内核中,赛事测试样例运行于此层。
截至目前,NoAxiom 实现了 115 个系统调用,覆盖以下功能领域:
- 文件系统
- IO
- 网络
- 进程管理
- 信号处理
- 内存管理
- 调度管理
- 时间管理
系统已成功运行大部分官方测例(除少数 ltp 测试点外)。具体子模块完成情况如下:
| 子模块 | 实现情况 |
|---|---|
| 进程管理 | - 统一的进程资源抽象 - 细粒度共享资源 |
| 内存管理 | - 内核与用户地址空间共享 - 懒分配与写时复制 - 快速检查用户指针合法性 - 文件映射懒分配的完整异步让权 |
| 文件系统 | - 类 Linux 的 VFS 虚拟文件系统 - 支持管道、套接字等虚拟文件挂载 - 支持异步 EXT4、FAT32 - 耗时读写操作的异步让权 - 实现高效的页缓存 - 支持异步让权下的I/O 多路复用 |
| 任务调度 | - 完整的分时多任务异步调度 - 抽象统一调度器特性 - 支持任务优先级 |
| 信号系统 | - 实现信号系统维护 - 支持可被信号中断的系统调用 |
| 硬件抽象层 | - 自主支持 RISC-V64 和 LoongArch64 - 统一解耦的硬件接口设计 - 架构解耦的访存与中断机制 |
| 设备驱动 | 多架构下的设备嗅探机制 - 异步块设备驱动 - 异步块缓存支持 |
| 网络模块 | 支持 TCP/UDP 套接字 - 支持 IPv4/IPv6 协议 - 实现端口复用 - 支持等待过程的异步让权 |
在长达一年的项目开发过程中,我们参考了大量往届优秀参赛作品与优秀社区开源作品,它们的优秀设计是我们在操作系统内核设计道路上重要且不可或缺的指路明灯。在此,我们列出我们主要参考的作品,以表感谢。
| 项目 | 参考功能 |
|---|---|
| rCore | 教学操作系统,为我们打下了坚实的OS基础 |
| Pantheon | 无栈协程,进程管理,内存管理 |
| DragonOS | 网络模块 |
| Phoenix | 无栈协程,内存管理,信号管理 |
| NPUcore-IMPACT | LoongArch架构汇编参考 |
| Tornado-OS | 文件系统异步驱动 |
| Polyhal | 多架构HAL层设计思想 |