# CS162: Operating System
## 课程简介
- 所属大学：UC Berkeley
- 先修要求：CS61A, CS61B, CS61C
- 编程语言：C，X86汇编
- 课程难度：🌟🌟🌟🌟🌟🌟
- 预计学时：200小时+，上不封顶

这门课让我记忆犹新的有两个部分：

首先是教材，这本书用的教材`Operating Systems: Principles and Practice (2nd Edition)`一共四卷，写得
非常深入浅出，很好地弥补了MIT6.S081在理论知识上些许空白，非常建议大家阅读。相关资源会分享在本书的经典书籍推荐模块。

其次是这门课的Project —— Pintos。Pintos是由Ben Pfaff等人基于X86编写的教学用操作系统，Ben Pfaff甚至专门发了篇
[paper](https://benpfaff.org/papers/pintos.pdf)来阐述Pintos的设计思想。和MIT的xv6小而精的lab设计理念不同，
Pintos更注重系统的Design and Implementation。Pintos本身仅一万行左右，只提供了操作系统最基本的功能。而4个Project，就是让你在这个极为精简的操作系统之上，分别为其增加线程调度机制（Project1），系统调用（Project2），虚拟内存（Project3）以及文件系统（Project4）。所有的Project都给学生留有很大的设计空间，总代码量在5000行以上。根据Stanford学生[自己的反馈](https://www.quora.com/What-is-it-like-to-take-CS-140-Operating-Systems-at-Stanford)，在3-4人组队的情况下，后两个Project的人均耗时也在40个小时以上。

虽然其难度很大，但Stanford，Berkeley，JHU等多所美国顶尖名校的操统课程均采用了Pintos。因为如果你真的对操作系统很感兴趣，Pintos会极大地提高你编写和debug底层系统代码的能力。在本科阶段，能自己设计、实现并debug一个大型系统，是一段非常珍贵的经历。

北大2022年春季学期的操作系统实验班也将会首次引入Pintos作为课程project，我作为这门课的TA，顶着被口水淹没的风险，依旧希望能用这样的尝试，让更多人爱上系统领域，为国内的系统研究添砖加瓦。

## 课程资源
- [课程网站](https://cs162.org/)
- [课程视频](https://www.youtube.com/watch?v=YfHY0pvpRkk)：每节课的链接参见课程网站
- 课程教材：[Operating Systems: Principles and Practice (2nd Edition)](http://ospp.cs.washington.edu/)
- [课程作业](https://cs162.org/)：6个homework，3个project，具体要求参见课程网站

## 资源汇总
由于北大的操统实验班采用了该课程的project，为了防止代码抄袭，我的代码实现没有开源。