操作系统这门课,很多人是"学过但没懂"。期末背过页面置换算法,考完就忘了;面试被问进程和线程的区别,能背出标准答案,但一追问"切换时到底保存了什么"就卡住。这门课针对的就是这种状态:它不是带你从零认识什么是操作系统,而是把那些你似懂非懂的地方拆开,让你真正看清楚里面发生了什么。

作者是《现代操作系统:原理与实现》的写作者之一,所以这套讲解不是二手转述,而是把书里没展开、课堂上来不及讲的细节用视频补上。它偏向"讲原理怎么落到实现上",而不是泛泛地讲概念。如果你的目标是应付考试,它能帮你把知识点串成线;如果你的目标是读懂内核代码、做系统方向的开发或研究,它提供的是理解代码所需的背景。

这门课解决的问题:补上"知道名词但说不清机制"的缺口

大部分人学操作系统的路径是:先记概念,再看代码,中间那层"为什么这么设计"往往被跳过。结果就是知道有虚拟内存,但说不清多级页表为什么能省空间;知道有中断,但分不清中断、异常、系统调用在硬件层面怎么区分。这门课的价值在于把这层填上,比如讲 AArch64 体系结构时,它是从处理器视角切入的,让你明白操作系统为什么必须依赖这些硬件机制才能跑起来,而不是把体系结构当成独立的一门课。

另一个缺口是"知识碎片化"。进程、内存、文件、设备、虚拟化、安全,这些模块在教材里是分开的章节,但真实系统里它们是咬合的。这套讲解在讲进程调度时会牵出多核同步的问题,讲文件系统时会落到虚拟文件系统的抽象层,讲虚拟化时会回到 CPU 虚拟化和 IO 虚拟化。它试图让你看到一个完整的系统是怎么把这些部分拼起来的,而不是七个互不相干的知识块。对准备转岗到系统方向、或者要读内核源码的人来说,这种连贯性比单个知识点更重要。

适合什么基础:不是零基础,但也不需要你什么都懂

看这套内容之前,你至少应该写过 C 语言,知道指针、结构体、内存布局大概是怎么回事。如果连栈和堆的区别都要现查,那理解进程地址空间会很吃力。另外要有一点计算机组成的基础,知道 CPU、寄存器、缓存、总线这些概念的存在,否则讲缓存一致性和多核同步时会跟不上。汇编不要求会写,但看到 AArch64 的指令不要完全陌生,因为部分内容会涉及特权级切换和异常入口。

反过来说,你不需要事先读过内核源码,也不需要精通 Linux。这套讲解是把你从"课堂层面"往"实现层面"带,起点是学过一遍操作系统的教材,终点是能看懂真实系统里的设计取舍。如果你已经能独立写内核模块、调过调度器参数,那这门课对你可能偏基础;但如果你只是考试背过、从没动手碰过系统层面的东西,那它正好卡在你需要的位置上。判断标准很简单:你能不能用自己的话解释一次系统调用从用户态到内核态完整走了哪些步骤,如果说不清,就值得看。

建议先看哪几块:按依赖顺序,别按章节号硬啃

如果时间有限,建议先集中看三块。第一块是体系结构与中断异常这部分,因为它决定了后面所有内容的地基,进程切换、系统调用、设备驱动都建立在中异常机制上。第二块是虚拟内存,尤其是基于分页的机制和物理内存分配,这部分是操作系统里最容易"以为自己懂了"的地方,多级页表、缺页处理、页面置换的实际逻辑需要反复看。第三块是进程与调度,包括进程的基本操作接口和线程调度,这是理解并发和同步的前置。

这三块打完之后,再按兴趣或工作需要选分支:想做系统性能和多核方向,就往缓存一致性、性能可扩展性、同步原语那边走;想做虚拟化和云方向,重点看 CPU 虚拟化、QEMU 与 KVM、IO 虚拟化;想做存储和文件系统,就补虚拟文件系统和文件系统高级功能;想做安全,侧信道、SELinux 这几节值得单独拿出来过。网络部分(Linux 协议栈、DPDK、不同架构网络对比)相对独立,可以放到最后按需看。不要一上来就从第一章顺序刷,那样容易在基础没稳的时候被后面的细节劝退。

学完之后能独立做什么:把"看懂"变成"能判断"

学完这套内容,你至少应该能做到几件事。第一,能读懂一段内核代码在做什么,遇到不熟悉的系统调用或内核函数,能判断它属于哪个子系统、大概依赖哪些机制。第二,能对系统行为做出解释,比如为什么某个程序在多核机器上扩展性差,为什么某次 IO 延迟高,能从调度、缓存、锁竞争这些角度给出假设。第三,能参与系统层面的讨论,比如评估一个虚拟化方案的取舍,或者判断一个同步原语的适用场景,而不是只能复述别人的结论。

