Linuxカーネルのメモリーマップ

Pocket

Linuxカーネルが、メモリーをどのように使っているのか少し検索してみました。
解説サイトを見てみると、0から3GB(0xC0000000)まではユーザー空間、3G(0xC0000000)から4GBまではカーネル空間で、3GB以降は物理メモリの0から1GBまでにマップされているとあります。
また、最近のカーネルではゾーンにより使い方は異なり、
ZONE_DMA 0 - 16MB
ZONE_NORMAL 16MB - 896MB(0x38000000)
ZONE_HIGHMEM 896MB -
の3つに分かれている。ZONE_HIGHMEM領域はZONE_NORMALにマップされて使われる。x86では、0 - 128MB(0x08000000)まではカーネルのデータの保存に使われる。
のだそうです。
ところが、Linux.imgのログを調べて、どんなアドレスを使っているのか見てみると、0x90000000以降のアドレスが出てきて、全然3GB以降ではないのです。
なんか変だと思い、RedHat 7.2も調べてみました。
RedHat 7.2 Linux 2.4.9-13 0xC0000000以降
RedHat 9 Linux 2.4.21 0x90000000以降
RedHat 7.2は、解説の通りになっています。でも、RedHat 9は違うのでした。カーネルが2.4系列なら大きな変更はないものと思っていましたが、メモリの扱い方が違うのですね。それとも、RedHat 9はそういうオプションで作られているのでしょうか。
もっと調べてみると、Fedora Core 4もレスキューCDは、0xC0000000だけど、インストール済みのものは0x90000000だったりする。謎だ。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください