26

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

它能够映射的最大的物理地址,也只能是 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" role="presentation" style="position: relative;">220220 变成现在的 224" role="presentation" style="position: relative;">224224,同样的,一个物理页大小是 4KB,那么PTE可以索引到的最大物理地址将会达到 224×212=64GB" role="presentation" style="position: relative;">224×212=64GB224×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)

相关推荐

  • PAE真的能提升虚拟地址空间吗

    实际上,这是另一个不符合逻辑的推断. PAE(Physical Address Extensions,物理内存扩展)主要是用来提升处理器能够寻址的物理内存,和虚拟内存没有关系.在一台搭配了奔腾2处理器 ...

  • x86_64内存寻址 - 分页

    通过前面两个章节我们知道了实地址寻址和分段寻址,在这个章节我们将介绍分页寻址,在前面的文章我们知道,处理器访问内存的一个字节,首先将逻辑地址转换为线性地址,如果分页功能打开,那么线性地址会转换为最终的 ...

  • 误解:如果你想使用AWE,则必须先启用PAE

    我们先来看看AWE的一个官方解释,看看它到底是什么样一个玩意儿: 地址窗口扩展 (AWE) 是一组扩展,允许应用程序快速操作大于4GB的物理内存.某些数据密集型应用程序,例如数据库管理系统和科学与工程 ...

  • 《黑狗的大学生活》(26)

    黑狗的大学生活 2013-2017 图书馆开了  华师大中北校区的图书馆是逸夫楼,2013年,我们入校的时候它正在修缮,逸夫楼后面有个楼梯通往一个大厅,当时,里面卖着各种书籍和生活用品.我记得,开学第 ...

  • 《黑狗的大学生活》(序)

    黑狗的大学生活 2013-2017 从初三开始写日记 到如今整整8个年头 喜欢记录,以各种方式 因为害怕有一天 岁月把过去的日子封存在 一个叫做"很久很久以前"的瓶中 拿不出也记不 ...

  • 《黑狗的大学生活》(1)

    黑狗的大学生活 2013-2017 我来到了这个地方 2013年寒假,我参加了华东师范大学的自主招生.初次来到这个学校,便被高大有气势的校门震撼住了,我对同行的爸爸妈妈说:"明年我一定要考进 ...

  • 《黑狗的大学生活》(2)

    黑狗的大学生活 2013-2017 407 拖着笨重的行李箱,我跟随着人群,朝着我的宿舍走去.除了高中的学农.军训,大学也是我第一次对住宿生活的尝试.早在开学前,我就在新生群上认识了我的两位室友,也攀 ...

  • 《黑狗的大学生活》(3)

    黑狗的大学生活 2013-2017 13特教 大学的班级无论是在形式上还是名称上,都显示出与过去我们所习惯的班级有着很多不同. 首先是形式,大学的班级只是形式上的一个整体,因为我们28个人进了同一个专 ...

  • 《黑狗的大学生活》(4)

    黑狗的大学生活 2013-2017 上了大学还是被大学上了? 刚开学的几天没有课,学校把这段空余的时间称为"适应期".在这段适应期里,我过得悠哉悠哉的--逛街买吃的穿的用的.早上起 ...

  • 《黑狗的大学生活》(5)

    黑狗的大学生活 2013-2017 考试周 时间在不知不觉中过去了--以前这句话通常是被用来增添文采的,什么"不知不觉"啊,我看是"后知后觉"吧.然而,现在,这 ...

  • 《黑狗的大学生活》(6)

    黑狗的大学生活 2013-2017 1314 大学里的第一个元旦跨年因为有了大学英语的考试而变得忧心忡忡,12月31日晚上6点,我们"故作镇定"地走进田家炳的教室,带着我们的收音机 ...

  • 《黑狗的大学生活》(7)

    黑狗的大学生活 2013-2017 带着室友见家长 随着期末考试的结束,回家的脚步也迫不及待起来.第一个没有寒假作业的开始,是多么值得在弟弟妹妹中炫耀一番的!令我更加激动的还有!!!我亲爱的室友要跟我 ...

  • 《黑狗的大学生活》(8)

    黑狗的大学生活 2013-2017 第一份家教 人生的第一桶正式意义上的"金"应当是做家教赚来的,大一第二学期初,一次偶然的机会室友介绍我一份家教--高中会考地理辅导老师.说实话, ...