内存的海市蜃楼:虚拟内存
每个进程都看到一片从 0 开始、连续、私有的地址空间。真实内存却是有限、碎片化、被所有人共享的。虚拟内存负责把这个谎圆上。
0先把地图摊开
每个进程都看到一片从 0 开始、连续、私有的地址空间。真实内存却是有限、碎片化、被所有人共享的。虚拟内存负责把这个谎圆上。 本章不会把概念排成术语表,而是沿着一条真实系统路径走:先看它解决什么痛点,再看 OS/云平台怎样实现,最后回到工程取舍。
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。所有这些都在问:有限内存如何被安全、高效、可预测地共享?
↔云与 OS 的桥
这一章不是孤立知识点。下面这张表把它和前后章节接起来:你会看到,同一个机制在单机、云平台和 AI 基建里会换名字,但问题结构没变。
| 本章机制 | 云上形态 | 为什么重要 |
|---|---|---|
| 页表 | 虚拟机的二级地址翻译 | guest 虚拟地址最终还要走到 host 物理地址。 |
| 缺页 | serverless 冷启动、容器 OOM | 内存懒加载和限制会直接影响启动延迟。 |
| TLB/页大小 | 数据库、GPU 推理、KV cache | 大块连续访问能显著受益于更少的地址翻译。 |
深潜 读完本章后,怎么确认自己真的懂了?›
不要只背定义。你应该能把一个线上现象翻译回机制:慢在哪里、谁在排队、哪个抽象漏了、哪个资源被过度承诺。下面三个检查点可以当成小作业。
本章收束 · 你现在握住了什么
- 虚拟内存给每个进程一片私有地址空间。
- 页表负责映射,TLB 负责让常见翻译足够快。
- 缺页中断是按需分配、懒加载和 copy-on-write 的机制基础。
- 云上的内存问题本质仍是有限物理内存的共享与隔离。
有了 CPU 和内存的幻觉,下一步是让多个执行流共享同一份世界。于是并发登场,也带来了竞态和死锁。