别只会调 API,试着把程序运行透一遍

很多技术人学操作系统,容易陷入两个误区:要么只盯着 Linux 命令行,不懂底层发生了什么;要么死磕书本理论,写不出一个能跑的 Hello World。这门课直接解决“听不懂原理”和“练不动手”的痛点。它不讲枯燥的概念堆砌,而是通过实战带你从用户态程序一步步走到内核态,让你亲眼看到代码如何在 CPU 上执行、内存如何被分配、进程如何切换。如果你之前连汇编都看不太懂,或者对虚拟内存、页表这些概念感到模糊,这门课会陪你把黑盒子的内核结构一层层剥开,让你建立真正的底层思维。

零基础能跟吗?建议先看这几块

课程对读者的要求并不高,但需要一点耐心去适应“动手”的节奏。如果你完全没写过代码,建议先花点时间把 C 语言基础(指针、内存管理)过一遍,因为课程里大量使用 C 语言直接操作硬件资源。如果有 Linux 基础,那更是如虎添翼。强烈建议先看“课前必读”里的开篇词,它能帮你调整认知,明白为什么要亲自写一个操作系统,而不是只会调用系统 API。接着务必完成“尝尝鲜”里的第一讲,亲手跑通从代码到机器运行的过程,这是打破“操作系统神秘感”的关键一步。后面的设计部分,哪怕你只读懂了内核结构,也足以让你对现代操作系统的运行逻辑有颠覆性的理解。

学完能独立做什么?资料怎么用?

学完这门课,你不仅能回答“程序到底是怎么跑起来的”这个问题,更具备独立编写简易操作系统内核、实现多进程调度、内存管理甚至文件系统的能力。你能独立分析操作系统崩溃的日志,理解死锁产生的原因,甚至有能力阅读和调试真实的 Linux 内核源码。这不仅仅是为了应付考试或面试,更是为了让你在面对复杂的并发问题或性能瓶颈时,能从系统机制层面找到根因。课程配套的资料包非常实用,里面有详细的实验步骤和调试工具说明,建议你在学习每一讲时,立刻跟着资料包里的指引进行本地实验。特别是“用户故事”里的调试技巧和经验分享,能帮你避开很多初学者容易踩的坑,让枯燥的编译链接和调试过程变得顺畅很多。别指望看完视频就懂,一定要在电脑上敲下代码,看到自己的内核真的加载起来,那种成就感才是这门课真正的价值所在。

课程目录

特别放送 (1讲)

  1. 大咖助场|以无法为有法,以无限为有限

用户故事 (7讲)

  1. 用户故事 _ yiyang:我的上机实验“爬坑指南”
  2. 用户故事 _ 成为面向“知识库”的工程师
  3. 用户故事 _ 技术人如何做选择,路才越走越宽?
  4. 用户故事 _ 操作系统发烧友:看不懂?因为你没动手
  5. 用户故事 _ 用好动态调试,助力课程学习
  6. 用户故事|艾同学:路虽远,行则将至
  7. 用户故事|驰往:借镜观形,学以致用

课前必读 (2讲)

  1. 开篇词 _ 为什么要学写一个操作系统?
  2. 编辑手记 _ 升级认知,迭代自己的操作系统

尝尝鲜:从一个Hello到另一个Hello (2讲)

  1. 01 _ 程序的运行过程:从代码到机器运行
  2. 02 _ 几行汇编几行C:实现一个最简单的内核

心有蓝图:设计 (2讲)

  1. 03 _ 黑盒之中有什么:内核结构与设计
  2. 04 _ 震撼的Linux全景图:业界成熟的内核架构长什么样?

程序的基石:硬件 (3讲)

  1. 05 _ CPU工作模式:执行程序的三种模式
  2. 06 _ 虚幻与真实:程序中的地址如何转换?
  3. 07 _ Cache与内存:程序放在哪儿?

基本法:同步原语 (2讲)

  1. 08 _ 锁:并发操作中,解决数据同步的四种方法
  2. 09 _ 瞧一瞧Linux:Linux的自旋锁和信号量如何实现?

夺权:启动初始化 (6讲)

  1. 10 _ 设置工作模式与环境(上):建立计算机
  2. 11 _ 设置工作模式与环境(中):建造二级引导器
  3. 12 _ 设置工作模式与环境(下):探查和收集信息
  4. 13 _ 第一个C函数:如何实现板级初始化?
  5. 14 _ Linux初始化(上):GRUB与vmlinuz的结构
  6. 15 _ Linux初始化(下):从_start到第一个进程

土地革命:内存 (8讲)

  1. 16 _ 划分土地(上):如何划分与组织内存?
  2. 17 _ 划分土地(中):如何实现内存页面初始化?
  3. 18 _ 划分土地(下):如何实现内存页的分配与释放?
  4. 19 _ 土地不能浪费:如何管理内存对象?
  5. 20 _ 土地需求扩大与保障:如何表示虚拟内存?
  6. 21 _ 土地需求扩大与保障:如何分配和释放虚拟内存?
  7. 22 _ 瞧一瞧Linux:伙伴系统如何分配内存?
  8. 23 _ 瞧一瞧Linux:SLAB如何分配内存?

活动实体:进程 (4讲)

  1. 24 _ 活动的描述:到底什么是进程?
  2. 25 _ 多个活动要安排(上):多进程如何调度?
  3. 26 _ 多个活动要安排(下):如何实现进程的等待与唤醒机制?
  4. 27 _ 瞧一瞧Linux:Linux如何实现进程与进程调度_

下属部门:设备I_O (4讲)

  1. 28 _ 部门分类:如何表示设备类型与设备驱动?
  2. 29 _ 部门建立:如何在内核中注册设备?
  3. 30 _ 部门响应:设备如何处理内核I_O包?
  4. 31 _ 瞧一瞧Linux:如何获取所有设备信息?

银行仓库:文件系统 (4讲)

  1. 32 _ 仓库结构:如何组织文件_
  2. 33 _ 仓库划分:文件系统的格式化操作
  3. 34 _ 仓库管理:如何实现文件的六大基本操作?
  4. 35 _ 瞧一瞧Linux:虚拟文件系统如何管理文件?

通信部:网络 (5讲)

  1. 36 _ 从URL到网卡:如何全局观察网络数据流动?
  2. 37 _ 从内核到应用:网络数据在内核中如何流转
  3. 38 _ 从单排到团战:详解操作系统的宏观网络架构
  4. 39 _ 瞧一瞧Linux:详解socket实现与网络编程接口
  5. 40 _ 瞧一瞧Linux:详解socket的接口实现

服务交接:接口 (2讲)

  1. 41 _ 服务接口:如何搭建沟通桥梁?
  2. 42 _ 瞧一瞧Linux:如何实现系统API?

番外篇:虚化的世界 (4讲)

  1. 43 _ 虚拟机内核:KVM是什么?
  2. 44 _ 容器:如何理解容器的实现机制?
  3. 45 _ ARM新宠:苹果的M1芯片因何而快?
  4. 46 _ AArch64体系:ARM最新编程架构模型剖析

结束语 (4讲)

  1. LMOS来信:第二季课程带你“手撕”计算机基础
  2. 参考答案 _ 对答案,是再次学习的一个机会
  3. 结束语 _ 生活可以一地鸡毛,但操作系统却是心中的光
  4. 结课测试 |这些操作系统的问题,你都掌握了么?