CS自学指南中的南京大学 NJU OS 操作系统课程:并发状态机视角、对象化 OS 体系与 MiniLab 实战
2026/9/7 3:23:22 网站建设 项目流程

CS自学指南中的南京大学 NJU OS 操作系统课程:并发状态机视角、对象化 OS 体系与 MiniLab 实战

【免费下载链接】cs-self-learning计算机自学指南项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning

本文以《CS 自学指南》(cs-self-learning)操作系统章节中收录的南京大学「操作系统设计与实现」(NJU OS)课程为绝对主体,完整梳理该课程的先修要求、独家的讲授框架(程序即状态机、对象+系统调用、可持久化)、5 个 MiniLab 与 4 个 OSLab 的实操路径与全部课程资源。读完后你将明确如何仅凭公开资源自学这门全中文操作系统课、MiniLab 本地自测应如何组织,以及它在本指南与 MIT 6.S081、UCB CS162、HIT OS 等课程之间的定位差异。

课程档案:一门面向自学的中文操作系统课

《CS 自学指南》操作系统章节的 NJU OS 词条(英文条目见 NJUOS.en.md)为该课程给出的基本档案如下:

项目内容
所属大学南京大学
先修要求计算机体系结构 + 扎实的 C 语言功底
编程语言C
课程难度🌟🌟🌟🌟(本指南四星标准)
预计学时150 小时

两个值得注意的档案细节:

  • 全中文授课。CS学习规划 的操作系统小节明确指出,这门课"的全部课程内容都是中文的,非常方便大家学习"。在欧美名校操作系统课程(多为英文授课)占主导的自学场景里,这一点显著降低了语言门槛。
  • 先修要求中"体系结构"被单独强调。课程会触及上下文切换、地址空间、动态链接等主题,先修体系结构课(如 Coursera: Nand2Tetris、UCB CS61C)后,这些概念会更容易与硬件视角对上;同时要求"扎实的 C 语言功底",与本指南其他系统课(如 MIT 6.S081 要求 C + RISC-V 汇编、UCB CS162 要求 C + x86 汇编)的门槛设定一致。

讲授框架一:把"程序就是状态机"作为并发的解释模型

词条对课程讲授思路的描述是全篇技术浓度最高的部分。蒋炎岩老师的课程第一部分从"程序就是状态机"这一视角入手,为作者称为"万恶之源"的并发程序建立状态机的转化模型,并在此基础上讲授并发控制的常见手段以及并发 bug 的应对方法。

这一框架的实际含义可以从文档措辞中还原出来:并发问题的本质被抽象为"多份状态在多个执行流下交错演化",因此并发 bug(竞态、死锁等)被归结为状态机中不期望的状态转移路径。掌握了这个模型,加锁、原子操作、消息传递等手段就不再是零散的 API 技巧,而是"剪除不期望转移路径"的不同实现策略。词条特别提到这门课"让我收获了很多独到的视角来看待系统软件",说明这套讲法与常见的"先讲锁、再讲死锁、最后讲生产者消费者"的枚举式教学有明显区别。

讲授框架二:操作系统 = 对象 + 系统调用,用对象虚拟化硬件

课程的第二部分将操作系统看作一系列对象(进程/线程、地址空间、文件、设备等)以及操作这些对象的 API(系统调用),并结合丰富的实际例子介绍操作系统如何利用这组对象虚拟化硬件资源、为应用软件提供各类服务。

这一表述实际上给出了操作系统内核设计的一条主线:

  1. 对象抽象:物理 CPU 时间被抽象成进程/线程对象,物理内存被抽象成地址空间对象,磁盘块被抽象成文件对象,外部硬件被抽象成设备对象;
  2. API 边界:系统调用是应用与内核之间唯一合法的交互边界,"虚拟化"正是发生在这些 API 之下——对上层呈现的是统一、隔离、可扩展的资源视图;
  3. 例子驱动:文档强调课程"结合丰富的实际例子"而非停留在概念定义,这与作者"做系统不是靠 PPT 念出来的"的整体价值观(见 CS学习规划 操作系统小节"没有什么能比自己写个内核更能加深对操作系统的理解了")一脉相承。

讲授框架三:从 1-bit 存储介质一路构建到文件系统

课程的最后一部分(可持久化)是词条着墨的另一大特色:蒋老师从 1-bit 的存储介质讲起,一步步构建起各类存储设备,并通过设备驱动抽象出一组接口,来方便地与上层解耦、设计与实现文件系统

自底向上的构建路径可以概括为:存储介质(1-bit 起)→ 存储设备 → 设备驱动接口抽象 → 文件系统。这种"从最小单元堆叠"的讲法与词条中"注重实践"的特点直接挂钩——文档提到课程会刻意培养阅读源码、查阅手册的能力,作者正是在第五个 MiniLab期间第一次仔细研读了微软的 FAT 文件系统手册,称之为"非常有价值的经历"。这提示自学者:文件系统实验不要指望看视频就能过,真正的工作量在于阅读规范文档并逐条对照实现。

Hacker 风格的课堂与动态链接的"迷你实现"

词条用大量篇幅描述了蒋老师的授课风格:作为年轻且有丰富一线代码经验的教师,"课上经常一言不合就在命令行里开始写代码",重要知识点都配有生动直白的代码示例。其中对作者冲击最大的一课,是为了让学生理解动态链接库的设计思想,专门实现了一个迷你的可执行文件与一系列二进制工具,使困扰多年的动态链接问题(如可执行文件格式、符号如何被解析与重定位、共享库如何被加载)得到解答。

