本实验旨在一步一步展示如何从零开始用 Rust 语言写一个基于 RISC-V 架构的类 Unix 内核 。实验内容主要分为以下几个方面。
- Lab 0 - 配置操作系统开发的基本环境。
- Lab 1 - 构建一个独立的不依赖于 Rust 标准库的可执行程序。
- Lab 2 - 实现裸机上的执行环境以及一个最小化的操作系统内核。
- Lab 3 - 实现一个简单的批处理操作系统并理解特权级的概念。
- Lab 4 - 实现一个支持多道程序和协作式调度的操作系统。
- Lab 5 - 实现一个分时多任务和抢占式调度的操作系统。
- Lab 6 - 实现内存的动态申请和释放管理。
- Lab 7 - 实现进程及进程的管理。
共计 8 个实验项目,通过实验的方式深入研讨操作系统底层的工作原理,并使用 Rust 语言逐步实现一个基本的操作系统内核。
- OS 环境配置:对于 Windows 10/11 和 macOS 上的用户,可以使用 WSL 2、VMware Workstation、Parallels Desktop 等相关软件, 通过虚拟机方式安装 openEuler 22.03 LTS,并在上面进行实验。注意 VirtualBox 虚拟机会在后续实验操作中出现问题,不建议使用。
- Rust 环境配置:需要在虚拟机上配置好 Rust 开发环境。
- Qemu 模拟器安装:我们需要使用 Qemu 7.0.0 以上版本进行实验,为此,从源码手动编译安装 Qemu 模拟器。
- 熟悉操作系统相关知识。比如,一个程序运行中操作系统到底起了什么作用?程序运行中操作系统的内核态和用户态工作情况?OS 的系统调用?进程?内存?IO?等。
- 对计算机体系结构有一定简单了解。比如,裸机是什么?裸机上能跑程序吗?什么是指令集?计算机体系结构?CPU、内存、IO 等这些硬件之间如何协调完成计算任务的?
- 能够读懂简单的汇编语言、能够读懂简单的 Makefile 文件。
- 熟悉 Rust 基本语法,包括 Cargo 项目结构、Trait、函数式编程、Unsafe Rust、错误处理等。为了便于同学们入门 Rust,我们准备了一份 Rust 入门教程。
本教程内容参考了清华大学操作系统实验课 rCore 。并在其基础之上做了一定程度的修改和完善。
如果在阅读本教程的过程中发现内容有疏漏之处,欢迎提 issue。