引言
在acm新生赛之后,终于有空来学习一下名震八方的6.s081了。历经3个月时间(其实完全不用这么久,但中间摆了一会儿),终于基本看完了所有Fall 2020公开课,阅读了xv6 book全文,完成了11个lab,对xv6这个迷你操作系统有了一个初步的认识。现写此总结,以记录我的学习历程。
我的实验仓库: https://github.com/Lifelong-journey/xv6-lab
课程与实验概述
该课程分为两部分,前一部分紧密结合xv6讲解其原理,后一部分以阅读paper为主讲解现代操作系统的优化策略。每节课前需要阅读相应的book章节或者paper,否则很难跟上教授的思路。
实验和公开课,book密切相关,通常在实验手册中有充足的提示,但有些实验的确非常难以独立实现,网上有许多实验记录,可以适当借鉴。
如果想要学习该课程,只有c基础语法是必要的,其他锦上添花的知识包括csapp,汇编基础,操作系统概论等等。
实验建议与说明
- 该课程的实验并不是从0开始写一个操作系统,而是给原始的xv6添加功能和实现优化,代码量不大,只有大概2k行左右。
- 该课程有11个实验,但每个实验并不是在前一个实验的基础上开发,而是给你一个全新的原始xv6系统。这是因为从lab 3加入独立内核页表以后,想要兼容后继实验变得异常困难。网络上最多只能找到兼容到lab lazy的实现。
- Fall 2020中某些实验的难度系数很大,例如lab 3。不过这些实验在2021课程中完全消失了。
- 有些实验在make grade的时候会超时,如果是在虚拟机上跑的话可以适当修改时限。
- 多阅读源码是必要的。
实验记录导航
环境配置(上)
环境配置(下)
Lab2: System calls
Lab3: Page tables
Lab4: Traps
Lab5: Lazy allocation
Lab6: Copy on-write
Lab7: Multithreading
Lab8: Lock
Lab9: File system
Lab10: mmap
Lab11: network driver
备注
lab util比较简单,因此没有实验记录。同时因为做这个实验的时候第一次用git,没有保存,因此git仓库中没有此实验的源码。
参考资料
课程网址:
https://pdos.csail.mit.edu/6.828/2020/tools.html
book翻译:
https://github.com/FrankZn/xv6-riscv-book-Chinese/tree/main (但是还是建议阅读原著)
课程文字再现:
https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/
优雅而简洁的实验再现: