ECNU 操作系统实验 · 2026 秋 · 非官方配套讲义
从零写一个内核
每个阶段对应课程的一个 lab。读完讲义、跑完示例、做完练习,你应该能看懂那个 lab 的指导书在要你做什么,以及为什么要这样做。
写给零基础的同学:不假设你学过操作系统,C 和 RISC-V 汇编也从需要的地方讲起。这不是课程官方材料,也不是 lab 的答案;练习都在自己电脑上完成,帮你读懂 lab 在要求什么。
获取代码
示例和练习要在自己电脑上跑。克隆仓库,或者在每个阶段页面顶部下载该阶段的压缩包:
git clone https://github.com/sudoyc/ecnu-oslab-guide.git cd ecnu-oslab-guide/01-lab1-boot/exercise/printf && make
需要 Linux 或 macOS(Windows 用 WSL)和 gcc。RISC-V 工具链的安装见 Lab0 第 2 节。
怎么用这套讲义
- 先读阶段的
index.html,遇到“动手”框就去跑对应的示例。 examples/是看的:跑一下,观察输出,不用改。exercise/是做的:补完 TODO,make看到全部 PASS 就算过关。- 卡住超过半小时再看仓库里的
solution/(网站上不放),看完合上,自己再写一遍。 - 最后回到课程仓库,做真正的 lab。练习只帮你理解,不是 lab 的答案。
阶段
预备知识
内存与地址、指针与结构体、位运算、RISC-V 汇编、异常与特权级、Git。主线里的“预备”框会链接到这里,按需查阅。
00 · Lab0 环境与工具
操作系统是什么;编译、链接、ELF;Makefile;Git 分支;QEMU。
01 · Lab1 机器启动
RISC-V 寄存器与特权级;entry.S → start.c → main;UART 与 printf;中断与自旋锁。
02 · Lab2 内存管理 提纲
物理页分配器、空闲链表、页表与内核虚拟内存。Lab1 完成后展开。
课程路线
| 阶段 | 实验 |
|---|---|
| 基础设施 | Lab1 机器启动 · Lab2 内存管理 · Lab3 中断与异常 |
| 进程系统 | Lab4 第一个用户进程 · Lab5 系统调用与用户虚拟内存 · Lab6 调度与生命周期 |
| 文件系统 | Lab7 磁盘与缓冲 · Lab8 inode/dentry/path · Lab9 文件管理与整合 |
| 硬件扩展 | Lab10 移植到 VisionFive 2 开发板 |
两次检查:Lab1–3 一次,Lab1–9 一次。检查内容是 Git 提交记录、每个 lab 的 README 文档、代码能否通过测试。