Part II · 一台机器 · 第 3 章
03

内存的海市蜃楼:虚拟内存

每个进程都看到一片从 0 开始、连续、私有的地址空间。真实内存却是有限、碎片化、被所有人共享的。虚拟内存负责把这个谎圆上。

难度 CS162 核心 用时 约 60 分钟 交互 地址翻译流程 · TLB/页大小取舍 路线 螺旋式:先抓大图,再深入机制

0先把地图摊开

每个进程都看到一片从 0 开始、连续、私有的地址空间。真实内存却是有限、碎片化、被所有人共享的。虚拟内存负责把这个谎圆上。 本章不会把概念排成术语表,而是沿着一条真实系统路径走:先看它解决什么痛点,再看 OS/云平台怎样实现,最后回到工程取舍。

地址空间进程看到的私有内存宇宙。它是抽象,不等于真实 DRAM。
页表虚拟页到物理页的映射表,由内核维护、硬件 MMU 查询。
TLB地址翻译的小缓存。命中时很快,未命中时要走页表。
缺页中断访问的页不在物理内存时,硬件陷入内核,由内核把页调入。
内存的海市蜃楼 · 核心流程 分步动画 点击节点或用键盘 ← →
图 3.1核心机制路径。把这一章最容易散掉的流程压成可播放的五步。

3.1为什么每个进程都从 0 开始

如果程序直接使用物理地址,两个程序就会踩进彼此的内存。虚拟内存给每个进程一份私有地址空间,再由页表把虚拟地址翻译到真实物理页。安全、隔离、按需分配都从这里来。

3.2页是内存管理的基本货币

内核不按单个字节搬运内存,而是按页管理。常见页大小是 4KB,也可以有 huge page。页越大,页表越小、TLB 覆盖范围越大,但内部碎片也可能变多。

3.3TLB 是速度的关键

每次访存如果都查多级页表,CPU 会慢得离谱。TLB 缓存最近的地址翻译,让多数访问在硬件里快速完成。云上 noisy neighbor、容器密度、数据库性能,都可能被 TLB 和缓存行为影响。

3.4缺页不是 bug,而是协议

当进程访问一个尚未加载的页,硬件触发 page fault。内核可能从磁盘调页,也可能做 copy-on-write,也可能判定非法访问并杀掉进程。一次 fault 是硬件和内核之间的对话。

3.5从虚拟内存到云内存

虚拟机还有 guest page table 和 host page table,容器还有 memory limit,大模型推理还有 KV cache。所有这些都在问:有限内存如何被安全、高效、可预测地共享?

内存的海市蜃楼 · 取舍实验 可玩模拟器 切换策略,看指标怎么变
图 3.2工程取舍。云和 OS 的概念真正进入工程时,几乎都不是“选最好”,而是在约束之间找一个诚实的点。

云与 OS 的桥

这一章不是孤立知识点。下面这张表把它和前后章节接起来:你会看到,同一个机制在单机、云平台和 AI 基建里会换名字,但问题结构没变。

本章机制云上形态为什么重要
页表虚拟机的二级地址翻译guest 虚拟地址最终还要走到 host 物理地址。
缺页serverless 冷启动、容器 OOM内存懒加载和限制会直接影响启动延迟。
TLB/页大小数据库、GPU 推理、KV cache大块连续访问能显著受益于更少的地址翻译。
深潜 读完本章后,怎么确认自己真的懂了?

不要只背定义。你应该能把一个线上现象翻译回机制:慢在哪里、谁在排队、哪个抽象漏了、哪个资源被过度承诺。下面三个检查点可以当成小作业。

本章收束 · 你现在握住了什么

  • 虚拟内存给每个进程一片私有地址空间。
  • 页表负责映射,TLB 负责让常见翻译足够快。
  • 缺页中断是按需分配、懒加载和 copy-on-write 的机制基础。
  • 云上的内存问题本质仍是有限物理内存的共享与隔离。

有了 CPU 和内存的幻觉,下一步是让多个执行流共享同一份世界。于是并发登场,也带来了竞态和死锁。