操作系统学习路线

如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人的经验 ,比如准备简历实习校招总结offer选择也欢迎来一起参加秋招打卡活动 等;如果你是计算机小白,学习/转行/校招路上感到迷茫或者需要帮助,可以点此联系阿秀;免费分享阿秀个人学习计算机以来的收集到的好资源,点此白嫖;如果你需要《阿秀的学习笔记》网站中求职相关知识点的PDF版本的话,可以点此下载

# 导读

对于本文中推荐的书籍,当当、JD上均有售相应的指纸质版,对应的免费电子版PDF可以在下面这两个仓库找到:

Github地址:https://github.com/forthespada/CS-Books (opens new window)(国内如果登录不上github可以尝试下面的码云地址)

码云地址:https://gitee.com/ForthEspada/CS-Books (opens new window)

除此之外,本文也会推荐一些视频或者资料我已经放在自己的公众号后台了,获取方式或者地址都在对应的推荐视频下面了,回复相应的关键字就可以免费领取了。

在开始自学操作系统的时候,我当初也是来知乎看别人的推荐,结果好多高亮回答推荐我去看《深入理解计算机系统》,我赶忙去JD买了一本回来,属实快把我看吐了。

作为一名渣渣计算机毕业生,前前后后学习计算机也有八九年了,但基本都是自学的,就连现在在字节跳动做后端研发工程师也是自学进来的。 (opens new window)

就比如CSAPP,书是好书,但也真挺厚的,盖泡面倒是挺好使的,对于小白来入门实在不是一个好选择。

后来我改变思维不再跟着知乎上的那些上来就推荐各种经典大黑书的学习路线去学,而是把这些大黑书全部放在后期再去看一步一个脚印慢慢学自己的,最好才学好操作系统。

最后去做了MIT 6.828,也就是CSAPP的几个lab,包括比较知名的Lab4:

Preemptive Multitasking. 实现多CPU的支持,Round-Robin进程调度,Copy-on-Write机制,抢占式多任务(preemptive multitasking), 进程间通信(IPC)。

lab4倒还好,个人觉得lab5是最有意思的,因为lab5是带你实现一个文件系统,这可比写word实验报告有意思多了。

所以建议一些小伙伴跟我一样选择从简单的操作系统书籍入手,然后是一些不错的教学教学视频,最后再去看大黑书

在学完之后,也做了自己的知识导向图,这是以前我自己做的还是导向图:

我就是按照这种方式去看书学习的,对于来找我请教的学弟学妹们也是这么跟他们说的。

添加图片注释,不超过 140 字(可选)

那么对于操作系统的学习也是可以这样的,由简单入手,然后慢慢过度到一些经典大黑书,这样劝退就好多了。

我给你前段时间分享的条学习路径,不会让你觉得劝退,因为整个学习过程比较平缓!

添加图片注释,不超过 140 字(可选)

# 一、初步了解操作系统

# 计算机是怎样跑起来的

我建议你跟我一样从简单书籍入手,要不上来直接开始学CSAPP这种大黑书就是劝退自己没跑了!

《计算机是怎样跑起来的》这本书很适合小白入手开始读,全文以图配文,以计算机的三大原则为开端,整个过程相继介绍了计算机的结构、手工汇编、程序流程、算法、数据结构、面向对象编程、数据库、TCP/IP 网络的相关知识。

说一句图文并茂,通俗易懂并不为过,非常适合想要转行来计算机或者是刚开始学习操作系统的同学去阅读。

我跟上面这位豆瓣读书的朋友意见一致,同样认为这是本很nice的入门书,同系列的还有两本:

《程序是怎样跑起来的》、《网络是怎样连接的

正如这位豆瓣读书的网友所说:互联网时代三大核心技术(缺一不可,都出现了才造就了这个时代):1)计算机;2)操作系统(软件/规范);3)以太网


# 二、南京大学计算机系统基础(一)(二)

建议去首先看下南京大学袁春风老师主讲的计算机系统基础(一)(二),只看一就足够,对于(三)(四)可在后续再看!

南京大学 计算机系统基础(一)主讲:袁春风老师_哔哩哔哩_bilibiliwww.bilibili.com/video/BV1kE411X7S5?from=search&seid=11368404143517814105 (opens new window)

计算机系统基础(二)南京大学 主讲:袁春风 南京大学_哔哩哔哩_bilibiliwww.bilibili.com/video/BV1rE41127Re?from=search&seid=11368404143517814105 (opens new window)

# 三、开始经典书籍

不可否认,简单的书籍虽然比较好入手,但是也很难在其中学到真东西!

要想真的学好操作系统,还是得回到操作系统中来,你可以像我一样从简单一点的大黑书开始上手学习!

# 《现代操作系统》

img

添加图片注释,不超过 140 字(可选)

