开学的时候,我感到很想完成几门早有耳闻的北美CS课程的实验:6.s081(MIT操作系统课),cs144(斯坦福计算机网络),15-213(CMU计算机系统结构),6.824(MIT分布式系统),构建一个真正 work 的系统,同时认真把它搞透。于是想到了一个命题:我大四课这么少,用来复读大三怎么样?如果大三可以重来,我会做些什么呢?
目标
考虑到我同时需要科研以及工作效率并不如想象中高,我定下了一个(看起来)可行性很高、实现后也很有收获的目标:完成 6.s081,cs144,15-213 三门课程的实验。完成质量需要比较高,这里提出几点要求:
- 严格按照要求完成实验,主要关注分数要求(所有通过性测试必须通过,跑分性测试达到较高分数线)和任务点要求(如 6.s081 的“两个功能选择一个实现”不能不选)
- 清楚明白地了解自己在做什么,不能做完实验还感到有哪里含糊、不清楚。如果有疑问,至少需要具体地列出来,并在能力范围内尝试解决
更高的要求包括:阅读源码,从零复现系统。不做硬性要求。
视前几周的精力情况决定要不要做6.824,第二周需要先尝试起来,把 Raft 的论文读起来。
计划
目前的计划:每周每门课一个lab(除 6.824 外)。第一周已经做完了 cs144 Lab0-2,6.s081 Lab0,15-213 bomb lab(4/6)(data lab以前做过,不再重做),6.828 lab1 是以前做过的。按照第一周的进度来看,这个计划还是很有希望按期执行的。不过预测后期难度会增加,尤其是 OS…如果出现这种情况,可以2周/1.5周一个lab。
如果计划理想进行,到了中后期 cs144 就做完了,可以投入更多精力做 6.824。
注意到这里没有编译原理,有点尴尬…其实我是很想手搓编译器的,而且不想用 yacc/bison。除开科研可能需要的编译知识之外,它的优先级可能和分布式系统相同,暂时先不列入计划,执行一段时间上面的计划再重新考量。这个重新考量不晚于第三周周末。
本文每周一更新。
进度记录
2022.9.20
这周突然特别想手搓OS,所以进度甚至比预想的还慢…cs144和6.s081推进了一个实验没有问题,但是csapp没有做。这周目标和上周一样,其中csapp的目标是做完bomb lab并再做一个。不过手搓OS进度还挺好的,快要进入用户态了。
2022.12.18
成功地复刻了之前的每个学期都没能坚持学完网课的历史…好在这学期不是一事无成,这里来总结一下。
手搓 OS 在虚拟机里已经跑得很不错了,有了用户态、多进程、系统调用、文件系统、终端。下一步工作包括文件系统的写出,多核调度与内核锁,搭建测试框架。尝试了 USB 驱动,但是比较困难,暂时放下。
bomb lab 做完了,但也就止步于此。其他 lab 没做。
6.824 lab 2B 今天刚刚做完,通过了 200 轮测试,感觉神清气爽啊。
科研方面在做一个DSL,DSL编译后会生成一套网络协议栈的源码。已经在实现“编译后”的系统原型了,目前只差定时器和拥塞控制了。通过阅读 RFC,对 TCP 的理解比大三上课时高了不少。