![BIOS は利用可能な RAM の量をどのように決定するのでしょうか?](https://rvso.com/image/1466423/BIOS%20%E3%81%AF%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%AA%20RAM%20%E3%81%AE%E9%87%8F%E3%82%92%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E6%B1%BA%E5%AE%9A%E3%81%99%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
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 は、たとえば 1 GB などの使用可能な RAM の量をどのように決定するのでしょうか?
メモリコントローラのデータシートに記載されている方法を使用します(ノースブリッジ)。
ほとんどの BIOS は、インストールされている RAM の種類を検出し、各メモリ モジュールのサイズを検出し、検出された RAM を使用するようにチップセットを構成するまで、RAM を使用できません。
これらはすべてチップセット固有の方法に依存し、通常はメモリ コントローラー (ノースブリッジ) のデータシートに記載されています。
このプロセス中、RAM はプログラムの実行に使用できません。BIOS は最初は ROM から実行されているため、RAM チップを使用して必要なゲームをプレイできます。ただし、他のプログラム内からこれを行うことは完全に不可能です。
ソースメモリの検出 (x86)