
内存管理是操作系统的核心职责之一。理解它,不仅能解释“为什么程序能用到比物理内存更大的地址空间”,还能帮你定位大量诡异的性能问题。

一、为什么需要虚拟内存
如果没有虚拟内存,每个程序都要直接操作物理地址,程序之间会互相踩内存,且无法运行比物理内存更大的程序。虚拟内存为每个进程提供独立的、连续的地址空间视图。
1.1 地址转换流程
- CPU 生成虚拟地址(VA)
- MMU 通过页表将 VA 映射为物理地址(PA)
- TLB 缓存近期转换结果,加速查表
二、分页机制
虚拟地址空间被切分为固定大小的“页”(通常 4KB),物理内存被切分为“页框”。页表记录页到页框的映射。
2.1 多级页表
64 位系统的地址空间极其庞大,采用多级页表避免页表本身占用过多内存:
虚拟地址 = [PML4][PDPT][PD][PT][Offset]
每级 9 bit,共 4 级 + 12 bit 页内偏移 = 48 bit 可用三、缺页中断
当访问的页不在物理内存中时,触发缺页中断(Page Fault),操作系统从磁盘换入对应页框,更新页表后重新执行指令。
缺页中断不是错误,而是虚拟内存按需加载的正常机制。
总结
虚拟内存 = 虚拟地址空间 + 页表 + MMU + 缺页机制。理解了这条主线,再去看 Windows 的 Working Set、Linux 的 OOM Killer,都会有“原来如此”的感觉。