南京大学蒋炎岩老师的课程《操作系统:设计与实现》 (2024 春季学期)
http://t.cn/A6YDapjG
南大的操作系统课是国内大学比较经典的课程了。每年还会更新,主页内有课件和教学视频(正在连载中)
课程介绍:
“操作系统是一个典型的 “system”——它完成对计算机硬件系统的抽象,为应用程序提供运行的支持。我们的课程从三个视角观察操作系统:
从应用程序的视角看,操作系统定义了一系列的对象 (进程/线程、地址空间、文件、设备……) 和操纵它们的 API (系统调用)。这组强大的 API 把一台计算机的硬件资源分享给操作系统中的所有应用程序。我们看到的一切程序,不限于浏览器、游戏,甚至还包括容器、虚拟机、调试器、游戏外挂,都是在系统调用 API 上实现的 在课程中,我们使用操作系统 API 实现一系列 “黑科技”,包括在 Linux 中复刻三类经典游戏外挂:金山游侠、按键精灵、变速齿轮,并用它们修改真正的游戏
从硬件的视角看,操作系统是一个拥有访问全部硬件功能的程序 (操作系统就是个 C 程序,不用怕)。硬件会帮助操作系统完成最初的初始化和加载,之后,操作系统加载完第一个程序后,从此作为 “中断处理程序” 在后台管理整个计算机系统 在课堂中,我们会调试真实的操作系统内核。同学们也会编写属于自己的迷你操作系统内核,并实现简化的系统调用
从数学的视角看,一切计算机系统都是如同 “1 + 1 = 2” 一样 “well-defined” 的数学对象,这包括机器、程序,当然也包括操作系统。计算机系统的行为是可以用数学函数 (当然,也可以用代码) 表示的 在课堂中,我们会构建操作系统的可执行模型,并用形式化方法 “暴力枚举” 操作系统上程序的所有可能行为以更好地理解操作系统。
我们会在课程中交替地从三个视角观察操作系统,最终建立对 “操作系统” 的正确认识。
原理课:以教科书内容为主线,但从三个视角交替观察操作系统。课堂上将会展示许多代码示例,确保同学们理解真实的程序是如何在真实的操作系统上运行的
课后阅读:“Operating System: Three Easy Pieces” 的思路 (并发/虚拟化/持久化) 和课堂略有不同,但无论如何,OSTEP 都是一本非常棒的课后读物,藏着许多惊喜,推荐每一位同学参考原理课内容阅读
折磨实验
Mini labs (应用程序视角;设计):通过实现一系列有趣的 (黑科技) 代码理解操作系统中对象存在的意义和操作系统 API 的使用方法、设计理念
OS labs (计算机硬件视角;实现):基于一个简化的硬件抽象层实现多处理器操作系统内核,向应用程序提供一些基础操作系统 API
我们会在课程中讲授一些相对深刻和本质的内容,不要求同学们掌握,用 🌶️ 标记。同时,这些深刻的思考也体现在方方面面,例如历年的试卷多多少少都会有一些 “彩蛋”。2023 年期末试题中提问 “如何在没有 MMU,不支持虚拟地址空间的计算机系统上实现 fork?” 课堂和课后的思考都将指向严肃的研究工作 (PLDI'20 Paper)。如果你知道进程地址空间中存储的指针是问题的难点,就能想到合理的解决思路。”