更进一步,如果你配合动手练习,可以尝试改一改调度参数、写一个简单的字符设备驱动、用 QEMU 起一个最小系统观察启动流程。这些不是课程直接教你的项目,而是学完之后你有能力去做的验证。判断自己有没有学到位,可以问自己几个问题:进程切换时内核具体保存和恢复了哪些状态?缺页异常发生时操作系统分几步处理?缓存一致性协议解决的是什么问题、代价是什么?如果这些问题你能讲清楚而不是背答案,说明这门课的目的达到了。

资料怎么配合练习:视频当索引,动手当检验

视频的定位应该是"讲解 + 索引",不是"看完就会"。正确用法是:先看一节,然后停下来,用教材或内核源码去对照。比如看完分页虚拟内存那部分,去翻一翻对应章节的页表结构描述,再在 Linux 上用 pmap 或 /proc 下的信息观察一个真实进程的地址空间。看完进程调度,去看一眼调度器的代码或文档,理解就绪队列和优先级是怎么组织的。看的目的是建立框架,动手的目的是暴露你其实没懂的地方。

练习不需要从零写操作系统,那成本太高。更现实的做法是在现有系统上做小实验:用 strace 跟一次系统调用,用 perf 看一次上下文切换和缓存命中,用 QEMU 跑一个最小的内核或虚拟机观察启动。环境部分通常会给出搭建方法,照着做一遍,遇到报错去查,比单纯看视频有效得多。每学完一个模块,试着写一段自己的总结,用几句话说明这个机制解决什么问题、依赖什么前提、有什么代价。写不出来,说明还没真正理解,回头再看一遍对应的那节。

最后提醒一句:这套内容覆盖的面很广,从体系结构一直延伸到安全、虚拟化、新型测试方法,别指望一遍看完全都记住。把它当成一个可以反复回来查的参考,第一遍建立地图,后面遇到具体问题再按图索骥。操作系统的很多细节是在你真正被一个问题卡住、回头翻资料的时候才真正内化的,视频只是帮你少走一点弯路。

课程目录

