Skip to content

九个实验的路线、检查点与完成证据 ​

全部实验固定 MIT 6.1810 2025。每个分支是官方为该实验准备的起点,不要求把前面所有实验答案手动合并到后面。完整 SHA 保存在项目 labs/os/upstream-pins.json,获取方式见环境与版本。

实验本年实际任务主验证深度
utilsleep/pause、sixfive、memdump、find、execfindtest.sh、make grade深入用户接口与内存表示
syscallGDB、interpose、路径例外、残留内存sandbox 测试、make grade深入权限边界与进程继承
pgtblPTE 解读、USYSCALL、vmprint、superpagepgtbltest、usertests深入翻译与分配生命周期
traps汇编、backtrace、alarmbttest、alarmtest、usertests深入状态保存恢复
cow延迟复制、引用计数、copyoutcowtest、usertests最详细的跨模块补丁设计
netE1000 驱动、UDP 接收与端口队列nettest.py、nettest、make grade驱动 I/O 流程为主
lockper-CPU freelist、读写自旋锁kalloctest、rwlktest、usertests深入不变量与公平性
fs双级索引、符号链接bigfile、symlinktest、usertests深入索引与资源回收
mmapVMA、惰性读页、解除与写回mmaptest、usertests深入内存与文件的连接

每个实验留下可复核记录 ​

推荐一份记录包含:上游提交、自己的改动范围、构建工具版本、测试命令、原始输出、自己新增的边界测试、尚未验证的部分。不能只保存最终分数;分数无法解释是哪个构建、哪个分支、哪次运行。

在自己的 xv6 实验目录中可以使用:

sh
git rev-parse HEAD
git diff --stat
make clean
make grade

执行前确保改动已妥善保存。make clean 清理构建产物;它不是版本回退。make grade 在宿主机执行,测试程序名称通常在 xv6 shell 中执行。网络实验有宿主和来宾双侧程序,不能把两个命令放在同一个 shell 猜测运行。

从能运行到能说明 ​

第一层检查“能构建、能启动”;第二层检查官方测试;第三层检查资源是否反复使用后仍完整;第四层解释边界。比如 COW:一次 fork 成功只说明局部路径可运行;forkfork、copyout、OOM、只读页、不同退出顺序共同覆盖所有权协议。lock 还需多 CPU 配置,net 还需跨越描述符环,fs 还需删除后重新创建。

测试失败时先缩小触发条件,不先修改评分脚本或放宽断言。测试通过后不要立即扩大改动范围;先保存可解释的版本,再探索性能优化。一个同时改 COW、大页、mmap 和锁的补丁,出现内存损坏时很难确定是谁破坏了最早的不变量。

本仓库实际提供与验证的内容 ​

labs/os/models.py 提供普通 Python 可运行的 Sv39 和 COW 教学模型;test_models.py 包含地址、权限、大页、父子隔离、只读保护、退出回收、OOM 与跨页 copyout 测试。运行方式:

sh
python3 labs/os/models.py
python3 -m unittest discover -s labs/os -p 'test_*.py' -v

本课程包的真实验证记录见 labs/os/verification.md。**教学模型测试通过不等于九个 xv6 实验解答通过。**本仓库交付的是完整概念与实验导读、可运行模型和上游版本记录;没有把整套官方实验参考答案或未经运行的补丁宣称为完成品。

验收时口头解释三件事 ​

对每个实验,能够指出一条完整执行路径,解释一个资源的生命周期,并构造一个会击穿错误实现的反例。以 mmap 为例:路径是 fault 到 readi 到 PTE;资源是 VMA 的 file 引用;反例是 close fd 后再访问映射。这样的验收比背诵函数名更接近真正掌握。

自测:官方测试通过后,为什么还要记录未覆盖范围?

测试只针对实验承诺,不证明生产级语义或所有并发交错。明确边界能防止将实验简化误当成系统通用规律,也能帮助下一阶段扩展时选择真正需要的新验证。

官方依据:2025 日程与各实验页。下一步:调试流程、综合自测。