MIT6s081脱坑总结

Contents

课程地址

废话

对本学渣来说,完成这个课程还是挺激动的,尽管学完了这门课不能对自己的处境有什么实质性的好转。下图为开入坑到脱坑的时间线,花了一年时间,真是惭愧,按照官方的进度到最后一个实验(lab11)的截止日期只有12周的时间(3个月)。勉勉强强完成了所有的实验,我也很清楚自己理解了多少,如果对源码的理解来说,100分是满分的话,自己应该是70分上下的水平。为什么说是勉勉强强呢。因为我完成的lab通常能通过所有的打分点测试,但并不代表代码写的没有bug,有些甚至为了过test放低了对自己的标准(回想起来是没有耐心了,比较着急把test过了,想继续往后学,这么做有得有失把),这种偷懒的行为一般不是在非常重要的实验。像lock的lab(偶尔test会卡死过不了),以及最后net的lab(强行把测试点中的并行执行的udp发包,在操作系统的底层处理逻辑改为串行的发包以及收包,才通过的测试),不过加起来应该是不超过4个的。 xv6_timeline

清华大学和MIT的关于操作系统的基础课程我都学了一遍,大概是21年初的时候,先学的清华大学陈渝老师在学堂在线的公开课,实验也都做过一遍,当然也没能完全独立做完,学完MIT的课后感觉清华课程体验较差一些,要问我学完这个课有什么不同的体验,体验就是学到的东西非常系统而且实验有趣些。 从以下几个点来说把

总结就是mit这门神课,理论和实践都非常到位,难度也不会非常大,应为lab里面都会有提示,告诉你实现的思路以及注意点。不过你还是得深入的理解,出了bug才能够有调试思路。

学到的东西

被整一套实验摩擦下来,基本让你知道一个操作系统是怎么跑起来的以及内部运行的原理,还是很有意思的,离大佬的距离又更近了一步😏。例如shell是怎么实现的?我们在命令行中用的管道是怎么实现的?标准输入、输出、错误的描述符是什么实现的?什么是虚拟内存、能够带来什么好处?内核态和用户态以及怎么跳转的?sleep、锁是怎样实现的?trap机制,怎么实现调用堆栈打印?硬件驱动(比如终端的输入以及输出、磁盘的读写、网卡收发各种通信协议的包tdp/udp/icmp/arp/ip)?如何实现切换用户态进程?fork为什么能让两个进程在同一个fork调用的地方开始运行?写时分配内存、mmap、cow等牛逼的技术怎么实现?怎样基于网卡驱动造一个socket通信?文件系统的文件读写、文件路径、事务是怎么实现的?

挖坑

希望能写个关于xv6的系列文章把,把上面的问题都讲清楚。

先开个坑

  1. MIT6s081虚拟内存 –预计一个月内
© 2021 - 2022 · Afrankie · Theme Simpleness Powered by Hugo ·