深入理解操作系统内存管理

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

内存管理

一、为什么需要虚拟内存

如果没有虚拟内存,每个程序都要直接操作物理地址,程序之间会互相踩内存,且无法运行比物理内存更大的程序。虚拟内存为每个进程提供独立的、连续的地址空间视图。

1.1 地址转换流程

二、分页机制

虚拟地址空间被切分为固定大小的“页”(通常 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,都会有“原来如此”的感觉。