Linux カーネルでmem_map
は、すべての「構造体ページ」記述子を保持する配列です。これらのページには、highmem を動的にマッピングするための lowmem の 128MiB メモリが含まれています。
lowmem サイズは 1GiB なので、mem_map
配列には 1GiB/4KiB=256KiB エントリしかありません。各エントリ サイズが 32 バイトの場合、mem_map
メモリ サイズ = 8MiB です。しかし、mem_map
すべての 4GiB 物理メモリをマップするために使用できる場合 (x86-32 で利用可能な物理メモリが非常に多い場合)、mem_map 配列は 32MiB を占有し、それは多くのカーネル メモリではありません (または間違っていますか?)。
私の質問は、そもそも間接的な highmem マッピングのためにその 128MiB を low で使用する必要があるのはなぜですか? 別の言い方をすれば、最大 4GiB の物理メモリ (利用可能な場合) をすべてカーネル空間に直接マップしないのはなぜでしょうか?
注: 上記のカーネル ソースに関する私の理解が間違っている場合は、修正してください。ありがとう!