x86的物理内存地址到DRAM映射信息

use*_*566 5 x86 memory-management linux-kernel

我想知道是否有关于如何确定两个给定物理内存地址是否在同一存储库中的信息。我正在研究x86多核体系结构,需要在任务级别上破解内存访问性能。

在此先感谢/彭

Jef*_*lin 3

编辑:事实证明它比我意识到的更复杂。正如 Mark Seaborn 和 plafratt 在评论中指出的那样,下图只是如何实现物理地址映射的示例。进一步阅读证实内存控制器可以通过多种不同的方式完成此映射。请阅读 Mark 的答案中链接的优秀文章以获取更多详细信息,并且为了进一步阅读,本文从程序员的角度提供了一些额外的见解。我将原来的答案留在这里,因为它提供了一个实际的例子(编辑说这只是一个例子)。

——原答案——

以下是如何映射 32 位物理地址的示例*:

位 12-0 标识 8KB 页内的字节。
位 16-13 标识系统应将 16 个内存通道中的哪一个用于该地址。
位 20-17 标识将在 16 个存储体中的哪一个中找到地址。
位 32-21 标识存储体中的哪一行被访问。

在此输入图像描述

因此,如果您有两个物理地址,您应该能够比较位 17-20 以确定它们是否位于同一存储体中。

*信用:http ://www.futurechips.org/chip-design-for-all/what-every-programmer-should-know-about-the-memory-system.html

  • 与您链接的页面上的图形相关的文本表示,这只是“如何分割 4 GB(32 位)物理地址的实际示例”。您是否有理由相信这就是任何真实系统布置其地址位的方式? (2认同)
  • 明确指出物理地址在 x86 系统上的映射方式是错误的。该图是真实系统将使用的内容的粗略近似。确切的位范围取决于系统及其安装的 DRAM。此外,现在物理地址通常超过 32 位。 (2认同)