瞎扯淡 MIT 6.S081 学习总结

yfractal · 2021年07月17日 · 最后由 hoffman.zheng 回复于 2021年10月11日 · 4584 次阅读

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 就有点懵 确实得脱层皮

Awlter1 回复

嗯,是的。加油。

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

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

180909 回复

哈哈,不是大佬。

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

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

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

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

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

Mike 真大佬

真励志 👍🐂🍺

guyanbiao 回复

不是不是 😂

lgn21st 回复

没有没有 😂

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

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

榜样的力量

martin91 回复

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

Awlter1 回复

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

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

yfractal 回复

有啥关键字我搜下吗?

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

Awlter1 回复

👍 👍

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

mike yyds!!

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

zzz6519003 回复

new 一个对象?

Awlter1 回复

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号