BIOS は利用可能な RAM の量をどのように決定するのでしょうか?

BIOS は利用可能な RAM の量をどのように決定するのでしょうか?

BIOS がリアルモードで実行される 16 ビット プログラムであり、このモードでは 1 MB しかアドレス指定できない場合、BIOS はどのようにして使用可能な RAM の量 (たとえば 1 GB) を決定するのでしょうか。

答え1

BIOS はリアルモードで実行される 16 ビット プログラムであり、このモードでは 1MB のみをアドレス指定できます。

これは誤りです。

16 ビット リアル モードでは、プロセッサのメモリが 1 MB に制限されません。

x86 プロセッサはリアル モードで開始し、デフォルトで 16 ビットの 8086 命令セットになるのは事実ですが、80286 命令セットには拡張機能があります。8086 命令の前にバイト 0x67 を付けると、その命令は 32 ビット レジスタにアクセスでき、2 32バイト、つまり 4 GiB のメモリにアクセスできます。

64ビットプロセッサを使用している場合、プロセッサはPAE(物理アドレス拡張) により、プロセッサは 2 52バイトのメモリにアクセスできるようになります。これは、現代のマザーボードに物理的にインストールできる容量を超えています。

ソースBIOSが拡張メモリサイズ全体を検出する方法


BIOS は、たとえば 1 GB などの使用可能な RAM の量をどのように決定するのでしょうか?

メモリコントローラのデータシートに記載されている方法を使用します(ノースブリッジ)。

ほとんどの BIOS は、インストールされている RAM の種類を検出し、各メモリ モジュールのサイズを検出し、検出された RAM を使用するようにチップセットを構成するまで、RAM を使用できません。

これらはすべてチップセット固有の方法に依存し、通常はメモリ コントローラー (ノースブリッジ) のデータシートに記載されています。

このプロセス中、RAM はプログラムの実行に使用できません。BIOS は最初は ROM から実行されているため、RAM チップを使用して必要なゲームをプレイできます。ただし、他のプログラム内からこれを行うことは完全に不可能です。

ソースメモリの検出 (x86)

関連情報