2. 内存管理基础回顾:虚拟地址空间、物理内存、页表与MMU工作原理
在深入页表回收与Swap协同设计之前,必须牢固掌握内存管理的四大核心支柱:虚拟地址空间、物理内存、页表与MMU(内存管理单元)。它们共同构成了现代操作系统内存虚拟化的基石,也是后续所有性能调优动作的硬件与软件基础。
2.1 虚拟地址空间与物理内存
每个进程拥有独立的虚拟地址空间(如32位下4GB,64位下理论16EB),而物理内存是有限的硬件资源。操作系统通过地址翻译将虚拟地址映射到物理地址,实现隔离与共享。
核心概念:虚拟地址空间使每个进程“以为”自己独占内存,简化了编程模型;物理内存则是实际存储指令与数据的DRAM芯片。
| 维度 | 虚拟地址空间 | 物理内存 |
|---|---|---|
| 本质 | 进程看到的抽象内存视图 | 硬件提供的实际存储介质 |
| 大小 | 由CPU位宽决定(如48位地址线) | 由主板DIMM插槽与颗粒决定 |
| 分配 | 按需分配虚拟页 | 按需分配物理页框 |
| 映射关系 | 通过页表映射到物理页框或磁盘 | 被多个虚拟页共享或独占 |
| 典型瓶颈 | 地址空间碎片、TLB缺失 | 容量不足、带宽受限 |
2.2 页表:虚拟到物理的转换表
页表是操作系统为每个进程维护的数据结构,记录虚拟页号(VPN)到物理页框号(PFN)的映射。现代系统普遍采用多级页表(如x86_64的四级页表)以节省内存。
- 单级页表:连续存储所有映射项,占用大量连续物理内存(32位系统需4MB)。
- 多级页表:按需分配中间页目录,未使用的虚拟地址区域不分配页表页,大幅降低内存开销。
- 页表项(PTE):包含PFN、存在位(Present)、读写位(R/W)、用户/超级用户位(U/S)、脏位(Dirty)、访问位(Accessed)等标志位。
性能关键:脏位(Dirty)和访问位(Accessed)是页表回收与Swap换出决策的核心依据。操作系统定期扫描这些位以判断页面活跃度。
2.3 MMU工作原理
MMU是CPU内部的硬件模块,负责自动完成虚拟地址到物理地址的翻译。每次CPU访问内存时,MMU执行以下步骤:
- 解析虚拟地址:提取页号(VPN)和页内偏移(Offset)。
- TLB查找:在Translation Lookaside Buffer(TLB)中查找VPN对应的PFN。若命中(TLB Hit),直接得到物理地址。
- 页表遍历:若TLB未命中(TLB Miss),MMU硬件自动遍历多级页表,逐级读取页目录和页表项。
- 权限检查:检查PTE中的R/W、U/S等标志位,若违反权限则触发缺页异常(Page Fault)。
- 物理地址生成:将PFN与Offset拼接,形成最终物理地址,发送到内存控制器。
性能陷阱:TLB Miss会导致多次内存访问(四级页表最多4次),严重拖慢程序执行。大页(Huge Pages)通过减少页表层级和TLB项覆盖范围,是缓解TLB Miss的有效手段。
2.4 关键数据结构:页表项(PTE)
页表项是页表的基本单元,每个PTE对应一个虚拟页的映射信息。以x86_64架构为例,PTE大小为8字节,其关键字段如下:
| 位域 | 名称 | 说明 |
|---|---|---|
| Bit 0 | Present (P) | 页面是否在物理内存中。为0时触发缺页异常,Swap换入流程启动。 |
| Bit 1 | Read/Write (R/W) | 0表示只读,1表示可读写。写保护页用于写时复制(CoW)。 |
| Bit 2 | User/Supervisor (U/S) | 0表示仅内核可访问,1表示用户态也可访问。 |
| Bit 5 | Accessed (A) | 硬件自动置位,表示页面被访问过。操作系统定期清除该位以统计活跃度。 |
| Bit 6 | Dirty (D) | 硬件自动置位,表示页面被写入过。脏页在换出时必须写回Swap设备。 |
| Bits 12-51 | Physical Frame Number (PFN) | 物理页框号,指向4KB对齐的物理页框。 |
回收决策依据:页表回收算法(如LRU、Clock、工作集模型)依赖Accessed位和Dirty位判断页面热度。未被访问的干净页(A=0, D=0)是优先回收对象;脏页(D=1)换出前需写回磁盘,代价更高。
2.5 缺页异常与Swap入口
当MMU遍历页表发现PTE的Present位为0时,触发缺页异常(Page Fault)。操作系统缺页异常处理程序根据异常类型执行不同流程:
- 有效缺页(Major Page Fault):页面已被换出到Swap设备,需从磁盘读入物理内存。这是Swap换入的核心路径,I/O延迟高。
- 轻微缺页(Minor Page Fault):页面在物理内存中但PTE未建立映射(如共享页、匿名页首次访问),只需分配页框并建立PTE。
- 无效缺页(Invalid Page Fault):访问非法地址(如空指针、越界),触发段错误(Segmentation Fault)。
2.6 小结:内存管理基础与后续章节的关联
虚拟地址空间、物理内存、页表与MMU构成了内存管理的闭环。理解这些基础后,后续章节将深入探讨:
- 页表回收算法:如何利用PTE的Accessed/Dirty位高效选择回收候选页。
- Swap换出/换入:缺页异常处理程序如何与块设备层交互,完成页面换入换出。
- 性能调优:TLB缺失率、缺页异常频率、Swap I/O吞吐量等指标如何指导系统优化。