操作系统学习路线

这是六则或许对你有些许帮助的信息:

1、阿秀在工作之余开发了一个编程资源网站,目前已经收集了很多不错的学习资源和黑科技(附带下载地址),如你有意欢迎体验以及推荐自己认为不错的资源,众人拾柴火焰高,我为人人,人人为我🔥!

2、👉23年5月份我从字节跳动离职跳槽到某外企期间,为方便自己找工作,增加上岸几率,我自己从0开发了一个互联网中大厂面试真题解析网站,包括两个前端和一个后端。能够定向查看某些公司的某些岗位面试真题,比如我想查一下行业为互联网,公司为字节跳动,考察岗位为后端,考察时间为最近一年之类的面试题有哪些?

网站地址:InterviewGuide大厂面试真题解析网站。点此可以查看该网站的视频介绍:B站视频讲解 如果可以的话求个B站三连,感谢!

3、😊 分享一个学弟发给我的20T网盘资源合集点此白嫖,主要是各类高清影视、电视剧、音乐、副业、纪录片、英语四六级考试、考研考公等资源。

4、😍免费分享阿秀个人学习计算机以来收集到的免费学习资源,点此白嫖;也记录一下自己以前买过的不错的计算机书籍、网络专栏和垃圾付费专栏;也记录一下自己以前买过的不错的计算机书籍、网络专栏和垃圾付费专栏

5、🚀如果你想在校招中顺利拿到更好的offer,阿秀建议你多看看前人踩过的坑留下的经验,事实上你现在遇到的大多数问题你的学长学姐师兄师姐基本都已经遇到过了。

6、🔥 欢迎准备计算机校招的小伙伴加入我的学习圈子,一个人踽踽独行不如一群人报团取暖,圈子里沉淀了很多过去21/22/23届学长学姐的经验和总结,好好跟着走下去的,最后基本都可以拿到不错的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)

# 三、开始经典书籍

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

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

# 《现代操作系统》

添加图片注释,不超过 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)

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

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

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

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

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

南京大学 计算机系统基础(三)完整 主讲:袁春风老师_哔哩哔哩_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)