Windows PAE 寻址

PAE 就是物理地址扩展。我们常规的寻址方式是之前的将虚拟地址化为10 10 12的方式来寻址页目录,页表,页偏移,但是在开始PAE之后的寻址方式发生了改变,将32位的虚拟地址转化成 2 9 9 12的方式来寻址:

理论就不赘述了,和普通的寻址方式没有太大的差别,具体可以参考之前的文章:x86虚拟地址到物理地址的学习,主要的差别就是由二级页表衍生成三级页表。

31~30: 页目录指针表的索引

21~29: 页目录表索引

12~20: 页表索引

0~11:   页内偏移

下面以一个简单的例子来学习:

int _tmain(int argc, _TCHAR* argv[])
{
    char szName[20] = "HelloWorld";
    printf("szName:%x\n",szName);
    getchar();
    return 0;
}

打印出的地址是0x12ff4c,我们接下来就在物理地址中找到我们的“Hello World”

12 f f4c
页目录指针表的索引          页目录表索引            页表索引                    页内偏移
            00                  0 0000 000          1 0010 1111           1111 0100 1100
             0                         0                        12f                           f4c

cc.exx进程的页表目录指针的物理地址是10b00200,而目标目录指针索引为0,所以就是5a8a4001,因此页目录表的物理首地址就是5a8a4000。

而我们的页目录表索引也为0:

页表的物理页首地址就是5a5b3000,而页表索引是0x12f 因此页表项为5a5b3000+0x12f*8:

所以我们的物理页首地址就是5a8b7000,而页内偏移是:f4c,因此szName的物理地址为5a8b7f4c:

时间: 2024-12-21 03:26:12

Windows PAE 寻址的相关文章

Windows API参考大全新编

书名:新编Windows API参考大全 作者:本书编写组 页数:981页 开数:16开 字数:2392千字 出版日期:2000年4月第二次印刷 出版社:电子工业出版社 书号:ISBN 7-5053-5777-8 定价:98.00元 内容简介 作为Microsoft 32位平台的应用程序编程接口,Win32 API是从事Windows应用程序开发所必备的.本书首先对Win32 API函数做完整的概述:然后收录五大类函数:窗口管理.图形设备接口.系统服务.国际特性以及网络服务:在附录部分,讲解如何

转 警惕“32位Win7装4G内存”的谬论

随着电脑升级换代的加速4GB内存已经成为主流,但是由于缺乏计算机基础知识很多人在安装系统的时候选择了32位Win7装4G内存,其结果是4GB内存不能完全识别,通常显示为3GB或者3.5GB之类.于是很多人使用了一款叫做Ready for 4GB的软件.该软件号称可以破解windows PAE文件来突破内存极限,却不知如此使用将系统推上了不稳定的边缘. 为何32位Win7不可识别4G内存 32位系统不能直接识别4GB以上内存的限制不是简单的在windows PAE上,而是在32位这个大逻辑基础上的

如何打开Windows Server 2003 内存寻址扩展

本文介绍了如何在系统内存大于4G的情况下,让windows2003 Advanced Server支持大内存的方法: 由于Windows2003 32bit是32位操作系统,当服务器配备内存高达4G时将出现系统属性中无法发现的问题,因此必须打开windows2003 Server内存寻址扩展功能:打开内存寻址扩展后,Windows2003 Server将最多可以支持8G内存. 打开此功能功能方法如下: 1.首先确认系统能认到的内存数目,如果您的机器不止4G的系统内存,请继续下面的步骤 2.单击开

[转载]PAE ( Physical Address Extension )

转自:http://blog.chinaunix.net/uid-20384269-id-1954602.html 首先,内存访问和管理是一个跨越应用程序,操作系统,硬件平台的一个复杂过程,不能单纯的讲32bit系统就支持4G内存,从而认为这个过程只是OS和内存两者之间的关系 理论上:32位系统,32bit的地址总线位数,寻址空间2^32B=4GB. 64位系统,寻址空间2^64. 至于在实际应用环境中,对于有4G物理内存而OS最多只能识别3G的情况,主要是主板的问题,丢掉的内存被PCI设备占用

深入解析Windows操作系统之总体架构

(一)需求和设计目标 Windows NT设计小组在项目开始之初选择了下面的设计目标: (1)扩展性:编写的系统代码必须能够随着市场需求的变化而自如增长和改变. (2)可移植性:系统必须能运行在多种硬件体系架构上,必须能根据市场的需要,相对容易地迁移到新的体系架构上. (3)可靠性和健壮性:系统应该能够保护自己,不会因内部的故障和外部的篡改而不能工作.应用程序应该无法伤害操作系统或其他应用程序. (4)兼容性:虽然Windows NT应该扩展已有的技术,但是它的用户界面和API应该与老版本的Wi

windows虚拟内存管理

内存管理是操作系统非常重要的部分,处理器每一次的升级都会给内存管理方式带来巨大的变化,向早期的8086cpu的分段式管理,到后来的80x86 系列的32位cpu推出的保护模式和段页式管理.在应用程序中我们无时不刻不在和内存打交道,我们总在不经意间的进行堆内存和栈内存的分配释放,所以内存是我们进行程序设计必不可少的部分. CPU的内存管理方式 段寄存器怎么消失了? 在学习8086汇编语言时经常与寄存器打交道,其中8086CPU采用的内存管理方式为分段管理的方式,寻址时采用:短地址 * 16 + 偏

[百度空间] [转]将程序移植到64位Windows

from : http://goooder.bokee.com/2000373.html (雷立辉 整理) 简介:本文对如何将32位Windows程序平滑的支持和过渡到64位Windows操作系统做出了一个简单而系统的介绍.包括对于64位操作系统的版本,编程模型,一些移植原则甚至包括对驱动程序的移植原则的介绍. 作者介绍:系统分析员,现在在北京工作.作者的blog:http://goooder.blogchina.com. 前言: 或许大家还对32位的CPU及操作系统使用还是觉得非常的合乎日常需

windows内存详解(一) 全面介绍Windows内存管理机制及C++内存分配实例

十分感谢MS社区的帖子,讲得很好~ http://social.technet.microsoft.com/Forums/zh-CN/2219/thread/afc1269f-fe08-4dc7-bb94-c395d607e536 (一):进程空间 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本文目的: 对Windows内存管理机制了解清楚,有效的利用C+

深入理解Linux内核day01--内存寻址

内存寻址 内存地址: 逻辑地址: 段+偏移量 组成 线性地址: 可用来表达4GB的地址 (也称虚拟地址) 物理地址: 用于内存芯片级内存单元寻址.他们与微处理器地址引脚发送到内存总线上的电信号相对应 内存控制单元(MMU) 通过一种称为分段单元的硬件店里把一个逻辑地址转换为线性地址,接着通过分页单元的硬件电路把线性地址转换成一个物理地址. 分段单元              分页单元 逻辑地址---------->线性地址--------------->物理地址 硬件中的分段: 从80286模