6.S081+OSTEP+jyy os lecture结课感想,以及操作系统应该怎么学+图解部分的xv6

来源:哔哩哔哩 2023-08-03 16:48:46

写在前面,

操作系统,细节太多了,曾经考虑做一个包罗万象的笔记,然后放弃了。不同的老师的lecture之间想要融合到一起实在是太困难了。所以就算了,编译器的星辰大海在等待着我。

个人建议的学习顺序:


(资料图片)

先看OSTEP,然后看081相关资源,最后看jyy的lecture,比较偏向现代的OS的视角

我在这里强调一下,这三个讲的虽然全都是关于操作系统的东西,但实际上这三个东西重叠相当的有限。

OSTEP

讲的是设计OS的一些思考和权衡,他会带你一步步引出对应的概念,看OSTEP,你会看到OS是如何逐渐演变到你所熟悉的样子的。(也许并不是那么熟悉)

计算机的很多概念并不是物理公式或者数学定律,而OS实际上是一个工程性的问题,很多你在CSAPP(或者所有计算机系统概述的课,比如NJU的PA)学到的概念,实际上他们并不是从一开始就存在。

举个例子,我们为什么采用了页表作为记录OS映射的载体?(实际上并不是所有OS采用了页表),我们为什么使用了多级页表来节省空间而不是其他方式?除了多级页表我们还有什么方式来节省页表本身的存储消耗?

本质上我们还是在解决现实中存在的问题,因此对于OS的内容而言,很多的解法并不是唯一的,只是经过不断的权衡之后,我们选择了这样的方法。如果你认为多级页表是理所应当的,可以尝试解释一下为什么文件系统里面的inode(XV6,linux应该都是这样的)里面的data block采用了不平衡树。

也许很多东西,他并不是那么的理所应当。只是当大家都采用了这种方法后,硬件厂商为此提供了各种各样的支持,显得一些解法是理所当然的了。

在看书的过程中,我记了不少类似的问题,但是,说实话,这个东西如果写在纸面上,作为考试题目,实在是太文科了,真的不好弄,我甚至不知道这样子搞重要不重要。

对于一个工程的知识,如果把一切推导过程省略,留下的一些推导出来的结果也许不能称之为知识。所以我对于OSTEP的态度大概是,可能是有用的,但是用处并不是那么多。

如果你只想快速的过一遍OS的话,你没什么必要看OSTEP,也没什么必要看jyy的lecture,你写一遍XV6就完事了。

然后是

(现在改名了,叫)

作业建议fa20版本(和公开课同步)但是我写的是fa22,可能是因为我太菜了,所以并不是很想回去补一下fa20关于lazy allocation的部分。

081的核心是XV6,你可以不看081的lecture,但是你一定要去看XV6具体代码的实现,081前半段实际上是XV6的伴生课,可能只有一半时间在讲机制,其他时间全在调内核,他的后半段是research intro,你如果赶时间你可以跳。

081的lecture根本不是在对概念做文章,他的lecture,前期基本是带你过一遍XV6,后期带你读paper,从这个角度而言,我认为读OSTEP我认为还是必要的。(但是看了下我的同学不看OSTEP也学的很好,我觉得这个必要性可能并不是很多。)

在081的学习中,相比于其他课程而言,lab只占了非常少的一个部分(其余课程都像是lab为主体)081主要是XV6手册和源码的阅读和paper的阅读,都是我第一次体验到的东西。

可是我实在是有点看不下去paper,全都是英文,而且好难,可恶,唔,我死掉了。

XV6设计的很好,强烈建议仔细阅读,他的代码风格也很棒,你甚至能学到正确的goto语句应该是怎么写的。

看一个接近1w行的代码,尝试理解对应的设计,对于新手而言,本身就是一个前所未有的体验,你会自己总结出自己的方法,来帮你更好的看这些代码。

里面user的sh写的也蛮不错的,可以看看对应是怎么实现的。

081的资源多到溢出,学不好真的是自己的原因。

jyyOS课的个人看法(2023版本)

新手不要看jyy的课。你如果想看jyy的课就给我去看OSTEP,然后好好的调jyy上课给你演示的示例代码(然而我太懒了,并没有调=_=)

对于新手而言,jyy上课讲的东西,有种世界观被击碎的美。这种上课风格是适合尖子生的,请理性对待jyy的课程。新手不要无脑上车,当心翻车。

首先是,如果基础不好可能是理解不了状态机的,对于学过CS61C的人,这个可能是无缝衔接的,如果你不是很能理解状态机,可能是基础不够好。

然后是jyy的代码很大程度上起到了板书的作用,自己没有去看过对应源码的话,他上课调了一遍可能真的就只是调了一遍。

jyy的课上经常会有一些很有趣的例子,用来打碎你脑子中的模型(比如编译器和CPU和多线程的联动,printf和fork的联动)我个人觉得是一个非常好的东西,帮你认识到模型和现实的区别。学过的可能会非常的惊喜,所以至少看了OSTEP对应的章节后,再去看。

他讲的课程属于是现代操作系统的东西和我们平常上的OS课大概率不是一个东西。

我不敢说我理解了他的课程。但也许你可以,然后在b站发一个关于他课程的笔记。

他操作系统的抽象讲的尤其的棒,并发讲的也超级很棒,进程和地址空间也大量的引入的实际的一些操作。不过他讲的文件系统不是很详细。这个还是看OSTEP吧。(甚至没必要看lecture)

一些想法

我认为操作系统最重要的其实并不是各种各样的概念,很多东西只是在不断实践中大家总结出来的优秀解法而已。

我们能从操作系统这门课学的最重要的东西也许是看手册,不要怕权威,看源码,不要怕看源码。多看书,多学习,多思考,不要怕困难。做一件有困难的事,不一定成功的事情事困难的,也许只有具备了某种精神的同学们能够拥有。勇敢前进,不怕失败,挑战自己。做到这些东西的,也许都是人中龙凤,也许只是一个单纯对计算机有兴趣的同学。

但谁能保证,你!不会是下一个风流人物呢?

操作系统,最重要的一个部分,是一定要和实际的代码结合,这本身是一个工程问题(个人理解)081(XV6)做的最重要的事情,就是帮你把对应的概念固定到代码实现上。

上下文切换只是一个笼统的概念,只有对应具体的代码才能帮你理解上下文是怎么切换的。

对于这点,jyy也多次强调,所谓的那些概念,只是对应代码的抽象,学操作系统,你要打开抽象的概念,看到具体的代码。不然是学不好的,概念和真实模型还是有一定的区别的。

我发现,jyy上课经常会掺一些鸡汤,尝试传递一种价值观,可能也算是我们大学的特色了hh。外国的大学课程好像很少掺这种东西,我只在josh的61B里面看到过另外一个方向的价值观传递。(关于程序员的社会责任)

但,是不是因为缺少,所以才强调呢?

努力去成为一个能够做出一些东西的人,同学们,不要害怕困难,不要害怕权威。

你能想象21岁的年轻人和已经是操作系统神牛的权威打辩论吗?

虽然linux是时代的产物,你不需要发明linux,但是你可以成为自己的linus。他自傲,苛责,追求完美。永远对屎山代码不满意,却成了无数程序员心中的偶像。

谷歌不是偶然的,apple和facebook不是偶然的,openAI也不是偶然的,大学的去内卷化失败了,但是这个世界需要英雄,去做那个全世界只有你相信的事。

相关笔记和vscode的配置放在

/starrybamboo/OS_note

上一篇 : 净利大跌52%!高通手机芯片销售疲软,还要裁员!股价盘后大跌7%

下一篇 : 最后一页

相关推荐

推荐阅读