Skip to content

MIT 6.1810:从程序进入内核,到自己修改内核 ​

这份课程包以 MIT 6.1810 Fall 2025、RISC-V xv6 为唯一实验基线。目标是能够从现象追到机制:一个 read 为什么可能睡眠,一个只读页为什么有时能在异常后继续写,一个已经退出的进程为什么还占着进程表项。随后把理解落实到九个官方实验。

阅读与实践顺序 ​

阶段先读再做能解释的结果
建立机器模型运行边界、进程utilfork、exec、wait 为什么分开
跨越权限边界系统调用syscall内核如何接收与限制请求
组织地址空间内存pgtbl页表、大页、只读共享页
保存与恢复执行异常与中断traps、cow恢复什么状态才能继续程序
多核与外设并发lock、net不变量、DMA、等待与唤醒
持久化与映射文件系统fs、mmap字节如何落盘,文件如何成为内存
验证掌握程度调试、综合复习实验验收能解释正确性,也能构造反例

每章先建立概念,再给源码入口;实验页给设计顺序、边界情况与检查方法。正文中的伪代码和 Python 模型用于解释机制。它们不是可直接提交的 xv6 完整答案,也不构成九个实验已经通过的证明。

版本是学习材料的一部分 ​

2025 的 util 使用 pause();syscall 实现 interpose sandbox;pgtbl 包含 superpage;lock 后半实现读写自旋锁。旧年度的 sleep() 内核接口、trace/sysinfo、buffer cache 锁实验不能直接套用。本版本的内核进程入口叫 kfork/kexit/kwait,用户接口仍叫 fork/exit/wait;返回用户态的重要入口是 prepare_return(),不是旧教程里的 usertrapret()。

labs/os/upstream-pins.json 保存 2026-10-04 从官方仓库实读的九个分支提交号。版本与环境给出获取方法。所有源码导航都指向相应实验分支;实验之间不是要求把全部改动顺次合并的一条产品分支。

学到什么程度算完成 ​

对于每个实验,至少保存四样东西:改动前的行为、关键不变量、测试记录、一个自己补充的反例。看到测试通过后,再回答“如果把哪一行删掉,哪个不变量先坏掉”。这一步能区分理解机制与恰好满足样例。

本课程包已经提供可在普通 Python 环境执行的地址转换和 COW 模型。真实 xv6 仍需 RISC-V 工具链与 QEMU;模型通过和真实内核通过分开记录,具体边界见实验总览。

官方入口:2025 课程、日程与九个实验、xv6 教材。