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

时间:2014-05-02 12:53:48

标签: memory-management linux-kernel x86

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

提前致谢 /彭

2 个答案:

答案 0 :(得分:2)

编辑:事实证明它比我意识到的要复杂得多。正如Mark Seaborn和plafratt在评论中指出的那样,下图只是一个如何实现物理地址映射的例子。进一步阅读确认内存控制器可以以任何数量的不同方式进行映射。阅读Mark的答案中链接的优秀文章,了解更多详情,为了进一步阅读,this article从程序员的角度提供了一些额外的见解。我在这里留下原来的答案,因为它提供了一个实际的例子(编辑说这只是一个例子)。

- 原始答案 -

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

位12-0识别8KB页面内的字节 第16-13位识别系统应该为该地址使用的16个存储信道中的哪一个 第20-17位确定将在哪16个银行中找到该地址 位32-21识别银行中的哪一行被访问。

enter image description here

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

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

答案 1 :(得分:2)

我已经为使用Sandy Bridge CPU的一台机器反向设计了DRAM地址映射。

以下是我的文章:http://lackingrhoticity.blogspot.com/2015/05/how-physical-addresses-map-to-rows-and-banks.html