どのLinuxカーネル関数が使用可能な物理メモリの量を読み取るのかを理解しようとしています。後でこの情報はどこに保存されますか?
答え1
カーネルが使用可能な物理メモリの量を知るだけでは不十分です。また、プロセッサのアドレス空間内のメモリがどこにあるかを知る必要があります。
これを達成する方法は、各ハードウェアアーキテクチャによって異なります。
x86システムでは、ファームウェアはチップセット固有の方法を使用してこの値を計算し、この情報をオペレーティングシステムのカーネルに提供します。
- 以前のバージョンのBIOSを使用しているシステムでは、BIOS機能を使用してこの情報を取得できます
INT 0x15, EAX = 0xE820
。このosdev.org Wikiの記事もっと学ぶ。 - デフォルトモードでUEFIファームウェアを使用するシステムでは、メモリマップはファームウェアによって次のようにブートローダ/オペレーティングシステムに提供されます。UEFIシステムテーブル、特に
GetMemoryMap
サービスを使用してUEFIブートサービステーブル
- 以前のバージョンのBIOSを使用しているシステムでは、BIOS機能を使用してこの情報を取得できます
他の多くのアーキテクチャでは、(初期)メモリマップは次のように提供できます。デバイスツリーデータシステムファームウェアが他の方法でカーネルを提供していない場合、またはファームウェアから効率的にインポートする前に、最初に一部のハードウェアモデル固有の情報が必要な場合は、カーネルに接続してください。