学习操作系统的一些课程推荐

作为四大件之一,操作系统经常作为面试中的高频考点,所以这方面自然不能局限于课内,网上关于操作系统的教程不可不谓是多如牛毛,笔者搜罗到了一些比较好的课程和书,我来略讲一些各个课程的优劣。

关于与操作系统的缘分,我是在高三的时候随便买了一本现代操作系统,大一上的时候又参加了thu的rcore训练营从而与其结下不解之缘。

我认为操作系统作为一个非常非常贴近硬件的软件,一定是要去理解硬件的基本执行流程,强推阅读《深入了解计算机系统》(csapp)的前四章,并且做完前两个lab(可以理解为国外公开课的作业),datalab和bomblab。这本书第一章只是一个引子,第二,三,四章分别讲了位运算,汇编(AT&T),以及CPU的五级流水线。做过操作系统的都知道,虚拟内存中的分页,gdt读取是包含了大量的位运算的,而且操作系统有一些情况必须要用GDB 来debug,这些作为基础知识是必须要了解的。

了解完基础知识之后就有很多可供选择的路线去学习操作系统了,我来讲讲各个课程的优劣,有些课程我并没有上过,若有不正确见谅,这个推荐指数,只是对于新人入门而言,并非衡量课程好坏。

网课:

1.清华rCore/μCore

推荐指数:⭐⭐

实验指导书:移除标准库依赖 - rCore-Tutorial-Book-v3 3.6.0-alpha.1 文档

清华开了一个公开课叫rCore,用rust实现操作系统,笔者有幸在大一上的时候参加了一轮,他第一阶段要求写完110题,了解rust基础语法,做完之后晋级到下一关OS阶段,做一个小的操作系统,内核部分他已经帮你实现了,你要做的只是去完成分页,以及一些系统调用,下一阶段则是一些开源的项目。

这门课不友好之处在于过多的使用git,而且环境配置复杂,他的第二阶段每到下一章都有用git cherry-pick来重写一遍之前的代码,很折磨,而且实验指导书有些部分写的不明白,rust的语法糖也有点多,需要一定时间上手。适合有一定基础且对学习rust有需求的人。实验指导书我猜测是碍于章节限制,有些地方讲的不是很清楚,比如分页机制没有举例,导致我当时学的一头雾水,还有ch5的步长调度算法也很抽象,debug要用到很多知识。

2.MITS6.081

推荐指数:⭐⭐⭐⭐⭐

这个课程我比较推荐新人入手,mit那边做了一个类UNIX的系统叫xv6,相比于rCore,mit的XV6虽然功能少一点,但是是c语言实现,课程在b站上也有,学生提问也很有价值,还实现了一个简单的shell,debug比较方便。xv6的设计也很清晰,近乎割裂版的分为了kernel和user,分别存放用户态交互的工具和系统调用。

3.NJU OS

推荐指数:⭐⭐⭐

jyy的os课基本可以和国外名校的os想媲美,不过对于新人来说比较难,当时第一个协程lab我没写出来就放弃了(我确实没接触过协程啊啊啊啊啊啊感觉用的很少,不过也有可能是我太菜了),后面才知道这个要以NJU的pa课为基础再去刷。

jyy通过状态机去理解操作系统的方式很好,很有意思。该课程面向的是经过比较良好计算机基础训练的学生(比如经历过PA或其他计算机基础实验的毒打,吃过苦头),该课程对于这些学生是非常friendly的,并且不得不承认即便是经过良好训练,也需要反复学习,jyy老师的视频真的像鱿鱼干一样耐嚼!

4.哈工大的操作系统课

好像用的是linux一个比较古老的版本来讲的,以剖析Linux0.11 为线索来授课,本人没做过不太好评价,据说讲的蛮好的,有兴趣的可以看看。

书目:

1.《操作系统导论》

推荐指数:⭐⭐⭐⭐⭐

神书中的神书,俗称OSTEP,有大量调度算法的实现,图解也配的很好,LRU之类的算法讲的很明白,还有缓存一致性问题等等,一直被国外很多高校当作教材,我看了一半,暂时还没看完,有时间再刷刷。

书结构设计的也挺不错的,章节很多,每个章节很短,只关注一个点,从三个大的部分入手,循序渐进,从最原始的方法到现代的方法,知道了来龙去脉,一天读几章慢慢就读完了。

2.《现代操作系统》

推荐指数:⭐

看了点cpu并发部分和文件系统,最大的硬伤就是这本书完全是教育界面向课程的产物——在计算机领域讨论一个东西却没有指定具体的对象和它的所有落地细节是没有任何用处的——你可以理解为科普读物——但看讲概念,泛泛而谈的书不如直接百度和看博客

进程通信中的读者/写者问题草草带过,图也很少,有些地方一个图一下就能讲完,非要写两页,有时引出了问题却决口不提解决方案,很少见有人把这本书读完的。

3.《操作系统真相还原》/《Orange's 一个操作系统的实现》

推荐指数:⭐⭐⭐⭐⭐

这两本书定位都是相同的,一步步带领读者手搓操作系统。

从磁盘下第一个引导扇区的萌芽开始……到虚拟化时代的多级页表……再到第一次系统调用,你已经历许多。现在,开启你最伟大的探索吧:从早期系统的mbr到浩瀚的系统调用。

咳咳,不好意思串台了。

这两本书我都买了,Orange's由于很多部分明明可以用c语言但却用了汇编来写,直接被劝退了。

现在一直在看《操作系统真相还原》,这本书是基于x86搭建os的,用c语言比较多,可能会要学一点x86体系架构的知识,实模式、保护模式gdt之类的,文章比较偏口语化,介意的话可以左转Orange's。

我的建议是如果做完rcore之类的lab依旧可以试试这一本书,更加偏于底层,自己做一遍受益匪浅,要是有人感兴趣的话我可以再写一篇文章讲讲这本书对应的bochs的配置,昨天配了我大概6个小时(悲),最后在GitHub的一个issue的犄角旮旯里面找到解决方法。

4.《UNIX环境高级编程》(APUE)/《Linux/UNIX系统编程》(TLPI)

推荐指数:⭐⭐⭐⭐

大部分操作系统设计原型都是UNIX,所以我个人认为了解基本的系统调用还是有必要的,我个人推荐后者,APUE有点像字典一样,比较难啃,TLPI从文件开始层层深入,而且讲了Linux线程/进程的底层实现,对读者来说比较友好,我用了大概两个的时间把后者看完,同时也熟悉了下linux下的命令行工具基本用法,可以说是我的linux启蒙书了。

重点看IPC机制和网络编程,TLPI不仅仅讲了POSIX接口,还讲了更加严格的SUSV3接口,IPC机制也分了POSIX和SYSTEM Ⅴ,比前者更加细一点,要是没有时间的话可以看看APUE,要是有时间的话我还是强推 TLPI的。

其他:

除了课程之外,一些小的操作系统也是值得一看的,据说FreeRtos用来理解进程调度很好,内核只有三个.c文件,是一个嵌入式的实时操作系统,GitHub一搜就能找到链接,开源免费Expanded Main Page除了课程之外,一些小的操作系统也是值得一看的,据说FreeRtos用来理解进程调度很好,内核只有三个.c文件,是一个嵌入式的实时操作系统,GitHub一搜就能找到链接,开源免费的。

还有一个社区比较好,Expanded Main Page

叫做osdev,有些书上看不明白的或者忘记的可以看看里面的条目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值