该示例以 32 位系统、4KB 页为例说明:
1.地址拆分(左侧:虚拟地址)
- 例:虚拟地址
0x12345678
页索引 = 0x12345(高 20 位),页内偏移 = 0x678(低 12 位)。
2. 页表查询(中间:页表映射)
- MMU 用虚拟页索引(0x12345)查询页表,找到对应的物理页基地址(0x87654000)。
- 标志位:表示该页是否在物理内存中(存在位)、读写权限等
3. 物理地址合成(右侧:物理地址)
- 物理页基地址(0x87654000)+ 页内偏移(0x678)= 物理地址
0x87654678
。
4. 完整转换流程(串联)
5.TLB 的作用(加速环节)
- 若 TLB 中存在虚拟页索引(0x12345),直接获取物理页基地址,跳过内存中的页表查询,加速转换。
总结
进程操作虚拟地址 → MMU拆分地址 → 查询页表 → 合成物理地址 → 访问物理内存
通过以上结构,可清晰看到虚拟地址如何通过 MMU 和页表转换为物理地址,核心是 “按页拆分地址→页表映射→偏移复用” 的过程。如果需要更复杂的多级页表转换(如 64 位系统),原理类似,只是页索引会被拆分为多个层级,逐级查询页表。