你写了一万行代码,却从没想过按下电源键后,计算机内部到底发生了什么。你每天和进程、内存、文件打交道,但这些概念在你脑中只是一团模糊的影子。2026年5月,拥有420万订阅者的YouTube编程顶流Fireship发布了一支视频——"Every operating system concept in one video…",用他标志性的高密度快节奏风格,从按下电源键的那一刻起,一路拆解到操作系统如何管理你写的每一行代码的执行。这不是一门计算机科学课程,而是一场给所有开发者的"底层认知升级"。如果你不理解操作系统,你永远只是一个"会写代码的人",而不是一个"理解计算机的人"。
| 项目 | 内容 |
|---|---|
| 视频标题 | Every operating system concept in one video… |
| 频道 | Fireship (Jeff Delaney) |
| 订阅数 | 420万 |
| 发布日期 | 2026年5月7日 |
| 核心主题 | 操作系统全部核心概念的端到端拆解 |
| 视频链接 | YouTube |
视频从计算机按下电源键的那一刻开始——这不是一个比喻,而是字面意义上的第一步。当CPU通电时,它处于一种"失忆"状态,不知道硬盘、内存或任何外设的存在。它只知道一个地址:0xFFFFFFF0,这是主板ROM中固化的Reset Vector。
Bootloader就是这段从"什么都不知道"到"把操作系统加载进内存"之间的桥梁。 视频解释了BIOS/UEFI如何执行POST(加电自检),然后找到可启动设备,将第一阶段的Bootloader加载到内存的0x7C00地址。对于大多数Linux系统来说,这就是GRUB的起点。
Fireship的独到之处在于,他用动画展示了这个过程的"鸡生蛋"问题——Bootloader本身是一个程序,但程序需要操作系统才能运行,而操作系统又需要Bootloader来加载。解决方案是Bootloader以裸机方式直接执行,不依赖任何操作系统服务。这个概念对理解嵌入式系统和物联网开发至关重要。
延伸思考:现代UEFI固件本身就是一个微型操作系统,它有自己的驱动模型、Shell,甚至可以通过网络启动。Docker和虚拟机的底层原理也在这里埋下伏笔。
这是视频中最精妙的部分之一。Fireship用同心圆的可视化方式解释了x86架构的Protection Rings——Ring 0(内核态)到Ring 3(用户态)。
Ring 0拥有对硬件的完全控制权:CPU可以执行任何指令、访问任何内存地址、直接读写设备寄存器。Ring 3是普通应用程序运行的地方:你不能直接访问硬件、不能读写其他进程的内存、甚至连申请内存都要"求"内核。
这个设计的核心目的不是"限制"你,而是保护。如果一个用户态程序崩溃了,它不会拖垮整个系统——因为内核(Ring 0)有隔离机制。Fireship特别提到,现代操作系统实际上只用Ring 0和Ring 3两级,Ring 1和Ring 2基本被废弃了。但虚拟化的出现让这些中间层级重新有了意义:hypervisor运行在Ring -1(VMX root mode),这是一个比Ring 0还高的特权级。
对开发者的实际意义:你写的每一行代码都在Ring 3执行,任何涉及I/O、内存分配、网络通信的操作都需要通过System Call"切换"到Ring 0。这个切换本身就是性能开销。 理解这一点,你就能理解为什么高性能网络程序会用到io_uring、DPDK这些绕过内核的技术。
Fireship把Virtual Memory比喻成给每个进程一个"幻觉"——每个进程都以为自己独占了整个内存空间,从0x00000000到0xFFFFFFFF(32位系统)或者更大的地址空间。但实际上,这些"虚拟地址"通过Page Table被映射到物理内存的不同位置。
视频重点解释了页表(Page Table)和MMU(内存管理单元)的协作机制。 CPU发出的虚拟地址被MMU翻译成物理地址,这个过程通过TLB(Translation Lookaside Buffer)缓存加速。如果没有TLB,每次内存访问都要查页表,性能会下降100倍以上。
Fireship还提到了一个关键概念:Copy-on-Write(写时复制)。当你fork()一个进程时,子进程并不立即复制父进程的内存——它们共享同一块物理内存,直到某个进程真正要写入时才复制。这就是为什么Docker容器启动如此之快——它大量利用了CoW机制。
性能洞察:Page Fault(缺页中断)是理解程序性能的关键。当你的程序访问一个尚未映射到物理内存的虚拟地址时,CPU触发Page Fault,内核需要从磁盘加载数据(swap in)。一次磁盘I/O的延迟约为10ms,而一次内存访问只需100ns——差了10万倍。 这就是为什么内存使用模式对性能影响巨大。
视频对文件系统的解释从最基础的概念出发:硬盘本质上是一堆可以存储0和1的扇区(sector),文件系统就是在这堆无意义的扇区上建立"秩序"。
Fireship对比了不同的文件系统设计哲学: - ext4(Linux默认):使用inode表来跟踪文件的元数据和数据块位置 - NTFS(Windows):使用Master File Table,更复杂但功能更丰富 - APFS(macOS):Apple的CoW设计,优化了SSD性能和加密
视频特别解释了为什么ls命令执行很快——因为目录只是"文件名到inode号"的映射表,读取目录不需要遍历整个磁盘。而硬链接(hard link)和软链接(symbolic link)的区别也因此一目了然:硬链接直接指向inode,软链接指向文件路径。
实战价值:理解文件系统是理解数据库性能的基础。PostgreSQL的WAL(Write-Ahead Log)、MySQL的InnoDB Buffer Pool、SQLite的journal模式——这些全都是在操作系统文件系统之上构建的优化策略。数据库调优的第一步,往往是理解底层文件系统的行为。
这个部分是很多开发者最陌生的领域。驱动程序本质上就是操作系统和硬件设备之间的"翻译器"。Fireship解释了设备驱动如何将操作系统的通用指令翻译成特定硬件能理解的电信号。
中断(Interrupt)是这个系统的核心机制。 当网卡收到数据包、键盘被按下、或者定时器到期时,硬件会向CPU发送一个电信号(中断请求IRQ),CPU暂停当前工作,保存上下文,跳转到中断处理程序(ISR)执行。
视频通过一个生动的例子说明了为什么这很重要:如果没有中断机制,CPU只能通过轮询(Polling)来检查设备状态——不停地问"你有数据吗?你有数据吗?"这就像电话占线时不断重拨。中断机制让设备"主动敲门",效率提高了几个数量级。
延伸分析:现代高性能I/O技术的演进方向,本质上都是在优化中断处理。NVMe SSD使用Multiple I/O Queues替代传统的单一中断线;网卡使用RSS(Receive Side Scaling)将中断分配到多个CPU核心;Linux的irqbalance守护进程动态优化中断在CPU间的分布。
进程是操作系统最重要的抽象之一。 Fireship解释了进程控制块(PCB/Task Struct)如何存储进程的所有状态——寄存器值、内存映射、打开的文件描述符、信号处理函数等等。"进程"本质上就是PCB加上一段正在执行的代码。
视频解释了进程的生命周期:创建(fork/exec)、就绪(ready)、运行(running)、阻塞(blocked/ sleeping)、终止(terminated)。状态之间的转换完全由调度器控制。
调度算法是操作系统设计的核心艺术。 Fireship从最简单的FIFO到现代Linux的CFS(Completely Fair Scheduler)做了对比。CFS的核心理念很简单:给每个进程"公平"的CPU时间。它用红黑树维护进程的虚拟运行时间(vruntime),每次选择vruntime最小的进程运行。
关键认知:线程 vs 进程。线程共享同一个地址空间,切换代价更小;进程有独立的地址空间,隔离性更好。这个trade-off是所有并发编程的基础。 Go的goroutine、Java的虚拟线程(Project Loom)、Erlang的轻量级进程——它们都在试图打破这个trade-off的限制。
这是连接前面所有概念的枢纽。 你写的程序调用的每一个"系统级"操作——printf、malloc、read、write、socket——最终都通过System Call进入内核态执行。
Fireship解释了System Call的工作流:
1. 用户程序调用glibc封装函数
2. 将系统调用号放入rax寄存器
3. 执行syscall指令,触发CPU从Ring 3切换到Ring 0
4. 内核查找系统调用表,执行对应处理函数
5. 结果通过寄存器返回用户态
这个切换过程的开销不可忽视——每次System Call都需要保存/恢复寄存器状态、切换栈、刷新TLB。在极端场景下(如高频网络I/O),System Call本身就成了性能瓶颈。
2026年视角:io_uring彻底改变了这个模型。通过共享环形缓冲区,用户程序可以批量提交I/O请求,内核批量处理,减少了System Call的次数。Linux 6.x内核已经将io_uring作为高性能I/O的首选方案。理解传统的System Call机制,才能理解为什么io_uring是一个革命性的改进。
mindmap
root((操作系统全景))
启动流程
BIOS/UEFI POST
Reset Vector 0xFFFFFFF0
Bootloader(GRUB)
内核加载
权限模型
Ring 0 内核态
Ring 3 用户态
System Call切换
Hypervisor Ring -1
内存管理
虚拟地址空间
Page Table + MMU
TLB缓存
Copy-on-Write
Page Fault + Swap
文件系统
Inode + 目录结构
ext4 / NTFS / APFS
硬链接 vs 软链接
WAL与日志结构
硬件交互
设备驱动程序
中断(IRQ)机制
DMA直接内存访问
轮询 vs 中断
进程管理
PCB/Task Struct
进程状态机
CFS调度器
线程 vs 进程
I/O优化
System Call开销
io_uring零拷贝
DPDK绕过内核
异步I/O模型
看完这个视频后,你的编程思维会发生几个质变:
第一,调试能力升级。 当程序出现segfault时,你不再只是"啊,指针问题",而是知道这是进程尝试访问未映射的虚拟地址,内核发送了SIGSEGV信号。当程序变慢时,你会先用strace看System Call的数量和耗时,用perf看Page Fault的频率——因为你现在知道这些是真正的性能瓶颈所在。
第二,架构设计更精准。 选择多进程还是多线程?选择同步I/O还是异步I/O?选择文件存储还是内存缓存?这些决策的背后都是操作系统原理。理解了虚拟内存和Page Fault,你就会在高性能场景下使用大页(Huge Pages)来减少TLB Miss;理解了中断机制,你就会在低延迟场景下使用CPU亲和性(CPU Affinity)来避免中断在不同核心间漂移。
第三,面试竞争力提升。 系统设计面试中,"设计一个高并发Web服务器"的答案,本质上就是操作系统原理的应用——epoll/kqueue的事件驱动模型、进程池/线程池的调度策略、零拷贝技术的使用。Fireship的视频给了你构建这些答案的底层知识框架。
strace追踪一个简单程序的System Call,你会惊讶于一个printf背后发生了多少事kernel/sched/fair.c是CFS调度器的实现,只有约7000行,但能让你真正理解调度Fireship用一个视频证明了:理解操作系统不是计算机科学的选修课,而是每个程序员从"写代码的人"进化为"理解计算机的人"的必修门槛。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
