You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AMD64 legacy模式(PAE)下CR3页目录指针表基址扩至27位的原因?

AMD64 Legacy模式下PAE扩展CR3页目录指针表基址的疑问

我对PAE与分页机制的理解如下,可能存在疏漏或错误。

在《AMD64系统编程手册》的图示中显示:未启用PAE但启用PSE时可寻址40位物理地址,启用PAE(可选PSE)时可寻址52位物理地址,这部分我理解无误。

随后我查看了启用PAE后的PTE结构,发现物理页基地址字段从20位扩展至40位,从而可利用40位页帧号实现52位物理地址寻址。

接着我对比了启用与未启用PAE时的CR3寄存器结构:

  • 未启用PAE时,CR3中页目录表基址为20位,可指定4GiB地址空间内的任意页:
// 最大页帧号
2^20 - 1 = 1048575

// PAGE_SIZE = 4096
1048576 * 4096 = 4 GiB

这似乎足够将PDT基址存储在4GiB范围内。即便要寻址40位物理地址空间,理论上也可容纳所有页表(启用PSE时页表大小为4KiB):

// 最大地址空间
2^40 = 1 TiB

// 寻址全部2^40物理地址空间所需的页表数量
1 TiB / 4 GiB = 256

// 存储所有页表需要1MiB内存
// 启用PSE以寻址2^40物理地址空间时
// 由于PDE是4KiB对齐的内存空间,页表大小恰好为4KiB
256 * 4 KiB = 1 MiB

启用PAE后,无论是否使用PSE都可寻址52位物理地址,但令我困惑的是CR3中的页目录指针表基址从20位扩展至27位:

// 最大物理地址空间
2^52 = 4 PiB

// 最大页表数量
4 PiB / 4 GiB = 1048576

// 未启用PSE时页表大小约为8KiB
1048576 * 8 KiB = 8 GiB

// 启用PSE时页表大小约为4KiB
1048576 * 4 KiB = 4 GiB

理论上,启用PAE且未用PSE时需约8GiB内存存储所有页表,启用PSE时需约4GiB。但当时并无实际系统使用4PiB物理地址空间,且生产系统不会1:1存储所有页表,因此我认为该扩展似乎无实际意义,特此请教:AMD64 legacy模式(PAE)下为何要将CR3中的页目录指针表基址从20位扩展至27位?


内容的提问来源于stack exchange,提问作者k1r1t0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:33:12