瞎扯淡 MIT 6.S081 学习总结

yfractal · July 17, 2021 · Last by hoffman.zheng replied at October 11, 2021 · 4406 hits

Introduction

MIT 6.S081 是 MIT 计算机本科高年级课程。通过实现部分内核功能来学习设计和实现操作系统。

6.S081 由课程和实验组成。课程的前半部分是介绍系统的各种概念和实现。后半部分是讲一些论文,比如 meldown,ext3fs。

实验有 11 个,需要实现不同功能,比如 page table,network driver。

顺便一提,6.S081 2020 的两位老师其中一位是 Robert Morris(RTM)。

Robert Morris 写了历史上第一个蠕虫,还是 Y-Combinator 的 co-founder。

Why

RTM 在课上说,学习这门课程可能有这些理由:

  • You'll be glad you took this course if you...
    • care about what goes on under the hood
    • like infrastructure
    • need to track down bugs or security problems
    • care about high performance

总结下来就是,有用或者有趣。

操作系统虽然有用,但对于我这种 CRUD Boy 来说,远远算不上必须。

更重要的是有趣。代码写久了,难免会想知道它是怎么运行的,想知道人类可以用 01 构建什么。

这门课程很好的满足了我的好奇心。

Experience

过程

从今年 2 月份开始学,直到 7 月才看完课程,做完最后一个 lab。

工作日,每天学 3 个小时左右。早上起来后学 1 个小时或者 1 个半小时。

下班后,吃完饭,刷一段时间手机。再学 1 个小时左右。

有的时候晚上写代码,会写到凌晨 1 点多,但再晚就不会了,脑袋都是浆糊,这个时候花时间没有任何意义。

周末的话看情况。

中间还补了一下 C 语言和硬件相关的知识。当然也有几个星期什么也不学的时候。

一开始想的是 6.S081 和 CMU 15-445 一起学(数据库我还试着学过其他两门,发现知识储备不够,就放弃了),半年学完。

但很快发现时间不够,而且 6.S081 太有趣了,所以就放弃了 15-445(学了大约一半,又想到没学完的 6.824,哎)。

其中很长一段时间,都在想有没有可能学完。也想过去抄别人的作业。

还真的看过别人的两行代码。写 page table 那个 lab 的时候,看过别人的两行代码,看了也没看懂。后来又反复看了书/视频,连蒙带唬的把测试跑过了。

难,难到骂娘。

但老师会手把手教你写代码,跟你讲如何分析,如何 debug。

老师还会跟你说,他也觉得难,不过我们要想办法搞定它。

自学

学习是一件复杂而困难的事情,自学更是如此。

比如找学习资料,制定目标,比如如何巩固学到的知识。

跟着某个课程来学,会省掉很多不必要的力气。

但学校的环境更好。比如 6.S081 2020,有两位老师,两位助教,还有 Office Hour 用来提问。

有同学,大家水平都差不太多,可以讨论,可以催牛逼。

而自学的,有问题,只能靠 Google,Google 不到,就要猜,或者绕一大圈找答案。

感谢

老师把上课的视频,笔记,书,实验都被放在网站上了,随便访问。

而且设计的非常好,就是难,需要花很多心力去搞懂。

老师也很好,手写板书,思路极清晰。

老师也有意思,RTM 总喜欢嘿嘿嘿笑,他上 6.824 的时候,牛仔裤上还有破漏。学生提问,答不上来。跟学生说,你的问题很好,让我有了更深入的认识(一脸我又学到了/明白的表情)。

收获

  1. 眼界 还是觉得眼界最重要。

比如之前我一直错误的认为,刷算法题没有意义。

但被 6.S081 几番毒打之后,发现我编程太水了,要多刷刷题了。

还发现,原来程序可以有这么多神奇的玩法和设计。

  1. 操作系统知识 虽然可能没机会去写操作系统,但至少知道操作系统是怎么写的。

可以看懂以前没办法看懂的东西,比如 Meltdown,比如各种 page table 各种玩法。

  1. 编程能力/内核编程经验

  2. 认识自己 基础不好,学习方法不好,编程能力一般般,眼界低。

About learning online classes

这个只是个人经验,每个人学习方式不一样。

一般我会找有 lab/project 的课程看。目标一般就是成完成所有的 lab/project。

我一般会先看笔记,看不懂了看视频,再不懂再找资料。主要原因就是懒 😂。碰到感兴趣的,就查一些相关资料什么的。

这样做,不好的地方是,会漏掉一些知识,也不那么扎实。但做完了 project,至少知道个大概。

这门课程的网站 https://pdos.csail.mit.edu/6.S081/2020/schedule.html

视频也可以去 b 站上看

Summary

MIT 6.S081 很难,学起来很多时候很痛苦,也很有趣。

花了无数个小时,看完了所有资料,跑过了所有测试,我学完了。

我最近在搞 6.824 顺便学学 go

lab1 就有点懵 确实得脱层皮

Reply to Awlter1

嗯,是的。加油。

纯英文的视频吗?有没有带中文字幕的翻译

厉害了

大佬,有些什么好的 MIT 课程可以推荐的吗?

Reply to 180909

哈哈,不是大佬。

最主要还是看你兴趣了。工程方面,6.824 分布式系统挺有意思的,相对来说对基础没那么高。

他们网络,数据库方面的课程也有,资料放出来的可能没那么全。

他们还有线性代数,据说不错。

数据库 CMU 15-445 和 15-721 资料比较全。

网上有不少大学的公开课,一般可以挑选比较有名的,或者资料特别全的,最主要是 lab/project 要有。

Mike 真大佬

真励志 👍🐂🍺

Reply to guyanbiao

不是不是 😂

Reply to lgn21st

没有没有 😂

我创建了个 slack group, 专门给自学计算机公开课的人交流,毕竟咱们进不了 Piazza。后续在英文世界会发一些文章,人应该会慢慢多起来

https://join.slack.com/t/cs-moc-selfstudygroup/shared_invite/zt-t7giblae-6nGxDwCWA3oyexc9Dl8LGw

榜样的力量

Reply to martin91

Martin 才是我们的榜样,人帅技术好,还会做菜!

Reply to Awlter1

知乎上他们有人组过一个团,他们似乎刷完了操作系统,现在在刷分布式。

他们做的还挺好的,整理了 wiki 之类的。

Reply to yfractal

有啥关键字我搜下吗?

624 lab1 快弄完了,我发现只要认真阅读提供的资料并不难

Reply to Awlter1

👍 👍

这个 https://zhuanlan.zhihu.com/p/251366985,不过已经结束了 总结 https://zhuanlan.zhihu.com/p/347108301 他还组织了读论文活动 https://zhuanlan.zhihu.com/p/382412836,也已经结束了。

mike yyds!!

程序可以有哪些神奇的玩法和设计?

Reply to zzz6519003

new 一个对象?

Reply to Awlter1

链接失效了,可以重新发一下吗

You need to Sign in before reply, if you don't have an account, please Sign up first.