在 Windows XP 中将内存地址映射到物理模块
Posted
技术标签:
【中文标题】在 Windows XP 中将内存地址映射到物理模块【英文标题】:Mapping of memory addresses to physical modules in Windows XP 【发布时间】:2010-04-21 11:59:57 【问题描述】:我计划在具有双处理器、基于 Intel 的 Nehalem 微架构和三通道 RAM 的工作站上运行 32 位 Windows XP。即使 XP 被限制为 4 GB 的 RAM,我的理解是它可以在安装超过 4 GB 的情况下运行,但只会暴露 4 GB(或略少)。
我的问题是:假设 6 GB 的 RAM 安装在六个 1 GB 的模块中,Windows 实际会将哪个物理 4 GB 映射到它的地址空间?
特别是:
它会使用所有六个 1 GB 模块,利用所有内存通道吗? (我的猜测是肯定的,并且到组内各个模块的映射发生在硬件中。)
它将 2 GB 的地址空间映射到两个 NUMA 节点中的每一个(因为每个处理器都有自己的内存接口),还是一个处理器可以快速访问 3 GB RAM,而另一个处理器只有1 GB?
谢谢!
【问题讨论】:
可能更多是 serverfault (serverfault.com) 或超级用户 (superuser.com) 的问题 感谢您的建议!我将在 superuser.com 上发布此内容。不过,我想我也会把它留在这里,因为这个问题是从编程和优化的角度提出的,并且可能对其他程序员来说很有趣。 如果启用 PAE,超过 4 GB 的内存将是可寻址的。更高的内存可能会慢一些,单个进程仍然不能使用超过 4 GB。 据我了解,Windows XP 32 位是限制为 4 GB 的软件,即使启用了 PAE(从 Service Pack 1 起),恐怕这无济于事。 【参考方案1】:此问题已在 SuperUser 得到解答。因为这里没有其他回复,所以我在回复我自己的问题,以便可以轻松找到相关信息。
自从提出这个问题后,我还遇到了 Mark Russinovich 的 this blog post,他解释了 Windows XP 内核如何处理内存。
总之,似乎发生的事情是内核,即使它支持 PAE,也会将所有物理内存地址截断为 32 位,这意味着只有最低的物理 4 GB RAM使用。这又由硬件映射到内存模块,并且对应于第一个模块三元组的全部(总共 3 GB)和第二个三元组的三分之一(分布在其所有三个模块中 - 总共 1 GB) .
因此,所有内存通道都将被利用,但 NUMA 节点之间的内存量不会平衡。
【讨论】:
以上是关于在 Windows XP 中将内存地址映射到物理模块的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核 内存管理内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )