明天就要回北京了,两个星期的假期没怎么做科研,有一些家事,代码写的也比较少,主要在听讲座,以及准备接下来的项目资料,然后从初五和老家的同学们聚会聊天开始,我就已经无心学习了。
这一次更新的是MIT 6.S081,从刚开始写到现在搞定可能也有一年了。每次我刷课基本就一个时段,刚刚结束上一个项目并准备启动下一个项目,在这中间先找点具体的事情做做玩。
MIT 6.S081和OSTEP
考虑到我校计算机系的OS课抓的很紧,比如计算机系操作系统课就要求去阅读XV6的源码,几个老师设计的实验也很难,这一次的更新我个人认为有一定的班门弄斧的嫌疑,大家轻喷哈哈哈哈。
来自MIT的操作系统课程,由Morris,和Kaashoek主讲,之后的几年由Adam Belay(Dune和IX项目的主导人)来负责。
OSTEP就是经典操作系统领域三座大山,计算机系课上应该老师推荐过,相信很多同学都或多或少读过。这本书对应的课程在威斯康星大学很有名气,但看起来实验任务可能还不是特别吸引人,授课水平高,但是两个老师讲课都有点小催眠,进度也不快(×),所以可能一种合理的方式就是配合二者。先看书,再写MIT的实验。
前情:
网络上有很多人有通关它的记录,以及有部分学校(比如哈工大深圳)直接拿xv6作为操作系统课程的实验,然后很多大学都拿这个做一些魔改。很早之前听说过这个项目,但一直没有什么时间做,要么就是深感自身愚钝,短时间没有心情向下继续。在这个寒假断断续续地快把这个积压依旧的项目做完了,在做这个任务之前,我已经完整看过CSAPP和OSTEP的全部内容,不过比起做实验,目前作为研三老登,在有了一定科研经验后,我发现后半学期的讲paper的讲座意义其实很大,有几次的讲座给了我非常深刻的印象。
必要性:
反正网安的实验课是真的不大行(×),就靠着那个基础估计连CSAPP都刷不明白。计系同学可以体验不涉及实验任务的Lecs部分,感觉有不错的提纲契领作用。
实验任务:
基于xv6加上一些基本的功能和小实验,基本内容涵盖了中断,页表,系统调用撰写,trampoline,COW机制等理解。相对较难的实验任务集中在前面几个,如果能够完成,大体能够较为顺利地继续跟下去。
在写实验任务之前,因为项目需求我曾经去读了一些linux源码,包括trampoline和中断处理的部分,在刷课的时候我在想,如果做过这个实验,或许对我当时推进项目更加有帮助一些?
相对于清华大学的rCore课程来看,优势是测试更加全面(通过跑usertests也就是全部用户程序来观察撰写上的机制是否能够正确的工作),需要注意的点也更多,难度更加高,也相对来说符合内核开发配合使用GDB和QEMU的正常流程(rCore的debug框架是printf,某些情况下过于轮椅,但这边则基本用不了printf大法),引导相对清华大学的rCore来说没有那么轮椅♿帅OTTO帅♿,做下来体验算是感觉难度合适,属于踮起脚能够够得着的那种。不过,也因此可能需要更长的时间仔细阅读理解源代码。
有部分章节的源代码阅读相对来说比较痛苦,曾经花费了我大概好几天的精力,比如文件系统部分,但是在配合xv6 book阅读源码的同时,确实也能感觉到自己有所进步。
特色
有了一定科研经验之后,觉得最为精彩的部分是后面带着读经典论文的前沿部分,在这里我基本搞清楚了garbage collection的原理,还有RCU等有趣的知识。其中,涉及用GO开发biscuit的论文导读章节非常精彩,基本可以从这节课学到很多写作技巧和叙述的思路。总体来说可以凝炼成:如何把 问题很严重,技术很牛逼,效果很显著 这样一件事情说清楚。
此外,计算所有一位叫王喆的老师曾经向我们推荐过课程里头说的Dune的源码,认为非常值得学习。过去我也去看了一下,然后把这边处理中断的源码移植到了自己的项目里。
其他:
祝大家蛇年快乐!
今年我可能会尽量多刷一些AI相关的课,如果有空或者还有余力的话,希望把UCB的CS162和我校的YSYX项目也跟着做一下。我的老师已经建议我主业接下来往香山那边靠了。。但我寻思自己业余学点AI应该没啥问题,好好好我照单全收。