> For the complete documentation index, see [llms.txt](https://rcore.gitbook.io/rust-os-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://rcore.gitbook.io/rust-os-docs/xiang-mu-zheng-ti-jie-shao.md).

# 项目整体介绍

## 背景和历史

RustOS起源于清华大学操作系统课（2018春）的大实验。立项初衷是使用Rust语言移植ucore\_os\_lab，并利用Rust语言特性进行SMP多核优化。

同时进行的还有另外两个Rust小组，目标分别是实现LKM（内核可加载模块）及面向ARM的移植（基于CS140e）。考虑到OS的高耦合性，三组开发独立进行，目前尚未合并。

经过前期调研，我们选定《[Writing an OS in Rust](https://os.phil-opp.com/second-edition/)》系列博客作为起点，它包含一个简单的x86\_64内核，支持中断，并封装好了页表。

我们发扬革命乐观主义精神制定了开发计划，之后发现（近乎从零开始）重写OS的工作量远超预期。经过约两个月的爆肝，我们仅完成了大部分ucore\_os\_lab的移植工作，多核支持完全没有开始。

在接下来的计算机系统综合实验课（2018夏）上，我们又将RustOS移植到RISCV32I平台，并在我们自己造的[FPGA CPU](https://github.com/riscv-and-rust-and-decaf/riscv32i-cpu-chisel)上正常运行。感谢[张蔚和石振兴的工作](https://ring00.github.io/bbl-ucore/)，他们留下了丰富的文档，使得移植工作只用了两周。

转眼到了操作系统专题训练课（2018秋），接下来的历史将由大家共同书写！

## 目标和哲学

以下言论均为作者个人观点，欢迎读者共同探讨改进。

#### 兼容原版uCore

大量用户程序，直接拿来用。

#### 逻辑上独立的部分，尽量分离成模块

目前内核中三大模块：内存管理、进程管理、文件系统，都已经作为独立的crate存在。致力于让使用者：实现底层支持，享用高层功能。

#### 有现成的轮子，绝不自己造

借助Rust强大的包管理系统，我们可以方便地复用别人的代码。目前OS的如下功能，均由外部库完成：x86\_64和riscv底层支持，堆分配算法，ELF解析，自旋锁，日志……

## 已做的事 和 要填的坑

* [x] 模块化内存管理，进程管理
* [x] 支持rv32
* [x] 重构x86\_64 boot流程，使用[bootloader](https://github.com/rust-osdev/bootloader)和[bootimage](https://github.com/rust-osdev/bootimage)
* [x] !! 进程和文件系统的接合（目前ls等程序尚未实现）
* [ ] !! xv6 x86\_64 用户程序测试
* [ ] ! [内核可加载模块](https://github.com/ivanium/RustOS)的合并
* [ ] ! 按OS lab顺序进行拆分
* [x] ! 多核的启动：rv32，x86\_64
* [x] ! 多核支持和优化（参考sv6）
* [x] rv64支持（依赖于Rust for RV64编译器）
* [x] 无MMU支持（如RISCV M-Mode）
* [ ] 网络驱动
* [ ] 跟踪分析工具

## 相关链接和参考资料

* [OS大实验项目Wiki](http://os.cs.tsinghua.edu.cn/oscourse/OS2018spring/projects/g11)（仅内部访问）
* [计算机系统综合实验项目Wiki](http://os.cs.tsinghua.edu.cn/oscourse/csproject2018/group05)（仅内部访问）
* [Writing an OS in Rust](https://os.phil-opp.com/second-edition/)：从头开始用Rust写x86\_64内核，非常详尽的教程，强烈建议阅读。
* [rust-osdev](https://github.com/rust-osdev)：GitHub组织，由上述博客作者牵头维护。提供诸多用Rust编写OS所需的函数库和工具链。
* [CS140e](https://web.stanford.edu/class/cs140e/)：Stanford开设的实验性OS课程，使用Rust编写OS并在树莓派3上运行。
* [Redox](https://github.com/redox-os/redox)：完成度最高的Rust OS，支持GUI。
