ページ更新: 2004-03-07 (日) (5552日前)

kernel config の CONFIG_HIGHMEM4G / CONFIG_HIGHMEM64G / CONFIG_NOHIGHMEMについてのメモ。

なんとなく、EMSやUMBを思い出すのだよな。

参考文献

  • 詳解LINUXカーネル第2版
    • 第2章 メモリアドレッシング
    • 第7章 メモリ管理

以下、参考文献より、該当部分を引用。

  • 2.4.6 物理アドレス拡張ページング機構
    • カーネルは1GB以上のRAMを直接参照することができません 。
  • 2.5.5 カーネルのページテーブル
    • 最終的なカーネルページテーブル(RAMサイズが896MB未満の場合)
      • メモリが896MB未満のときは、32ビット長の物理アドレスですべてのメモリを指し示すことができます。また、物理アドレス拡張(PAE)機構を有効にする必要もありません。
      • (脚注) リニアアドレスの最後の128MBは、いくつかの種類のメモリマッピングのために残しておきます。(中略)このため、RAMをマップするために使用できるカーネルアドレス領域は1GB-128MB=896MBとなります。
    • 最終的なカーネルページテーブル(RAMサイズが896MB以上4096MB未満の場合)
  • 2.6.6 固定マップ用リニアアドレス
  • 7.1.2 メモリゾーン
    • ZONE_DMA 先頭から16MBまで/ZONE_NORMAL 16MB〜896MBまで/ZONE_HIGHMEM 896MB以降
  • 7.1.6 高位メモリのページフレームのカーネルマッピング
    • 896MB境界を越えたところにあるメモリフレームは、0xc0000000番地以降のカーネルリニアアドレス空間にマッピングされません。このため、カーネルはそれらのメモリに直接あくせすすることができません。
  • kernelのconfigでは:
    • CONFIG_NOHIGHMEMのとき、896MBまで使える。