操作系统不是“死记硬背”,而是看懂计算机的底层逻辑 很多后端开发者卡在技术瓶颈期,往往不是因为业务代码写得不好,而是对程序运行背后的“黑盒”缺乏直觉。比如你写了个多线程程序,偶尔出现数据错乱,却说不清为什么需要锁;或者内存占用忽高忽低,看不懂页表在背后做了什么。这门课的核心价值,不在于教你怎么调用 API,而是拆解操作系统处理外部事件、分配内存、协调并发时…
很多后端开发者卡在技术瓶颈期,往往不是因为业务代码写得不好,而是对程序运行背后的“黑盒”缺乏直觉。比如你写了个多线程程序,偶尔出现数据错乱,却说不清为什么需要锁;或者内存占用忽高忽低,看不懂页表在背后做了什么。这门课的核心价值,不在于教你怎么调用 API,而是拆解操作系统处理外部事件、分配内存、协调并发时的真实逻辑。它解决的是“知其然不知其所以然”的问题,帮你建立从硬件行为到系统调用之间的因果链条,让调试和性能优化不再靠猜。
这门课适合已经掌握 C 或 C++ 基础、能独立阅读简单系统代码,但想深入理解系统行为的开发者。不需要你是内核开发专家,但如果你连进程和线程的区别都还要查资料,建议先补好基础再进。内容上,不必从头到尾线性刷完。建议优先看第 6 章“中断”和第 7 章“并发”,这两块直接对应日常开发中最头疼的响应延迟和数据竞争问题。第 5 章“内存管理”可以稍后看,重点理解页式内存和虚拟地址空间即可,不必纠结每个实践细节。学习时别只跟着视频点,务必动手跑里面的并发和内存实验,比如自己复现一个生产者消费者场景,观察信号量如何生效,否则概念很容易飘在纸上。
学完后,你应该能独立做三件事:一是看懂系统调用栈,定位“程序卡住”是中断没处理还是锁死锁;二是能用信号量或互斥锁正确解决典型的并发同步问题,而不是靠 sleep 硬扛;三是理解内存分配机制,在性能调优时知道该看页表还是看内存池。资料里的视频按章节组织,建议配合一个 Linux 环境,每看完一章的“实践篇”节点,就照着写 20 行左右的测试代码。比如看完第 7 章的信号量部分,立刻写个双线程读写共享变量的例子,观察不加锁和加锁的差异。这种“看一节、动一次”的节奏,比攒着最后再写代码有效得多。课程里那些几百 MB 的视频不必全看完,挑标着“实践”和“原理”关键词的片段精读,其余可作参考,把时间花在动手验证上。
📁 01 第1章 《2024全新版 操作系统入门与实践-参透技术本质》导学 02 1-2 如何学习才能更容易掌握操作系统,看透技术本质.mp4 [47.7 MB] 01 1-1 为什么操作系统是计算机基石,是程序高手必经之路.mp4 [34.0 MB] 📁 06 第6章 中断:操作系统如何利用中断处理外部事件 03 6-3 操作系统在什么情况下开始运行.mp4 [167.7 MB] 01 6-1 中断这一章要解决什么问题.mp4 [113.4 MB] 02 6-2 到底什么是中断.mp4 [151.3 MB] 04 6-4 操作系统是如何处理中断的.mp4 [157.8 MB] 05 6-5 程序是如何读取到网络数据的.mp4 [118.1 MB] 📁 07 第7章 并发:从硬件到软件再到操作系统 01 7-1 并发问题的本质与根源是什么.mp4 [224.4 MB] 13 7-13 用信号量解决生产者消费者问题(上).mp4 [158.6 MB] 09 7-9 闻风而动_如何实现线程间的同步等待机制(下).mp4 [86.2 MB] 11 7-11 实践篇_用信号量解决互斥问题.mp4 [173.9 MB] 07 7-7 有回旋锁为什么还需要sleep锁_音频.mp4 [181.4 MB] 03 7-3 怎样从根源上解决并发问题(上).mp4 [151.7 MB] 02 7-2 实践篇_实际动手感受一下并发编程问题.mp4 [144.6 MB] 14 7-14 用信号量解决生产者消费者问题(下).mp4 [97.1 MB] 12 7-12 用信号量解决同步等待问题.mp4 [79.9 MB] 06 7-6 一山不容二虎_锁是如何实现的(下).mp4 [95.1 MB] 05 7-5 一山不容二虎_锁是如何实现的(上).mp4 [110.4 MB] 04 7-4 怎样从根源上解决并发问题(下).mp4 [74.4 MB] 08 7-8 闻风而动_如何实现线程间的同步等待机制(上).mp4 [130.2 MB] 10 7-10 到底什么是信号量信号量是怎样实现的.mp4 [100.6 MB] 📁 05 第5章 内存管理:操作系统如何管理内存 19 5-19 实践篇_利用内存池优化程序性能(下).mp4 [51.5 MB] 09 5-9 操作系统是如何为进程分配内存的:页式内存管理.mp4 [47.7 MB] 17 5-17 操作系统是如何管理内存的.mp4 [57.8 MB] 13 5-13 操作系统如何解决页表占用内存过多的问题.mp4 [34.9 MB] 14 5-14 页式内存管理有哪些有趣的功能.mp4 [41.3 MB] 04 5-4 操作系统是如何为进程分配内存的(上).mp4 [111.8 MB] 20 5-20 实践篇_申请1G内存实际会消耗多少物理内存.mp4 [61.8 MB] 11 5-11 操作系统如何加速页表读取(上).mp4 [47.5 MB] 18 5-18 实践篇_利用内存池优化程序性能(上).mp4 [56.4 MB] 10 5-10 页式内存管理会带来哪些问题.mp4 [37.9 MB] 12 5-12 操作系统如何加速页表读取(下).mp4 [22.7 MB] 08 5-8 操作系统如何为进程分配内存:段式内存管理.mp4 [42.9 MB] 21 5-21 实践篇_进程在内存中是什么样子的.mp4 [125.6 MB] 06 5-6 操作系统是如何为进程分配内存的.mp4 [47.1 MB] 07 5-7 虚拟地址空间的诞生.mp4 [36.7 MB] 03 5-3 程序运行需要分配哪些内存.mp4 [86.1 MB] 05 5-5 操作系统是如何为进程分配内存的(下).mp4 [73.9 MB] 02 5-2 为什么内存分配会是个问题.mp4 [104.5 MB] 01 5-1 黑客帝国与内存背后的真相.mp4 [45.3 MB] 16 5-16 为什么物理内存只有1G程序员可以申请出2G内存(下).mp4 [29.5 MB] 15 5-15 为什么物理内存只有1G程序员可以申请出2G内存(上).mp4 [20.9 MB] 📁 09 第9章 万变不离其宗-理解每一行代码对计算机的影响,你就是高手! 01 9-1 送君千里终于一别-收下这三句忠告,让你受益匪浅。.mp4 [10.6 MB] 📁 02 第2章 CPU、内存以及程序运行的奥秘 09 2-9 程序是怎样运行起来的(下).mp4 [88.9 MB] 04 2-4 编程语言是怎么一回事.mp4 [72.5 MB] 06 2-6 为什么内存中有堆区和栈区.mp4 [40.6 MB] 12 2-12 程序和进程有什么区别(下).mp4 [41.1 MB] 10 2-10 为什么用c语言编写操作系统.mp4 [26.2 MB] 07 2-7 没有操作系统程序能运行起来吗.mp4 [32.4 MB] 08 2-8 程序是怎样运行起来的(上).mp4 [36.5 MB] 05 2-5 到底什么是编译型语言以及解释型语言.mp4 [48.6 MB] 11 2-11 程序和进程有什么区别(上).mp4 [146.4 MB] 02 2-2 谈论CPU时你的大脑里应该有什么(下).mp4 [91.5 MB] 01 2-1 谈论CPU时你的大脑里应该有什么(上).mp4 [148.3 MB] 03 2-3 内存的本质是什么.mp4 [165.2 MB] 📁 03 第3章 操作系统的实现原理与系统调用 06 3-6 为什么需要系统调用什么是系统调用(下).mp4 [64.4 MB] 01 3-1 操作系统是如何实现的.mp4 [127.8 MB] 03 3-3 cpu权限管理的王者之争(上).mp4 [147.3 MB] 05 3-5 为什么需要系统调用什么是系统调用(上).mp4 [138.9 MB] 02 3-2 操作系统是如何启动的.mp4 [136.0 MB] 12 3-12 实践篇_真实的内核调用栈.mp4 [69.0 MB] 08 3-8 系统调用时CPU和操作系统中发送了什么(下).mp4 [29.0 MB] 10 3-10 系统调用执行完后怎么返回用户态(上).mp4 [29.3 MB] 13 3-13 利用strace排查各种疑难杂症.mp4 [81.8 MB] 09 3-9 CPU是如何执行操作系统中的函数的.mp4 [31.6 MB] 07 3-7 系统调用时CPU和操作系统中发送了什么(上).mp4 [35.9 MB] 04 3-4 cpu权限管理的王者之争(下).mp4 [35.0 MB] 11 3-11 系统调用执行完后怎么返回用户态(下).mp4 [19.6 MB] 📁 04 第4章 进程管理:操作系统如何实现多任务 36 4-36 实践篇多进程编程(下).mp4 [43.6 MB] 23 4-23 操作系统是如何实现进程间通信的(上).mp4 [33.0 MB] 06 4-6 进程切换是如何实现的(下).mp4 [92.8 MB] 19 4-19 为什么linux中需要fork与exec两个api(下).mp4 [42.2 MB] 14 4-14 操作系统与进程的夺权之战(上).mp4 [44.4 MB] 35 4-35 实践篇多进程编程(上).mp4 [59.8 MB] 12 4-12 进程是如何在各个状态之间进行转移的(上).mp4 [139.4 MB] 24 4-24 操作系统是如何实现进程间通信的(下).mp4 [42.2 MB] 07 4-7 进程切换和函数调用的区别.mp4 [129.3 MB] 18 4-18 为什么linux中需要fork与exec两个api(上).mp4 [41.4 MB] 22 4-22 进程是如何退出的.mp4 [40.8 MB] 10 4-10 操作系统是如何调度进程的(上).mp4 [146.2 MB] 13 4-13 进程是如何在各个状态之间进行转移的(下).mp4 [90.7 MB] 32 4-32 利用多线程优化程序性能(下).mp4 [26.0 MB] 03 4-3 进程被暂停后是怎么恢复运行的.mp4 [140.6 MB] 28 4-28 线程是如何被创建出来的(下).mp4 [34.7 MB] 16 4-16 windows与linux下的进程创建api(上).mp4 [35.2 MB] 15 4-15 操作系统与进程的夺权之战(下).mp4 [49.5 MB] 25 4-25 有了进程为什么还需要线程.mp4 [37.7 MB] 01 4-1 操作系统为什么需要进程这个概念.mp4 [70.0 MB] 21 4-21 操作系统是如何一步步创建出进程的(下).mp4 [14.9 MB] 04 4-4 进程切换是如何实现的(上).mp4 [27.9 MB] 26 4-26 线程这个概念的来源、本质与实现.mp4 [34.9 MB] 05 4-5 进程切换是如何实现的(中).mp4 [116.4 MB] 20 4-20 操作系统是如何一步步创建出进程的(上).mp4 [33.6 MB] 11 4-11 操作系统是如何调度进程的(下).mp4 [57.2 MB] 02 4-2 操作系统是如何实现多任务的要解决哪些问题.mp4 [61.4 MB] 33 4-33 有了线程为什么还有协程(上).mp4 [41.0 MB] 17 4-17 windows与linux下的进程创建api(下).mp4 [28.9 MB] 29 4-29 彻底理解进程和线程的区别(上).mp4 [46.8 MB] 27 4-27 线程是如何被创建出来的(上).mp4 [40.2 MB] 34 4-34 有了线程为什么还有协程(下).mp4 [18.3 MB] 31 4-31 利用多线程优化程序性能(上).mp4 [45.2 MB] 08 4-8 为什么进程需要各种各样的状态信息(上).mp4 [86.0 MB] 30 4-30 彻底理解进程和线程的区别(下).mp4 [26.5 MB] 09 4-9 为什么进程需要各种各样的状态信息(下).mp4 [65.7 MB] 37 4-37 多进程多线程在浏览器中的应用.mp4 [28.8 MB] 📁 08 第8章 操作系统是如何管理设备的 02 8-2 操作系统是如何管理设备.mp4 [156.2 MB] 09 8-9 文件系统、文件夹以及一切皆为文件是怎么实现的(下).mp4 [43.1 MB] 01 8-1 一切皆为文件是什么意思.mp4 [93.6 MB] 10 8-10 操作系统是如何打开、创建以及读写文件的(上).mp4 [97.2 MB] 04 8-4 磁盘是如何工作的(下).mp4 [74.9 MB] 05 8-5 文件这个概念是怎样实现的(上).mp4 [120.4 MB] 12 8-12 操作系统是如何加速文件读写的(上).mp4 [98.3 MB] 13 8-13 操作系统是如何加速文件读写的(下).mp4 [54.4 MB] 07 8-7 文件系统、文件夹以及一切皆为文件是怎么实现的(上).mp4 [127.8 MB] 11 8-11 操作系统是如何打开、创建以及读写文件的(下).mp4 [55.4 MB] 03 8-3 磁盘是如何工作的(上).mp4 [97.0 MB] 08 8-8 文件系统、文件夹以及一切皆为文件是怎么实现的(中).mp4 [102.6 MB] 06 8-6 文件这个概念是怎样实现的(下).mp4 [68.6 MB]