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 分页方式转换方式:
- 根据 CR3 找到 Page Directory Pointer Table
- 根据一级索引在 Page Directory Pointer Table 中查询到 Page Directory
- 根据二级索引在 Page Directory 中查询到 Page Table
- 根据三级索引在 Page Table 中查询到普通 4KB 物理页
- 在物理页中查找第四段偏移。
根据以上描述,第一段索引其实就是 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 可以索引到的物理页页号由原来的
其实,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 分页
这里相当于留了一个小练习,小伙伴们,动起手来吧~!
- 26-PAE 分页
- 27-PAE分页(实验)
- 内存分页之PAE分页模式
- PAE
- PAE
- PAE
- PAE
- 物理地址扩展(PAE)分页机制
- 物理地址扩展(PAE)分页机制 .
- 使用WinDBG观察启用PAE后的分页机制
- 使用WinDBG观察启用PAE后的分页机制
- 内存管理:物理地址扩展(PAE)分页机制
- 使用WinDBG分析启用PAE后的分页机制
- 28-PAE分页下的PDT-PTT基址
- 使用WinDBG观察分页机制 ---- 实验前提(关闭PAE(物理地址扩展))
- 32位ubuntu物理地址扩展(PAE)分页机制及如何开启PAE支持4G以上内存(有时grub里面会让你选择)
- PAE Paging
- AWE & PAE
- php静态后期绑定
- java之String
- 基于UE4+ OpenCV 的混合现实 (webCamera, mix-reality, blue screen matting)
- 单链表操作
- 试试手
- 26-PAE 分页
- VxWorks开发板驱动程序学习之内部UART0
- startActivityForResult用法详解
- 在字符串中查找一个特定的字符最后一次出现的位置(即最右边那个)
- 【Unity3D 游戏开发之二】高级组件(GUI:LABEL、SCROLLVIEW、TEXTFIELD…等)入门篇
- jsp url 参数加密传送的终极解决方案
- PHP Tokenizer 学习笔记
- Android 获取网页的视频链接
- 【UNITY3D 游戏开发之三】NGUI && HUDText 的练习源码及资源