CS自学指南-操作系统
MIT 6.S081: Operating System Engineering
课程简介
- 所属大学:麻省理工学院
- 先修要求:体系结构 + 扎实的 C 语言功底 + RISC-V 汇编语言
- 编程语言:C, RISC-V
麻省理工学院大名鼎鼎的 PDOS 实验室开设的面向MIT本科生的操作系统课程。开设这门课的教授之一 —— Robert Morris 教授曾是一位顶尖黑客,世界上第一个蠕虫病毒 Morris 就是出自他之手。
这门课的前身是 MIT 著名的课程 6.828,MIT 的几位教授为了这门课曾专门开发了一个基于 x86 的教学用操作系统 JOS,被众多名校作为自己的操统课程实验。但随着 RISC-V 的横空出世,这几位教授又基于 RISC-V 开发了一个新的教学用操作系统 xv6,并开设了 MIT6.S081 这门课。由于 RISC-V 轻便易学的特点,学生不需要像此前 JOS 一样纠结于众多 x86 “特有的”为了兼容而遗留下来的复杂机制,而可以专注于操作系统层面的开发。
这几位教授还专门写了一本教程,详细讲解了 xv6 的设计思想和实现细节。
这门课的讲授也很有意思,老师会带着学生依照 xv6 的源代码去理解操作系统的众多机制和设计细节,而不是停留于理论知识。每周都会有一个 lab,让你在 xv6 上增加一些新的机制和特性,非常注重学生动手能力的培养。整个学期一共有 11 个 lab,让你全方位地深刻理解操作系统的每个部分,非常有成就感。而且所有的lab都有着非常完善的测试框架,有的测试代码甚至上千行,让人不得不佩服 MIT 的几位教授为了教好这门课所付出的心血。
这门课的后半程会讲授操作系统领域的多篇经典论文,涉及文件系统、系统安全、网络、虚拟化等等多个主题,让你有机会接触到学界最前沿的研究方向。
课程资源
- 课程网站:https://pdos.csail.mit.edu/6.828/2021/schedule.html
- 课程视频:https://www.youtube.com/watch?v=L6YqHxYHa7A,每节课的链接详见课程网站
- 课程视频翻译文档:https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/
- 课程教材:https://pdos.csail.mit.edu/6.828/2021/xv6/book-riscv-rev2.pdf
- 课程作业:https://pdos.csail.mit.edu/6.828/2021/schedule.html,11个lab,具体要求详见课程网站
CS162: Operating System
课程简介
- 所属大学:UC Berkeley
- 先修要求:CS61A, CS61B, CS61C
- 编程语言:C, x86汇编
首先是教材,这本书用的教材 Operating Systems: Principles and Practice (2nd Edition) 一共四卷,写得非常深入浅出,很好地弥补了 MIT6.S081 在理论知识上的些许空白,非常建议大家阅读。相关资源会分享在本书的经典书籍推荐模块。
其次是这门课的 Project —— Pintos。Pintos 是由 Ben Pfaff 等人在 x86 平台上编写的教学用操作系统,Ben Pfaff 甚至专门发了篇 paper 来阐述 Pintos 的设计思想。
和 MIT 的 xv6 小而精的 lab 设计理念不同,Pintos 更注重系统的 Design and Implementation。Pintos 本身仅一万行左右,只提供了操作系统最基本的功能。而 4 个Project,就是让你在这个极为精简的操作系统之上,分别为其增加线程调度机制 (Project1),系统调用 (Project2),虚拟内存 (Project3) 以及文件系统 (Project4)。所有的 Project 都给学生留有很大的设计空间,总代码量在 2000 行左右。根据 Stanford 学生自己的反馈,在 3-4 人组队的情况下,后两个 Project 的人均耗时也在 40 个小时以上。
虽然难度很大,但 Stanford, Berkeley, JHU 等多所美国顶尖名校的操统课程均采用了 Pintos。如果你真的对操作系统很感兴趣,Pintos 会极大地提高你编写和 debug 底层系统代码的能力。在本科阶段,能自己设计、实现并 debug 一个大型系统,是一段非常珍贵的经历。
课程资源
- 课程网站:https://cs162.org/
- 课程视频:https://www.youtube.com/watch?v=YfHY0pvpRkk,每节课的链接参见课程网站
- 课程教材:Operating Systems: Principles and Practice (2nd Edition)
- 课程作业:https://cs162.org/,6 个 Homework, 3 个 Project,具体要求参见课程网站
NJU OS: Operating System Design and Implementation
课程简介
- 所属大学:南京大学
- 先修要求:体系结构 + 扎实的 C 语言功底
- 编程语言:C 语言
之前一直听说南大的蒋炎岩老师开设的操作系统课程讲得很好,久闻不如一见,这学期有幸在 B 站观看了蒋老师的课程视频,确实收获良多。蒋老师作为非常年轻的老师,有着丰富的一线代码的经验,因此课程讲授有着满满的 Hacker 风格,课上经常“一言不合”就在命令行里开始写代码,很多重要知识点也都配有生动直白的代码示例。让我印象最为深刻的就是老师为了让学生更好地理解动态链接库的设计思想,甚至专门实现了一个迷你的可执行文件与一系列的二进制工具,让很多困扰我多年的问题都得到了解答。
课程资源
- 课程网站:http://jyywiki.cn/OS/2022/
- 课程视频:https://space.bilibili.com/202224425/channel/collectiondetail?sid=192498
- 课程教材:http://pages.cs.wisc.edu/~remzi/OSTEP/
- 课程作业:http://jyywiki.cn/OS/2022/
HIT OS: Operating System
课程简介
- 所属大学:哈尔滨工业大学
- 先修要求:C 语言
- 编程语言:C 语言、汇编
如果你在知乎上搜索“操作系统如何自学”、“操作系统的公开课推荐”、“有哪些让你相见恨晚的计算机课程”等问题,哈工大李治军老师的操作系统课程大概率都会在某条高赞回答的推荐里。这是一门知名度较高、颇受欢迎的中文计算机课程。
这门课善于站在学生角度循循善诱。例如,课程从“弱弱地问,什么是操作系统”来“揭开操作系统钢琴的盖子”,从 CPU 的直观管理引出进程概念,从“那就首先让程序进入内存”引出内存管理。
课程资源
- 课程网站:https://www.icourse163.org/course/HIT-1002531008
- 课程视频:https://www.bilibili.com/video/BV19r4y1b7Aw/?p=1
- 课程教材一:《Linux 内核完全注释》
- 课程教材二:《操作系统原理、实现与实践》
- 课程作业:https://www.lanqiao.cn/courses/115
资源汇总
@NaChen95 在学习这门课中的八个实验作业的原理分析和实现都汇总在 NaChen95 / Linux0.11 中。
、