扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:Ken Henderson 来源:Microsoft Corporation 2007年9月11日
关键字: 内存管理 SQL Server SQL Server 2000 数据库
Large-Address-Aware Executables
在/3GB支持加入Windows之前,应用程序无法使用指针的最高位,User mode的应用程序只能够对32位指针的前31位表示的地址空间进行存取。对于剩下的1位,一些聪明的开发者不希望浪费进程空间里的这1个位,把它用于了其它的目的,例如用于标识那些应用程序特定的地址分配类型的指针。这在引入/3GB后带来一个难题,因为这种类型的应用程序无法区分引用2GB以上内存的指针,和那些引用2GB以下内存但是最高位由于其它原因而被设置的指针。基本上,使用/3GB启动机器,会使这样的应用程序崩溃。为了解决这个问题,微软在Win32 PE文件格式(定义Windows下可执行文件Exe和Dll结构的格式)的Characteristics字段加入一个新标识位的支持,用于指示应用程序是否支持大的寻址能力。设置可执行文件头中Characteristics字段的第32位启用IMAGE_FILE_LARGE_ADDRESS_AWARE标识位。通过设置应用程序头的这个标识位,表明应用程序能够处理那些最高位被设置的指针,不会由于这个位带来任何多意性。当设置了这个标识位,在正确的Windows版本上使用/3GB选项启动,系统将为进程提供一个私有的扩展user mode地址空间。你可以使用DumpBin、ImageCfg等可以分析可执行文件头的工具,查看应用程序是否启用了这个标识位。Visual C++通过/LARGEADDRESSAWARE连接开关提供对IMAGE_FILE_LARGE_ADDRESS_AWARE的支持。SQL Server启用了这个标识位,因此当你在正确的Windows版本上使用/3GB开关启动,系统将扩展SQL Server的user mode地址空间。
注意:Windows在进程启动时检查IMAGE_FILE_LARGE_ADDRESS_AWARE标识,忽略Dll的标识。对那些最高位被设置的指针,dll代码必须能够正确处理。
Physical Address Extension
从Pentium Pro开始,Intel处理器提供一种叫做Physical Address Extension(PAE)的内存映射模式。PAE支持高达64GB的物理内存存取。PAE模式下,内存管理单元(Memory Management Unit - MMU)仍然实现了页目录条目(Page Directory Entries - PDEs)和页表条目(Page Table Entries - PTEs),但是在这个之上有一个新的层级:页目录指针表(Page Directory Pointer Table)。PAE模式下系统能够寻址更大的内存,因为PDEs和PTEs为64位宽,是之前标准宽度的两倍,而并不是通过PAE模式下的页目录指针表实现。页目录指针表把这些高存储容量的表和索引管理起来。使用PAE模式需要一个特殊版本的Windows内核,在Windows 2000及后续版本中均有提供,单处理器机器上位于Ntkrnlpa.exe中,多处理器机器上位于Ntkrnlpamp中。和/3GB、/USERVA一样,在BOOT.INI文件中添加/PAE启用PAE模式。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者