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 カーネルで、このメモリ インターリービングがどこで行われているか、既存のランキングがどのように行われているかを知りたいだけです。誰かが私を正しい方向に向けてもらえますか?