这一细节的价值在于:动态链接通常是操作系统课程里最"看得见摸不着"的章节之一,而课程选择了从零写一个能跑的极简工具链来打通理解。自学者在跟进这部分内容时,建议提前用本机的filelddreadelf等工具观察真实 ELF 文件,再对照课上迷你实现,理解会更直接。

作业体系:5 个 MiniLab + 4 个 OSLab,MiniLab 可完全本地自测

词条对编程作业体系给出了明确的结构性信息,自学者规划 150 学时时应以此为准:

  • 作业总量:共由5 个 MiniLab4 个 OSLab组成,MiniLab 偏小而精,OSLab 承担更大的实现量;
  • MiniLab 2:协程实验。这是作者印象最深的实验——"在不到百行的小实验里深刻体验了上下文切换的美妙与'可怕'"。百行级别的实验恰好是理解上下文切换的最佳粒度:寄存器保存/恢复、栈指针迁移、控制流转移这三件事在一小段代码里全部暴露出来,是理解进程/线程抽象的最低成本入口;
  • MiniLab 5:FAT 文件系统。如前所述,这个实验要求直接面对 FAT 规范文档,是课程培养"读手册能力"的代表性环节;
  • 评测机限制与本地自测。作业评测系统目前只对南京大学学生开放(作者系邮件申请后由蒋老师允许参与)。但词条给出了一条关键结论:"几个 MiniLab 都能非常方便地进行本地测试,就算没有评测机也不影响自学"——即校外自学者可以把 MiniLab 作为完全自包含的练习闭环:本地编写、本地测试、自行判错。作者也据此提醒"希望大家不要聚众'骚扰'老师以图蹭课",尊重评测资源的封闭性。

对自学的组织建议(基于上述事实归纳):先按顺序完成 5 个 MiniLab,重点保证 MiniLab 2 的百行级上下文切换代码能独立复述其每一步寄存器操作;再根据时间预算决定是否推进 4 个 OSLab——若目标是完整体验"自己写内核",OSLab 才是主要工作量所在。

课程资源清单

词条"课程资源"小节列出的资源(此处按仓库写作规范以名称指代,具体入口见词条原文 NJUOS.md):

资源说明
课程网站jyywiki.cn 上蒋老师维护的 OS 课程主页,含讲义与作业说明
课程作业与课程网站同址发布,MiniLab/OSLab 要求均出自此处
课程视频蒋老师 Bilibili 账号下的课程视频合集(全中文)
课程教材OSTEP(Operating Systems: Three Easy Pieces),开源操作系统教材,与课程讲授内容互为补充

自学者应把"课程网站 + 视频 + OSTEP"作为标准三件套:视频负责讲授主线与代码演示,OSTEP 负责概念的系统化梳理,课程网站负责作业要求与本地环境说明。

在《CS 自学指南》操作系统版图中的定位

从 mkdocs.yml 的导航结构看,本书操作系统章节共收录四门课:MIT 6.S081、UCB CS162、NJU OS、HIT OS。NJU OS 词条自评其独特性("本书收录的第一门国内高校自主开设的计算机课程")结合 CS学习规划 的导语,可以从三条轴上与其他三门区分(以下为基于各词条内容的对照,供选课参考):

课程实验载体核心特点参考词条
MIT 6.S081xv6-riscv,11 个 lab基于 RISC-V 教学 OS,lab 有完善测试框架,难度五星MIT6.S081.md
UCB CS162Pintos,重设计与实现无框架代码,要求学生自行设计方案,难度六星CS162.md
NJU OS5 MiniLab + 4 OSLab全中文、状态机并发模型、对象化讲授、MiniLab 可本地自测NJUOS.md
HIT OS基于 Linux 0.11,8 小实验 + 4 大实验中文课,基于真实工业早期内核源码,注重代码实践HITOS.md

可以推断,NJU OS 适合这样一类自学者:想系统学操作系统但希望全程中文、且愿意从"小而精"的 MiniLab 起步、逐步推进到 OSLab 的读者;若追求更大的设计自由度,可转向 CS162 的 Pintos,若追求最完整的 lab 覆盖,则选择 6.S081 的 xv6。

资源汇总与自学提示

  • 词条"资源汇总"明确说明:按蒋老师的要求,作者(本指南作者)的作业实现没有开源,因此本词条不提供个人作业仓库链接。自学者应以课程官网发布的作业说明与本地测试环境为准组织练习。
  • 课程难度四星、预计 150 学时,与 MIT 6.S081(五星、150 学时)相当但语言门槛更低;建议先完成体系结构先修与 C 语言复习(可参考本指南 编程入门 与 计算机系统基础 词条),再按"MiniLab 全做、OSLab 量力而行"的节奏推进。
  • 本指南为双语维护(中文章节与.en.md英文条目并存,贡献新章节时可参考 template.md),NJU OS 的英文版本即 NJUOS.en.md,内容结构与中文词条一一对应。

最后,词条本身也传递了这条课程线索的价值判断:正是年轻一代教师在繁重的学术考核之余"用爱发电",才让南京大学这操作系统课程以全中文、强实践、可自测的面貌对全球自学者开放,成为本指南收录的第一门国内高校自主开设的计算机课程。

【免费下载链接】cs-self-learning计算机自学指南项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询