MIT6.S081操作系统导论
教授:Frans Kaashoek & Robert Morris
评论贡献者:Jinming Hu
课程信息
操作系统导论。是在两位教授开发的供教学用的迷你操作系统xv6做一些进一步的开发,来理解操作系统内核的工作原理。这门课程适合想要深度理解操作系统的同学,而操作系统可以说是计算机科学中极为基础和重要的领域,学扎实的话,无论是做工程还是做科研都受益无穷。
适合人群
个人认为适合作为第二门操作系统课程,第一门的话更推荐CMU 15-213。
课程评价
我有些不适应来自FK教授的授课视频。个人觉得这门课的精髓在那11个lab上,结合做lab与阅读xv6 book,则可以对xv6操作系统内核的工作原理有较为深刻的认识,而这些原理也是现代操作系统中最为核心的部分。lab使用c语言完成,难度较大,尤其是第三个lab page table,应该可以说是所有lab中最大的坎,但这些lab能很好地加深对操作系统的认识,也能较好地磨练自己的工程能力,非常值得一做。视个人基础,大概需要100到200小时左右的学习时间。
需要注意的坑点
这里主要给出前两个lab的坑点:
-
在开始lab之前,先按照tools 配环境。如果是使用ubuntu的话,我个人推荐用ubuntu20,这样可以免去自己配toolchain的痛苦;而如果是更早的ubuntu系统的话,那么需要按照页面上的指点自己build toolchain。另外使用
apt-get
安装的QEMU的版本估计是不够新的,如果版本号低于5.1.0,那么也需要自己手动build QEMU. 最后验证安装的时候,如果不是自己手动build的toolchain的话,可能不是按照官方说的用riscv64-unknown-elf-gcc
之类的,而是其他的一些命令,具体可以在/usr/bin
或者/usr/local/bin
下查看 。对于验证安装,我个人建议先确定qemu版本,再尝试在xv6运行make qemu
,如果能够正常进入,应该就没有问题了。 -
之后阅读guidance 注意一个坑点是
make qemu-gdb
的部分,在另一个窗口跑gdb
或者riscv64-linux-gnu-gdb
可能都不一定有用,也许是gdb-multiarch
或者是riscv64-unknown-elf-gdb
具体同样可在/usr/bin
或者/usr/local/bin
下查看。可以自己试试哪个会work>_< -
如果你要用xv6的某些自带的函数,发现它们不像你想得那样工作,那么请大胆地去看源码,也许它们的实现的behavior和标准库的是不一样的>_< 并且,要敢于而且主动地去看xv6的源码,甚至可以说这些Lab的目的就是帮助你熟悉了解xv6的源码的。
-
如果你的机器(像我一样)很烂,在某些case上可能会碰到timeout的问题(纯粹是因为机器太烂),那么可以把gradelib里默认的timeout调大一些......
-
关于用gdb在user程序中打断点出现Cannot access memory at address错误的问题,
xv6的主分支上已经修复了这个问题。但是2020版的前几个lab没merge这个patch,需要自己在.gdbinit.tmpl-riscv里加一行set riscv use-compressed-breakpoints yes
关于后面lab的注意事项,可以加入6.S081学习交流群了解。
关于在mac上的环境搭建
- 大部分参考https://zhayujie.com/mit6828-env.html
- qemu
- 版本为5.1.0 手动make(可能需要多次make才会成功)
- 下载地址 https://download.qemu.org/
- xv6 需要clone2020课程的仓库,但是链接感觉失效了,需要自己百度一下clone。
- RISC-V工具链:
- 版本9.2.0 (不要用brew安装,因为会在gdb调试时出问题)
- 下载地址:第一个链接里给出了,用博主给的下载链接自行make
- 注意!在make前修改一下源码 在riscv-gdb/readline/rltty.c 和 riscv-gdb/readline/terminal.c 中添加头文件#include
- 如果编译中途退出,记得多编译几次,大概持续30min-60min。
非官方资料推荐
- 强推肖宏辉大神的课程内容翻译。
- 6.S081学习交流群 的群piazza里也有大量优质问答。
后续课程推荐
- MIT 6.828 系统论文阅读研讨会,适合对系统领域的科研感兴趣的同学。
- System Paper Reading Seminar:很多同学自己组织的系统论文研讨会,中文资源,有视频。
- MIT 6.824:分布式系统。
文件列表
- MIT6.S081操作系统导论