科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SQL Server 2000内存管理内幕(2)

SQL Server 2000内存管理内幕(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在这篇专栏里,我们将从开发者的角度来探讨SQL Server内存管理内幕。就是说,我们将讨论SQL Server使用API和操作系统功能管理内存的方式及其工作原理。

作者: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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章