**《现代操作系统》**是讲操作系统的一本好书,讲的远比《深入理解计算机系统》要细致一些,如果说CASPP,也就是有些《深入理解计算机系统》是站在整个计算机体系的结构下系统性的讲解计算机系统的话,《现代操作系统》这本书就更为细致的从OS的角度出发。

# MIT 6.S081

同时麻省理工也有一门不错的课,这个时候你就可以看了,如果在一开始就看这门课很觉得很懵!

【麻省理工学院】MIT 6.S081 操作系统工程 operating system engineering(中文字幕):

【麻省理工学院】MIT 6.S081 操作系统工程 operating system engineering(中文字幕)_哔哩哔哩_bilibiliwww.bilibili.com/video/BV1Dy4y1m7ZE (opens new window)

# 《自己动手写操作系统》

img

《自己动手写操作系统》是一本很好的实践性书籍,这本书亲自带你走一遍操作系统的具体实现,让你自己亲手打造一个简易版的操作系统,我在看完《现代操作系统》后花了二十余天跟着走了一遍,自己做了个操作系统出来,感觉很多东西豁然开朗了一样!

# 四、南京大学&&清华的操作系统视频

# 南京大学 计算机系统基础(三)

此时再去看一下袁春风老师的第三讲会好很多,也是对前面所有内容的一个过度和总结

南京大学 计算机系统基础(三)完整 主讲:袁春风老师_哔哩哔哩_bilibiliwww.bilibili.com/video/BV1jE411874k?from=search&seid=11368404143517814105 (opens new window)

# 清华大学-操作系统实验

如果你觉得自己动手写操作系统的实验还没有尽兴,可以跟着清华大学的向勇老师做一遍他们的操作系统实验课程

清华大学-操作系统实验环节-向勇老师,陈渝老师_哔哩哔哩_bilibiliwww.bilibili.com/video/BV1wW41167Av?from=search&seid=2265296002609085661 (opens new window)

# 五、经典CSAPP

# 《深入理解计算机系统》

深入理解计算机系统是被誉为“和金子一样重要的计算机基础书籍”,这本书推荐指数为五星,那是因为最高就是五星了。

就好像学霸考试只能考100分是因为试卷只有100分一样,而不是因为学霸的能力只有100分。

这本书从程序执行的计算机角度开始,介绍了处理器的体系结构、程序的机器级优化、虚拟存储器、系统级IO、网络通信等等多个方面。

这本书十分经典,每一次看都会有新的体会和感悟,还有一点就是不要放过课后的各种Lab,笔者这里推荐大家和 MIT6.828以及CMU 15-213 CSAPP 这门课一块看。

# 六、MIT6.828&CMU 15-213

# MIT6.828

不必多说,这是MIT的经典好课程,是**理论与实践相结合的经典,**国外官网地址:https://pdos.csail.mit.edu/6.828/2018/schedule.html (opens new window)

国内B站也有翻译:

[【合集】MIT 6.828: Operating System Engineering Fall 2014] (无字幕)_哔哩哔哩_bilibiliwww.bilibili.com/video/BV1px411E7ST?from=search&seid=4256157976311210142&spm_id_from=333.337.0.0 (opens new window)

此外一些网友也在github上分享了他们的作业成果: https://github.com/SmallPond/MIT6.828_OS/tree/master/xv6-public (opens new window)

但这门课需要你水平足够,最好在系统性学习完毕操作系统类的课程再来尝试它的lab,当然了,你如果你熟悉计算机组成原理,比如计算机多级流水线在做这个lab时,就更得心应手了!

MIT6.828的lab比较硬核,全部一共6个实验,全部完成后可以实现一个简单的操作系统内核!

不得不说,这门课最精华的部分就是lab了,不做lab还不如不去学MIT6.828:

  • Lab1: C, Assembly, Tools, and Bootstrapping. 在这个过程中会让你熟悉课程使用的工具qemu,C语言以及汇编这些计算机的基地。同样讲解了bootstrapping:从计算机从通电,到开始运行操作系统,这个过程中发生了什么,而不是直接告诉你结果。
  • Lab2: Memory management. 这个lab教你实现虚拟内存以及操作系统中十分知名的分页机制。
  • Lab3: User-level Environments. 在这个lab中让你实现进程管理、中断机制(interrupt)、系统调用(system call)、缺页处理(page fault handling)等。
  • Lab4: Preemptive Multitasking. 实现多CPU的支持,Round-Robin进程调度,Copy-on-Write机制,抢占式多任务(preemptive multitasking), 进程间通信(IPC)。
  • Lab5: File system, spawn, and sh. 实现文件系统,完善sh。
  • Lab6: Networking. 实现网络功能。

# CMU 15-213

【精校中英字幕】2015 CMU 15-213 CSAPP 深入理解计算机系统 课程视频_哔哩哔哩_bilibiliwww.bilibili.com/video/BV1iW411d7hd?from=search&seid=6371202244482565196&spm_id_from=333.337.0.0 (opens new window)