2. 页表项基础结构:PTE 通用位域与描述符类型

页表项(Page Table Entry, PTE)是 MMU 进行地址转换和权限管控的最小数据单元。ARMv8-A 架构中,一个标准的 PTE 占用 8 字节(64 位),其位域布局决定了该描述符是无效还是有效,以及有效时对应的映射粒度(页、块或下一级表)。

核心原则:MMU 在遍历页表时,首先检查 PTE 的 bit[0](Valid 位)。若为 0,则直接判定为无效描述符,触发 Translation Fault;若为 1,则根据 bit[1] 区分表描述符与块/页描述符。

2.1 PTE 通用位域定义(64 位 ARMv8-A)

下表列出了 ARMv8-A 中通用 PTE 的位域布局(以 4KB 粒度、48 位物理地址为例):

位域范围 字段名称 功能描述
[63:48] Upper Attributes PBHA、XN(执行权限)、Contiguous 等扩展属性
[47:16] Output Address [47:16] 物理页帧号(PFN)或下一级页表基址的高 32 位
[15:12] Reserved / Hints 保留位或硬件辅助提示位(如 Access Flag)
[11:10] AP[2:1] 数据访问权限(EL0/EL1 读写控制)
[9] SH 可共享性属性(Non-shareable / Outer / Inner)
[8:6] AttrIndx[2:0] 指向 MAIR 寄存器中的属性索引
[5] NS 非安全空间标识(TrustZone)
[4:2] Attr / Type 描述符类型编码(见表 2.2)
[1] Table / Page 0 = 表描述符(下一级);1 = 页/块描述符
[0] Valid 0 = 无效描述符;1 = 有效描述符
位域解读技巧:bit[1:0] 组合决定描述符类型——00 无效、01 表描述符、11 页/块描述符。10 组合在 ARMv8-A 中为保留格式,触发 Fault。

2.2 描述符类型:页 / 块 / 表

根据 PTE 的 bit[1:0] 编码,MMU 将描述符分为三类:

  • 表描述符(Table Descriptor):bit[1:0] = 01。指向下一级页表的基地址。仅在 L0、L1、L2 页表层级出现,用于构建多级页表树。
  • 块描述符(Block Descriptor):bit[1:0] = 11。映射一个连续的大内存块(如 2MB 或 1GB),通常出现在 L1 或 L2 层级,用于节省页表空间。
  • 页描述符(Page Descriptor):bit[1:0] = 11,且位于 L3 层级。映射一个 4KB(或 16KB/64KB)的物理页,是最终粒度的映射。
常见混淆点:页描述符与块描述符在 bit[1:0] 编码上完全相同(均为 11),MMU 通过页表层级区分二者。L3 层级遇到 11 视为页描述符,L0/L1/L2 层级遇到 11 视为块描述符。设计页表软件时必须确保层级与描述符类型匹配,否则产生 Level Mismatch Fault。
ARM 页表描述符类型与层级关系 描述符类型与页表层级对应关系 L0 表 L1 表 L2 表 L3 表 表描述符 (01) 块描述符 (11) 块描述符 (11) 页描述符 (11) 说明: • L0 表只能存放表描述符(指向 L1 表),不能直接映射内存。 • L1/L2 表可混合存放表描述符和块描述符,实现不同粒度的映射。 • L3 表只能存放页描述符,是地址转换的最后一层。

2.3 无效描述符与有效描述符

MMU 在遍历页表时,对每个 PTE 执行以下判定流程:

  1. 检查 Valid 位(bit[0]):若为 0,直接标记为无效描述符,MMU 停止遍历并产生 Translation Fault(Stage 1 或 Stage 2 缺页异常)。
  2. 检查 bit[1] 与层级一致性:若 Valid=1,MMU 进一步检查 bit[1] 是否与当前层级匹配(L0 必须为表描述符,L3 必须为页描述符,L1/L2 可为表或块)。
  3. 属性检查:若描述符有效且类型匹配,MMU 提取输出地址、权限、内存属性,进行最终访问控制判断。
无效描述符的典型场景:
  • 未映射的虚拟地址区域(如栈底保护页、空洞)。
  • 页表分配但 PTE 尚未写入(初始值为 0)。
  • 热迁移或内存回收时临时清空 PTE 的 Valid 位。

有效描述符必须同时满足:Valid=1、bit[1] 与层级匹配、输出地址对齐到映射粒度(如 4KB 页描述符的地址低 12 位必须为 0)。

无效与有效描述符判定流程 MMU 对 PTE 的判定流程 读取 PTE Valid=1? 无效描述符 → Translation Fault 有效描述符 继续检查: • bit[1] 与层级匹配 • 地址对齐 & 权限

2.4 描述符类型对比总结

特性 表描述符 块描述符 页描述符
bit[1:0] 01 11 11
出现层级 L0, L1, L2 L1, L2 L3
映射粒度 N/A(指向下级表) 2MB(L2)/ 1GB(L1) 4KB(标准页)
输出地址含义 下一级页表基址 物理块基址 物理页基址
页表树深度 减少一级 终止遍历 终止遍历
性能权衡:块描述符可以减少页表级数和 TLB 压力,但内存管理粒度较粗,适合大块连续映射(如内核线性映射、设备 MMIO)。页描述符提供 4KB 粒度,适合用户空间堆栈、文件映射等需要细粒度权限控制的场景。