1 《Undocumented Windows 2000 Secrets》翻译 --- 第四章

第四章 探索 Windows 2000 的内存管理机制
翻译: Kendiv( fcczj@263.ne t)
更新: Sunday, February 13, 2005


声明:转载请注明出处,并保证文章的完整性,本人保留译文的所有权利 。

内存管理对于操作系统来说是非常重要的 。本章将全面的纵览 Windows 2000 的内存管理机制以及 4GB 线性地址空间的结构 。针对此部分内容,将解释 Intel i386 CPU 家族的虚拟内存寻址及其分页能力,重点将在于 Windows 2000 的内核是如何使用它们的 。为了帮助我们对内存的探索,本章提供了一对程序:一个内核模式的驱动程序,该驱动用来收集系统相关的信息,另一个是用户模式的应用程序,该程序将通过设备 I/O 控制来查询来自驱动程序的数据,并在控制台窗口中进行显示 。在剩余的章节中将重复使用“ Spy Driver ”模块来完成其他几个非常有趣的任务(这些任务都需要在内核模式下执行代码) 。请坚持阅读完本章的第一部分,因为它将直接面对 CPU 硬件 。不过,我仍然希望你不要跳过它,因为虚拟内存管理是一个非常令人兴奋的话题,理解它是如何工作的,将帮助你洞察复杂操作系统(如 Windows 2000 )采用的机制 。
Intel i386 内存管理机制
Windows 2000 内核大量使用 Intel i386 CPU 系列提供的保护模式下的虚拟内存管理机制 。为了更好的理解 Windows 2000 如何管理它的主内存,最低限度的熟悉 i386 CPU 的架构某些特点就显得尤为重要 。Windows 2000 是针对 Pentium 以上 CPU 设计的 。不过,这些新的处理器采用的内存管理模型仍源自针对 80386 CPU 的设计,不过当然会加入了一些重要的增强 。因此,微软通常标注 Windows NT 和 Windows 2000 的版本为 Intel 处理器“ i386 ”或者“ x86 ” 。不要对这些感到困惑,不管你在本书的什么地方遇到 86 或 386 ,请记住,这只是表示特定的 CPU 架构,而不是特定的处理器版本 。
基本的内存布局
Windows 2000 为应用程序和系统代码提供了非常简单的内存布局 。由 32 位的 Intel CPU 提供的 4GB 虚拟内存空间被分割为相等的两部分 。低于 0x80000000 的内存地址由用户模式下的模块使用,这包括 Win32 子系统,剩余的 2GB 保留给了系统内核 。Windows 2000 Advanced Server 还支持通常称为 4GT RAM Tuning 的另一种内存模型,该模型随 Windows NT 4.0 Server 的企业版引入 。该模型可提供 3GB 的用户地址空间,另 1GB 保留给内核,通过在 boot.ini 中添加 /3GB 选项来启用该模型 。
Windows 2000 Advanced Server 和 DataCenter 支持称为:物理地址扩展( Physical Address Extension, PAE )的内存选项,通过在 boot.ini 中加入 /PAE 就可允许这种内存方式 。该选项采用了某些 Intel CPU 的特性(如, Pentium Pro 处理器)以允许大于 4GB 的物理内存映射到 32 位的地址空间上 。在本章中,我将忽略这种特殊的设置 。你可阅读微软的基本知识文章 Q171793 (微软 2000c )、 Intel 的 Pentium 手册( Intel 1999a,1999b,1999c )以及 Windows 2000 DDK 文档(微软 2000f )来获取更多此方面的信息 。
内存分段和请求式分页
在深入 i386 架构的技术细节之前,想让我们回到 1978 年,那一年 Intel 发布了 PC 处理器之母: 8086。我想将讨论限制到这个有重大意义的里程碑上 。如果你打算知道更多,阅读 Robert L. 的 80486 程序员参考( Hummel 1992 )将是一个很棒的开始 。现在看来这有些过时了,因为它没有涵盖 Pentium 处理器家族的新特性;不过,该参考手册中仍保留了大量 i386 架构的基本信息 。尽管 8086 能够访问 1MB RAM 的地址空间,但应用程序还是无法“看到”整个的物理地址空间,这是因为 CPU 寄存器的地址仅有 16 位 。这就意味着应用程序可访问的连续线性地址空间仅有 64KB ,但是通过 16 位段寄存器的帮助,这个 64KB 大小的内存窗口就可以在整个物理空间中上下移动, 64KB 逻辑空间中的线性地址作为偏移量和基地址(由 16 位的段寄存器给处)相加,从而构成有效的 20 位地址 。这种古老的内存模型仍然被最新的 Pentium CPU 支持,它被称为:实地址模式,通常叫做:实模式 。

推荐阅读