跳转至

xv6 学习历程 00 · 出发:为什么读 xv6,怎么读

读内核源码这件事,喊口号的人多,读完的人少。Linux 内核千万行级,从哪儿下嘴都是问题。所以换条路:先把 MIT 的 xv6 整本读穿,再回头看 Linux。

这是系列第 0 篇:交代为什么选 xv6、怎么读,并把运行环境搭起来。全系列的路线图和进度清单收在索引页,读一章写一篇,篇与篇首尾相接。

xv6 是什么

xv6 是 MIT PDOS 维护的教学操作系统,是 Unix 第六版(V6)的现代复刻——名字就来自当年把它移植到 x86 上的那个版本,如今内核换成了 RISC-V,名字没改。

它由 Russ Cox、Frans Kaashoek、Robert Morris 三位写成,也是 MIT 6.1810(原 6.S081)操作系统课的教材。书很薄,代码是 C 加少量 RISC-V 汇编,小到可以逐行读完。

书和代码是一体的:书里讲到的每个机制,都直接给出对应的函数名,没有中间抽象层。

为什么从它开始

三个理由:

  • 代码量小 —— 进程、页表、trap、锁、调度、文件系统俱全,但总量读得完
  • 书与源码互为注解 —— 机制和实现一一对应,不用自己搭桥
  • 实验配套 —— MIT 6.1810 的 labs 可以当练习题,随时检验理解

和直接读 Linux 内核的区别

读 Linux 是"用地图找路",读 xv6 是"亲自把地图画一遍"。画完一遍地图,再去看真实世界的城市,才有下手的位置。

环境搭建

需要 RISC-V 工具链和 QEMU,Linux 或 WSL2 下几条命令:

# 安装工具链和 QEMU
sudo apt-get install git build-essential gdb-multiarch \
    qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu

# 拉代码
git clone https://github.com/mit-pdos/xv6-riscv.git
cd xv6-riscv

# 编译并启动
make qemu

看到 xv6 kernel is booting,接着出现 shell 提示符 $,说明手里已经跑着一个完整的操作系统了。

退出 QEMU 的方式不常见:Ctrl-a 然后按 x

工具版本的坑

QEMU 和工具链版本不同平台差异不小,装不上或起不来时,以 MIT 6.1810 的工具页 为准,别自己硬猜。

先跑通,再谈理解

环境没跑通之前别急着读书。后面每一篇我都会用 make qemugdb 做实验,一个能随时打断点的环境是前提。

怎么读

给这个系列定三条规矩:

  1. 书和源码对读 —— 书里提到任何函数(forkexecwalk……),立刻跳进源码看一眼
  2. 每章一个实验 —— 哪怕只是打印一次页表内容,也比只看书强
  3. 疑问不过夜 —— 没想明白的写进当篇的疑问清单,后续章节来了再回收

全书的推进顺序和进度,见索引页的历程清单,读一章写一篇。

小结

第 0 篇干两件事:定下系列的读法,把环境跑起来。make qemu 看到那个 $ 提示符的时候,一个能敲命令的操作系统就在手边了。

下一篇:01 · Ch.1 操作系统接口——从 shell 和 fork/exec/pipe 的用户视角开始,先学会"用",再钻进去看"怎么实现"。


最后更新:2026-09-18

评论