
CS自学指南 · NJU OS南京大学“操作系统设计与实现”课程导览与自学路径【免费下载链接】cs-self-learning计算机自学指南项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning本文基于 CS 自学指南cs-self-learning仓库中收录的南京大学“操作系统设计与实现”NJU OS课程笔记系统梳理这门全中文操作系统公开课的讲授脉络并发状态机建模、OS 对象与系统调用抽象、从 1-bit 到文件系统的持久化体系、5 个 MiniLab 4 个 OSLab 的编程作业体系以及课程资源与自学路径帮助你在约 150 学时的投入下走通一门注重动手实践的中文系统课。一、课程概况NJU OS 是南京大学蒋炎岩老师开设的操作系统课程也是《CS 自学指南》中收录的第一门国内高校自主开设的计算机课程。课程基本信息如下摘自 NJUOS 课程笔记项目说明所属大学南京大学先修要求体系结构 扎实的 C 语言功底编程语言C 语言课程难度4/5预计学时150 小时语言课程全部内容为中文课程笔记中对这门课的整体评价非常正面蒋老师是一位非常年轻的教师有着丰富的一线代码经验课程讲授带着满满的 Hacker 风格——课上经常“一言不合”就在命令行里开始写代码很多重要知识点都配有生动直白的代码示例。笔记作者印象最深的一处是为了让学生理解动态链接库的设计思想老师专门实现了一个迷你的可执行文件与一系列二进制工具让作者困扰多年的问题都得到了解答。二、讲授思路三块递进的操作系统视角与传统操作系统课程按“进程—内存—磁盘”分章平铺的讲法不同NJU OS 的讲授思路自成体系整体分为三段推进。2.1 从“程序就是状态机”讲起并发控制课程先从“程序就是状态机”这一视角入手为并发程序建立状态机的转化模型在此之上讲授并发控制的常见手段以及并发 bug 的应对方法。这一安排的用意在于并发 bug竞态条件、死锁等的根源在于多个执行流以非预期顺序交错地修改共享状态。把程序抽象为状态机后“正确的程序行为”可以表述为状态转移的约束“错误的并发行为”则是出现了不应出现的转移路径。模型一旦建立后续讨论互斥、同步原语与 bug 定位时就有了统一的分析框架而不是罗列零散的知识点。2.2 对象与 API操作系统如何虚拟化硬件第二段将操作系统看作一系列对象——进程/线程、地址空间、文件、设备等——以及操作它们的 API系统调用。课程结合丰富的实际例子介绍操作系统是如何利用这组对象虚拟化硬件资源、并给应用软件提供各类服务的。可以把它理解为硬件是不规则的物理内存、磁盘扇区、设备寄存器各不相同而 OS 用一组规整的“对象 系统调用接口”把不规则性封装掉。上层的进程、虚拟地址空间、文件都是这种虚拟化的产物系统调用则是用户态与内核态之间唯一的契约面。这一视角与课程配套教材 OSTEP 中围绕“抽象与机制分离”的叙事高度呼应。2.3 持久化从 1-bit 到文件系统课程的可持久化部分从 1-bit 的存储介质讲起一步步构建起各类存储设备再通过设备驱动抽象出一组统一接口方便地设计与实现文件系统。这条自底向上的路线把“存储”讲成了一层层叠加的工程比特如何可靠地写入介质、设备如何被驱动抽象成读写块、块之上又如何组织出目录、文件与持久化语义。它给出的是一套可迁移的方法论——无论是分析真实系统如 FAT 文件系统还是自己动手实现都可以沿这条自底向上的线索拆解问题。笔记作者曾上过许多门操作系统课程认为这种讲法“独此一家”让他收获了很多看待系统软件的独到视角。三、编程作业体系5 个 MiniLab 4 个 OSLab注重实践是这门课的突出特点。课堂和编程作业里都有意培养阅读源码、查阅手册的能力——这也是笔记作者认为计算机从业者必备的技能。作业体系由 5 个 MiniLab 和 4 个 OSLab 组成其中有两个 MiniLab 特别值得展开。3.1 协程实验不到百行代码体验上下文切换第二个 MiniLab 是协程实验作者评价这是整门课印象最深刻的实验在不到百行的小实验里就能深刻体验上下文切换的美妙与“可怕”。从技术角度看协程是运行在用户态的轻量级执行流其切换由程序自身控制保存/恢复寄存器与栈指针不经过操作系统内核。这样一个百行级别的小实验恰好落在理解上下文的“最小可行规模”切换时保存哪些寄存器、栈帧如何衔接、让出与恢复的时机由谁决定这些问题在真实系统调度器、线程库中都会以复杂得多的形式重现。先在小实验里建立直觉再放大到 OSLab 的进程与线程机制是这门课实践设计上的巧思。3.2 阅读 FAT 手册把“查手册”变成训练目标第五个 MiniLab 涉及 FAT 文件系统。作者正是在这个实验里第一次仔仔细细读完了微软的 FAT 文件系统手册称其为一次非常有价值的经历。这一点呼应了课程的整体取向不满足于“会做实验”而是要求你像工业界工程师一样从正式规范出发去理解一个文件格式的块布局、目录结构与链式组织。对自学者而言这也是一个明确的学习方法信号——读规范原文而非二手转述是系统方向的核心能力。3.3 评测机与本地测试自学的现实边界作业评测机不对校外开放作者本人通过邮件沟通后成功“蹭课”完成作业但也特别提醒大家不要聚众“骚扰”老师以图蹭课。好在几个 MiniLab 都能非常方便地进行本地测试即使没有评测机也不影响自学。作者因课余时间有限只完成了 5 个 MiniLab总体体验依然非常棒——这也提示自学者可以把目标定为“高质量完成全部 MiniLab”OSLab 视自身时间投入选择性推进。四、课程资源以下资源链接完整继承自 NJUOS 课程笔记是进入这门课的全部入口资源地址说明课程网站https://jyywiki.cn/OS/2022/index.html2022 版课程主页含课件与作业说明课程视频https://space.bilibili.com/202224425/channel/collectiondetail?sid192498蒋老师的 B 站空间合集全中文课程教材http://pages.cs.wisc.edu/~remzi/OSTEP/OSTEPOperating Systems: Three Easy Pieces免费在线教材课程作业https://jyywiki.cn/OS/2022/index.html与课程网站同一入口另需说明按照蒋老师的要求笔记作者的作业实现未开源因此本指南中没有对应的作业实现仓库可供参考——完成 MiniLab 时应以本地测试为准而非对照他人答案。五、自学路径建议结合课程先修要求与本指南的编排一条可执行的自学路径如下补齐先修课程明确要求“体系结构 扎实的 C 语言功底”。若这两块有短板可先完成本指南中的 体系结构 与 C 语言 相关章节再进入 OS 课程。主线学习以 B 站课程视频为主线推进配合 OSTEP 教材补全理论框架。视频负责“讲透一个视角”OSTEP 负责“补齐知识网络”两者互为索引。动手落地优先完成全部 5 个 MiniLab尤其第二个协程实验与第五个文件系统实验全部依赖本地测试不依赖评测机时间充裕再挑战 4 个 OSLab。能力目标把“读源码、查手册”作为显性目标来训练——这门课的作业设计本身就是围绕这一能力展开的学完 MiniLab 后应能独立阅读一份文件系统规范或一个内核子模块。《CS 自学指南》的学习规划在操作系统一节有一句总纲值得记住“没有什么能比自己写个内核更能加深对操作系统的理解了。” NJU OS 的价值正在于它以中文、低门槛的 MiniLab 起步把你逐步推到“亲手实现 OS 机制”的位置上。六、在指南四门操作系统课程中的定位本指南的操作系统章节共收录四门课。基于各课程笔记中的信息MIT 6.S081、UCB CS162、HIT OS、NJU OS横向对比如下课程平台/语言作业体系难度预计学时特点NJU OSC 语言5 MiniLab 4 OSLab4/5150 小时全中文状态机视角讲并发从 1-bit 自底向上构建存储体系MiniLab 可本地测试MIT 6.S081C RISC-Vxv611 个 lab配套完善测试框架5/5150 小时在 xv6 上逐个添加机制后半程研读经典论文UCB CS162C x86Pintos3 个 Project 6 个 Homework6/5上探200 小时几乎无框架代码强调 Design and ImplementationHIT OSC 汇编Linux 0.118 个小实验 4 个大实验4/5100 小时基于真实早期内核代码循循善诱的中文讲解从这份对比看NJU OS 的差异化定位清晰它是四门课中唯一完全由国内高校自主开设、全程中文的内容且以 MiniLab 作为低门槛起点适合“想动手做 OS、但希望从中文材料和较小实验规模入手”的自学者若学有余力再进阶到 6.S081 的 xv6 或 CS162 的 Pintos 都是自然的延伸路线。最后沿用课程笔记的结语感谢蒋炎岩老师设计并开放了这门操作系统课程。正是有这些年轻教师在繁重的 Tenure 考核之余用爱发电才让无数学子收获了难忘的本科生涯——也期待国内能有更多这样的良心好课被收录进《CS 自学指南》让更多人受益。【免费下载链接】cs-self-learning计算机自学指南项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考