メモリマップ

コンピュータサイエンスにおいて、メモリマップとは、メモリがどのように配置されているかを示すデータ構造(通常はメモリ自体に格納される)です。「メモリマップ」という用語は、文脈によって異なる意味を持ちます。

  1. これは、連想メモリを使用する最も高速かつ柔軟なキャッシュ構成です。連想メモリは、メモリワードのアドレスと内容の両方を保存します。
  2. 一部のコンピュータでは、ブートプロセスにおいて、ファームウェアからメモリマップが渡され、オペレーティングシステムカーネルにメモリレイアウトを指示することがあります。メモリマップには、メモリの総サイズ、予約済み領域に関する情報が含まれており、アーキテクチャ固有のその他の詳細情報も提供される場合があります。
  3. 仮想メモリ実装およびメモリ管理ユニットでは、メモリ マップはページ テーブルまたはハードウェア レジスタを参照します。これは、特定のプロセスの仮想メモリ レイアウトと、そのスペースが物理メモリ アドレスとどのように関連しているかとの間のマッピングを格納します。
  4. ネイティブデバッガプログラムにおいて、メモリマップとは、ロードされた実行ファイル(またはライブラリファイル)とメモリ領域とのマッピングを指します。これらのメモリマップは、メモリアドレス(関数ポインタなど)を実際のシンボルに解決するために使用されます。

PC BIOS メモリマップ

IBMパーソナルコンピュータおよび互換機BIOSは、オペレーティングシステムまたはアプリケーションがメモリレイアウトを取得するために使用できる一連のルーチンを提供します。利用可能なルーチンには以下が含まれます。

BIOS機能: INT 0x15, AX=0xE801: [ 1 ]

このBIOS割り込み呼び出しは、64MB以上の構成のメモリサイズを取得するために使用されます。 1994年8月23日以降のAMI BIOSでサポートされています。呼び出し元はAXを0xE801に設定し、int 0x15を実行します。何らかのエラーが発生した場合、ルーチンはCF(キャリーフラグ)を1にセットして戻ります。エラーがない場合、ルーチンはCFをクリアして戻り、レジスタの状態は以下のようになります。

登録する値の説明
イーアックス1M〜16M(KB)の拡張メモリ。(最大値:0x3C00 = 15360KB)。
EBX16M を超える 64K ブロックの数。
ECX構成されたメモリは 1M ~ 16M (KB) です。
EDX16M を超える構成された 64K ブロックの数。

BIOS機能: INT 0x15, AX=0xE820 - システムメモリマップの取得: [ 2 ]

入力:

登録する値の説明
イーアックス0x0000E820
EBX継続値、またはマップの先頭から開始する場合は 0x0。
ECX結果のバッファのサイズ(20 バイト)。
EDX0x534D4150 ('SMAP' の ASCII)
ES:DI結果のバッファのセグメント:オフセット位置。

SMAP バッファ構造:

オフセットサイズ値の説明
0QWORD(8バイト)EBX によって参照されるメモリ マップ領域のベース アドレス。
8QWORD(8バイト)長さ(バイト単位)。
16DWORD(4バイト)アドレス範囲のタイプ。

使用方法:オペレーティングシステムはメモリ内にSMAPバッファ(20バイト)を割り当てます。次に、「入力」表に示されているようにレジスタを設定します。最初の呼び出しでは、EBXを0に設定します。次のステップはINT 0x15を呼び出します。エラーがない場合、割り込み呼び出しはCFをクリアし、バッファにメモリマップの最初の領域を表すデータが格納された状態で戻ります。EBXはBIOSによって更新されるため、OSがルーチンを再度呼び出すと、次の領域がバッファに返されます。すべてが完了すると、BIOSはEBXを0に設定します。

参照

参考文献