2

我正在编写有关 Linux 内核中 sysfs 虚拟文件系统的课程作业。作为设置 sysfs 虚拟文件系统的一部分,Linux 内核将物理内存组织成块,并进一步组织到此目录 sys/devices/system/memory 中的部分。在该目录中,内存块将表示为 memory0、meomory1、memory2 等。

在挖掘 Linux 内核之后,我发现内存被分成 128MB 块,然后进一步分成内存部分,并在此处的 C 文件中找到了执行此操作的代码:Memory.c。在上面的 C 文件中,方法 memory_dev_init() 具有将整个内存块拆分并划分为部分的逻辑(或者这就是我所理解的:))。根据我的教授的说法,Linux 中的内存被分成等级,等级包含交错的内存地址,如下所示:

   rank0: [0-512KB] [2048KB-2560KB] [4096KB-4608KB] ...
   rank1: [512KB-1024KB] [2560KB-3072KB] [4608KB-5120KB] ...
   rank2: [1024KB-1536KB] [3072KB-3584KB] [5120KB-...
   rank3: [1536KB-2048KB] [3584KB-4096KB] ...

作为我作业的一部分,我想将排名格式更改为这样,以便我可以获得连续的内存块:

   rank0: [0-512KB] [512KB-1024KB] [1024KB-1536KB]...
   rank1: [1536KB-2048KB] [2048KB-2560KB] [2560KB-3072KB]...
   rank2: [3072KB-3584KB] [3584KB-4096KB] [4096KB-4608KB]...
   rank3: [4608KB-5120KB] ...

所以我只想知道这种内存交错到底发生在哪里,以及现有的排名发生在当前的 Linux 内核中。谁能指出我正确的方向?

4

2 回答 2

0

查看 BIOS 中的内存交错设置。这是一篇描述如何在几个平台上执行此操作的帖子。

于 2013-11-01T12:44:48.923 回答
0

我不太确定,因为我看不到这个问题的任何实际用途,它确实是一种学术研究......你想要实现的目标可以通过完全禁用内存交错来实现。我想在你禁用交错之后,你也会在 sysfs 中看到正确的“图片”。

换句话说——不需要编码,只需更改配置。

于 2013-10-25T12:06:17.433 回答