📁 实验环境
2.2 AArch64体系结构.mp4  [138.7 MB]
6.1 进程_线程调度.mp4  [63.5 MB]
4.3 虚拟内存功能【更多精选‖公众号:CunWorknotes】  .mp4  [17.9 MB]
2.4 中断与异常的概念【优质资源‖关注:cunWorkNotes 解锁】.mp4  [149.7 MB]
3.2 微内核架构.mp4  [98.7 MB]
4.2 基于分页的虚拟内存(第二部分)【优质资源‖关注:cunWorkNotes 解锁】.mp4  [103.6 MB]
4.4 物理内存分配与管理.mp4  [44.9 MB]
5.2 进程的基本操作接口(上).mp4  [46.1 MB]
15.8 操作系统新型测试方法.mp4  [23.4 MB]
5.3 进程的基本操作接口(下).mp4  [19.2 MB]
7.1 进程间通信背景和基础.mp4  [29.4 MB]
12.4 DPDK【公重号:CunWorkNotes】.mp4  [34.2 MB]
13.4 SELinux(上).mp4  [27.3 MB]
12.6 不同架构网络对比.mp4  [10.7 MB]
15.4 多核同步原语.mp4  [20.7 MB]
14.2 操作系统的调试器支持【资源精选‖更多关注:CunworkNotes】.mp4  [22.4 MB]
14.5 测试的基本原则和方法【不易整理‖请关注:CunWorkNoteS】.mp4  [45.0 MB]
13.9 侧信道攻击与防御.mp4  [22.1 MB]
15.5 持久性内存【整理不易‖记得关注:CunWorKNotes】.mp4  [21.7 MB]
15.3 新的应用接口.mp4  [24.7 MB]
13.8 侧信道与隐秘信道【整理不易‖记得关注:CunWorKNotes】.mp4  [38.1 MB]
13.5 SELinux(下).mp4  [39.2 MB]
7.7 轻量级远程方法调用LRPC.mp4  [27.2 MB]
9.5 文件系统高级功能.mp4  [39.6 MB]
9.4 虚拟文件系统(VFS).mp4  [52.7 MB]
8.9 MCS锁.mp4  [69.2 MB]
8.8 缓存一致性【整理不易‖记得关注:CunWorKNotes】.mp4  [94.0 MB]
8.7 性能可扩展性【更多精选‖公众号:CunWorknotes】  .mp4  [39.4 MB]
1.3 操作系统面临的挑战.mp4  [69.0 MB]
1.2 为什么学习操作系统【整理不易‖记得关注:CunWorKNotes】.mp4  [126.9 MB]
10.1 设备概述.mp4  [124.2 MB]
10.6 设备树【更多精选‖公众号:CunWorknotes】  .mp4  [24.8 MB]
10.5 驱动模型【不易整理‖请关注:CunWorkNoteS】.mp4  [110.5 MB]
11.10 IO虚拟化(下)【持续更新‖免费提供:CunworknoteS】.mp4  [34.5 MB]
11.18 性能隔离(下).mp4  [40.7 MB]
11.4 基于软件的CPU虚拟化方法.mp4  [36.2 MB]
11.6 虚拟机与虚拟处理器.mp4  [57.4 MB]
11.7 QEMU与KVM.mp4  [57.0 MB]
12.3 Linux协议栈总结.mp4  [22.0 MB]
11.8 内存虚拟化.mp4  [50.8 MB]
11.9 IO虚拟化(上).mp4  [60.8 MB]
11.3 如何实现系统虚拟化.mp4  [26.6 MB]
11.5 硬件虚拟化.mp4  [45.2 MB]
11.2 什么是系统虚拟化.mp4  [41.2 MB]
11.16 案例:Serverless平台.mp4  [24.0 MB]
11.15 Linux容器(下).mp4  [35.2 MB]
11.17 性能隔离(上).mp4  [13.0 MB]
11.14 Linux容器(上).mp4  [59.0 MB]
11.13 第一次尝试:chroot.mp4  [32.2 MB]
11.12 轻量级虚拟化-综述.mp4  [39.0 MB]
11.11 中断虚拟化.mp4  [24.6 MB]
10.7 Linux上下部.mp4  [74.1 MB]
11.1 系统虚拟化的优势.mp4  [25.3 MB]
10.3 中断管理.mp4  [128.1 MB]
10.4 设备驱动.mp4  [16.3 MB]
1.1 操作系统的定义.mp4  [301.0 MB]
1.5 ChCore简介.mp4  [20.5 MB]
10.2 系统与设备的交互方式.mp4  [21.5 MB]
1.4 案例:Apple操作系统技术演进.mp4  [40.7 MB]
9.7 日志.mp4  [120.2 MB]
9.1 基于inode的文件系统.mp4  [68.3 MB]
9.9 日志文件系统.mp4  [41.2 MB]
9.8 写时复制.mp4  [56.4 MB]
8.3 读写锁.mp4  [65.7 MB]
8.5 死锁.mp4  [23.4 MB]
9.6 崩溃一致性.mp4  [76.1 MB]
9.2 基于inode文件系统的基本操作.mp4  [26.5 MB]
大纲.txt  [10.9 KB]
8.6 优先级反转.mp4  [23.2 MB]
9.11 新型文件系统:瓦式磁盘.mp4  [149.8 MB]
9.10 新型文件系统:闪存.mp4  [192.2 MB]
9.3 基于Table的文件系统.mp4  [41.0 MB]
8.4 Read Copy Update.mp4  [66.5 MB]
7.8 ChCore进程间通信.mp4  [10.7 MB]
8.2 互斥锁的软件实现与硬件实现.mp4  [89.2 MB]
7.6 Unix消息队列.mp4  [13.0 MB]
8.11 内存模型.mp4  [83.1 MB]
8.10 非一致内存访问.mp4  [88.0 MB]
8.1 临界区问题.mp4  [65.9 MB]
7.4 消息传递的问题与解决方法.mp4  [46.1 MB]
7.5 Unix管道.mp4  [55.3 MB]
15.1 操作系统研究.mp4  [22.6 MB]
14.1 调试器的基本原理.mp4  [67.1 MB]
14.4 性能调试2.mp4  [32.0 MB]
15.6 智能网卡.mp4  [20.8 MB]
14.3 性能调试1.mp4  [70.1 MB]
15.7 系统安全隔离.mp4  [12.8 MB]
15.2 异构操作系统.mp4  [44.4 MB]
13.6 操作系统内部安全.mp4  [41.8 MB]
14.6 Linux安全漏洞修复流程.mp4  [23.3 MB]
13.11 不可信操作系统与Enclave.mp4  [26.6 MB]
13.7 案例-IOS的系统安全.mp4  [25.1 MB]
13.13 Intel SGX.mp4  [28.5 MB]
13.12 保护Enclave的方法.mp4  [11.4 MB]
12.1 Linux网络收包概述.mp4  [63.8 MB]
13.3 访问控制(下).mp4  [40.1 MB]
13.2 访问控制(上).mp4  [32.4 MB]
12.2 Linux网络包管理.mp4  [68.5 MB]
13.10 案例-Meltdown与KPTI.mp4  [17.7 MB]