1. 内存管理概述:物理内存与虚拟内存的概念、MMU的作用、页表与地址转换基础

1.1 物理内存与虚拟内存

操作系统内存管理的核心目标是让多个进程安全、高效地共享有限的物理内存资源。为此,现代操作系统普遍引入了虚拟内存的概念,为每个进程提供一个独立的、连续的、远大于物理内存的地址空间。

概念 定义 特点
物理内存 硬件实际提供的 RAM(随机存取存储器),由物理地址(Physical Address, PA)直接寻址。 容量有限、所有进程共享、地址不连续(碎片化)。
虚拟内存 操作系统为每个进程抽象出的逻辑地址空间,由虚拟地址(Virtual Address, VA)寻址。 容量大(如 64 位系统可达 2^64 字节)、每个进程独立、地址连续、部分数据可暂存于磁盘。
核心洞察: 虚拟内存让每个进程“以为”自己独占整个内存空间(如 0x00000000 ~ 0xFFFFFFFF),从而简化了编程模型,并提供了进程隔离与内存保护。

1.2 MMU:地址转换的硬件引擎

内存管理单元(Memory Management Unit, MMU)是 CPU 内部负责将虚拟地址转换为物理地址的硬件模块。它是虚拟内存机制得以高效实现的基石。

MMU 核心职责:
  • 地址转换: 将 CPU 发出的虚拟地址实时转换为物理地址。
  • 权限检查: 检查当前访问是否合法(读/写/执行权限、用户态/内核态)。
  • 缓存管理: 管理 TLB(Translation Lookaside Buffer,页表缓存),加速转换过程。
MMU 地址转换流程 CPU 核心 发出虚拟地址 (VA) MMU 地址转换 + 权限检查 物理内存 物理地址 (PA) TLB 页表缓存(快表) 页表 页表项 (PTE) 转换流程:CPU → 虚拟地址 → MMU(查 TLB/页表)→ 物理地址 → 物理内存 TLB 命中则跳过页表访问,大幅提升转换效率;TLB 未命中则触发慢速页表遍历。

1.3 页表与地址转换基础

页表是操作系统维护的、用于记录虚拟页到物理页帧映射关系的数据结构。MMU 通过查找页表完成地址转换。

1.3.1 分页机制

  • 页(Page): 虚拟地址空间被划分为固定大小的块,通常为 4KB。
  • 页帧(Page Frame): 物理内存被划分为同样大小的块。
  • 页表项(PTE): 页表中的每一行,包含物理页帧号、权限位、存在位、脏位等元数据。

1.3.2 地址转换公式

虚拟地址 (VA) = 虚拟页号 (VPN) + 页内偏移 (Offset)
物理地址 (PA) = 物理页帧号 (PFN) + 页内偏移 (Offset)

转换过程:
1. 从 VA 中提取 VPN 和 Offset。
2. MMU 以 VPN 为索引,在页表中查找对应的 PTE。
3. 从 PTE 中提取 PFN。
4. 拼接 PFN 和 Offset,得到最终的 PA。

1.3.3 多级页表

为节省页表占用的连续物理内存,现代 64 位架构普遍采用多级页表(如 x86_64 的 4 级页表)。只有实际使用的虚拟地址范围才会分配页表层级,未使用的区域不占用内存。

层级 名称 作用
L1 PML4(Page Map Level 4) 顶级页表,覆盖整个 48 位地址空间
L2 PDPT(Page Directory Pointer Table) 二级页表,指向页目录
L3 PD(Page Directory) 三级页表,指向页表
L4 PT(Page Table) 四级页表,包含最终的 PTE
多级页表地址转换 虚拟地址 (48位) 分解:PML4(9位) | PDPT(9位) | PD(9位) | PT(9位) | Offset(12位) PML4 PDPT PD PT 物理页 转换步骤: 1. 从 VA 提取 PML4 索引 → 查找 PML4 表 → 获得 PDPT 基址 2. 提取 PDPT 索引 → 查找 PDPT 表 → 获得 PD 基址 → ... → 最终获得物理页帧号
关键注意: 页表本身也存储在物理内存中。每次地址转换都需要多次内存访问(多级页表遍历),因此 TLB 的缓存命中率对性能至关重要。缺页异常(Page Fault)发生在 PTE 的“存在位”为 0 时,此时需要操作系统介入处理。

1.4 本章小结

  • 物理内存是硬件资源,虚拟内存是操作系统提供的抽象,两者通过 MMU 和页表建立映射。
  • MMU 负责实时地址转换和权限检查,TLB 是其关键加速组件。
  • 页表是分页机制的核心数据结构,多级页表在 64 位系统中节省了大量内存。
  • 理解地址转换是后续学习 VMA(虚拟内存区域)和缺页中断处理的基础。