26-PAE 分页

来源:互联网 发布:网络机顶盒品牌排行 编辑:程序博客网 时间:2024/04/27 11:31

相信你已经对三段式分页掌握的非常熟练了。可是你有没有意识到,这种线性地址到物理地址的映射方式,存在着某种局限性?

它能够映射的最大的物理地址,也只能是 0xffffffff. 原因在于,PTE 中的高20位保存的是页号,最大能保存的页号是 0xfffff,每个页占用 4KB,所以页号为 0xfffff 的物理页的物理偏移是 0xfffff000.

每次说保存的是页号,其实有点烦了。因为把 PDE 或 PTE 最低 12 位抹 0 后,PDE 和 PTE 就变成物理基址了。所以今后我们直接说 PDE 、PTE 保存的就是物理基址。如此一来,PDE 、 PTE 占用 4 字节,能够索引的最大物理基址自然就是 4GB了。

如果你想插入一根 8GB 的内存条,岂不是有 4GB 都被浪费了?因为三段式分页根本就索引不到这根内存条的高 4GB 部分。

其实 cpu 硬件工程师们早就意识到了这个问题,他们设计了一种新的分页方式 —— PAE分页。

PAE 分页

三段式分页,是将线性地址拆分成了 10-10-12 的形式,而 PAE 分页,是将线性地址拆分成了 2-9-9-12 的四段式,即 3 段索引加偏移。其中的两个 9 分别是页目录表索引和页表索引。那么 2 是什么索引?不如,先看图1吧。


这里写图片描述
图1 四段式线性地址映射

2-9-9-12 分页方式转换方式:

  1. 根据 CR3 找到 Page Directory Pointer Table
  2. 根据一级索引在 Page Directory Pointer Table 中查询到 Page Directory
  3. 根据二级索引在 Page Directory 中查询到 Page Table
  4. 根据三级索引在 Page Table 中查询到普通 4KB 物理页
  5. 在物理页中查找第四段偏移。

根据以上描述,第一段索引其实就是 Page Directory Pointer Table(PDPT) 这张表的索引。

下面的彩图也许能帮助你理解。


这里写图片描述
图2 CR3-PDPT-PDT-PTT-物理页关系

为了能对照,我把三段式的 10-10-12图也搬过来。


这里写图片描述
图3 三段式分页

图2和图3区别就在于,PAE 分页又多了一级 PDPT。官方翻译为页目录指针表,为了便于理解,在此将其称为顶级目录表。这个表中,每个表项称为 PDPTE,也就是页目录指针表项,它保存的是页目录的基址。

三段式分页中的 PDE 和 PTE 都是 4 字节,无论是 PDT 还是 PTT 都有1024个表项。

而PAE分页中,PDPT只有 4 个表项,PDT 和 PTT 有 512 个表项,PDPTE、PDE、PTE 的大小是 8 字节

PDPT 表一共占用 32 字节,PDT 、PTT 表仍然占用 4KB 的物理页。

回到篇首的问题,PAE 是如何把线性地址映射到了 4GB 以外的物理页上去的?那么需要研究一下 PTE 的结构。

PTE 结构


这里写图片描述
图4 PTE 结构

如果你还记得10-10-12的PTE,那么你对PAE分页一定不会陌生。低12位仍然是属性,唯一的区别就是,Page Base Address 由原来的 20 位变成了现在的 24 位,相对以前扩展了 4 位。

注意从 36-63 位这28位是保留位,不可用的。

这意味着,PTE 可以索引到的物理页页号由原来的 220 变成现在的 224,同样的,一个物理页大小是 4KB,那么PTE可以索引到的最大物理地址将会达到 224×212=64GB

其实,PAE 所做的事情,只是把线性地址的 4GB 虚拟空间打散到了物理地址的64 GB 空间中。这要怎么理解?看起来,应该像图5这样。


这里写图片描述
图5 PAE 分页与三段式分页对比。

图5中,不同颜色代表一个 4 KB 页(图中当然不可能画出太多的页,只是做演示)。可以看到,PAE分页的优势在于,它可以利用更大范围的物理地址。然而,能够映射的物理页总数还是不变(仍然只能使用 64GB 空间中的 4 个区域)。

PDE 和 PDPT 结构


这里写图片描述
图6 PDPT 结构

和三段式分页不同的是,PAE 分页多了一个 PDPT 表,也就是顶级目录表,它主要用来查找页目录的基址。因为 2-9-9-12 分页第一段索引只占用 2bit,所以最多可以索引 4 个页目录表。


这里写图片描述
图7 PDE 结构

基本上除了物理基址的位数增加了 4 bit 外,其它都和 10-10-12 分页没有什么变化。

总结

本篇主要介绍了PAE分页的原理,需要掌握的是 PDPT 顶级目录表的概念,它保存的是页目录的物理基址。

我知道你已经迫不急待的想试试了。之前我们使用的默认都是10-10-12分页模式。如何改成PAE分页模式呢?我们把时光倒流到第 0 篇《环境配置》那一篇,记得下面这张图吗?

你需要做的只是把红色框框里的参数 /execute=optin 改成 /noexecute=optin 就可以了。保存后重新启动你的虚拟机,就可以做 PAE 分页的实验啦。


这里写图片描述
图8 配置操作系统使用 PAE 分页

这里相当于留了一个小练习,小伙伴们,动起手来吧~!

0 0
原创粉丝点击