我正在编写有关 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 内核中。谁能指出我正确的方向?