
文章目录一、虚拟地址与物理地址1.区别与联系2.地址转换过程3.虚拟地址存在的意义为什么要分 VA 和 PA4.常见误区二、多级页表1.Linux内核管理 通用术语PGD→P4D→PUD→PMD→PTE-page (ARM64架构)一、虚拟地址与物理地址1.区别与联系CPU 执行程序时发出 VA由 MMU 页表 把它翻译成 PA最终用 PA 去访问物理内存。VA 是程序视角的地址PA 是硬件视角的地址MMU 和页表负责把 VA 翻译成 PA。缩写英文全称中午全称含义VAVirtual Address虚拟地址程序看到的地址PAPhysical Address物理地址硬件真正用来访问内存条的地址2.地址转换过程虚拟地址通常分成两部分VA虚拟页号 VPN 页内偏移 offset PA物理帧号 PFN 页内偏移 offset转换流程大致是CPU 发出一个 VA。MMU 先查 TLB如果命中直接得到 PA。如果 TLB 未命中MMU 遍历 页表。页表项 PTE 给出物理帧号 PFN 和权限位。组合成 PA去访问 Cache / 内存。如果页表项不存在或权限不对触发 缺页异常 / 保护异常由操作系统处理。操作系统加载页面、更新页表后CPU 重新执行指令。其中页内偏移在 VA 和 PA 中通常不变变的是前面的页号/帧号。3.虚拟地址存在的意义为什么要分 VA 和 PA主要目的不是“把简单问题搞复杂”而是为了实现进程隔离进程 A 不能随便访问进程 B 的内存。内存保护代码段只读、可执行数据段可读写但不可执行用户态不能访问内核态。灵活分配虚拟地址可以连续物理页可以分散。按需分页用到时才分配物理页。共享内存多个进程可以把不同 VA 映射到同一 PA共享库、共享内存。写时复制 COWfork 后先共享物理页写入时才复制。内存可大于物理内存不常用页面可换出到磁盘。ASLR地址空间随机化提高安全性。4.常见误区VA 相同不代表 PA 相同不同进程的同一个 VA 可以映射到不同 PA。PA 相同可以由多个 VA 映射共享库、共享内存就是这种情况。用户程序里的指针是 VA不是 PA你打印 %p 看到的是虚拟地址。物理地址不一定都是 RAMPA 也可能对应 MMIO 设备寄存器。没有 MMU 的系统中VA 可能等于 PA比如一些裸机 MCU。虚拟内存不等于硬盘虚拟内存是一套地址转换和管理机制交换分区只是它的后备存储之一。二、多级页表1.Linux内核管理 通用术语PGD→P4D→PUD→PMD→PTE-page (ARM64架构)缩写英文全称中文全称拓展PGDPage Global Directory页全局目录表顶级页目录表P4DPage 4th-level Directory四级页目录表PUDPage Upper Directory上层页目录表即三级页目录表PMDPage Middle Directory中间页目录表即二级页目录表PTEPage Table Entry页表项Page页面VPNVirtual Page Number虚拟页号虚拟地址 虚拟页号 页内偏移PPN/PFNPhysical Page/Frame Number物理页号物理地址 物理页号 页内偏移TLBTranslation Lookside Buffer转换后备缓冲器俗称快表TLB缓存技术减少页表walk的频率Page Table页表Page Table Walk页表遍历指从顶级页表开始逐级查找下一级页表最终获取物理地址的完整过程多级页表的每一级查找都需要访问一次内存(假设没有TLB)获取下一级页表的基地址这个串行访问过程被形象地称为”walk“walk形象描述了从顶级页表开始逐级向下查找最终获取物理地址的完整过程。这个过程之所以称之为walk是因为它像在树结构中从根节点到叶节点一步步行走每一步都需要访问一次内存来获取下一级页表的地址TWUTable Walk Unit页表遍历单元专门的硬件单元负责执行页表walk。逐级查找页表处理TLB miss。在walk过程中验证访问权限公司内部称为 HPW (Hardware Pagetable Walker)Page Fault缺页异常ASIDAddress Space Identifier地址空间标识符ASID是操作系统分配给每个进程的唯一标识符用于区分不同进程的虚拟地址空间ASID机制避免进程切换时清空TLB保留有效页表项Huge Pages大页支持使用2MB或1GB大页减少页表级数