BIOS ROM が PC のアドレス空間に存在する必要があるのはなぜですか?

BIOS ROM が PC のアドレス空間に存在する必要があるのはなぜですか?

x86 PC が起動すると、マザーボード上の不揮発性メモリに保存されている BIOS と呼ばれるプログラムの実行が開始されます。BIOS の役割は、ハードウェアを準備し、制御をオペレーティング システムに渡すことです。ソース付録 B. ラボセッションからここセクションPCの物理アドレス空間次のマッピングが表示されます。
+------------------+ <- 0x00100000 (1MB)
| BIOS ROM |
+------------------+ <- 0x000F0000 (960KB)

BIOS がそれを使用する必要はなぜあるのでしょうか。そうでない場合、その用途は何でしょうか。冒頭で述べたように、マザーボード上の不揮発性メモリに保存されている BIOS プログラムとどのような関係があるのでしょうか。ラボ リソースでは、設計は qemu(x86 エミュレータ) 用であると記載されていますが、osdev [[http://wiki.osdev.org/Memory_Map_%28x86%29#ROM_Area]メモリレイアウトについても同じことが書かれています。ちょっと混乱しています。

答え1

DOSとその他リアルモードオペレーティング システムは BIOS サービスを多用していました。x86 プロセッサのリアル モードは 2^20 = 1Mb のアドレス空間にバインドされているため、i8086 システムのベンダーは、BIOS をアドレス空間の上限 (最近の上位半分のカーネルが仮想メモリを範囲の末尾にマッピングしているのと同じように)、つまり 0xA0000 以上にマッピングする必要があると決定しました。

保護モードにより、この予約メモリはアドレス空間のギャップになりました。保護モードのプログラムは、大幅なハックを行わない限り BIOS から関数を呼び出すことができず、保護モードとロング モード (すべての最新 OS が実行されるモード) では使用できなくなりますが、RM から PM へのソフトウェアの転送は迅速ではなかったため、Intel のエンジニアは、保護モード環境内のサンドボックスで古いリアル モード プログラムを実行できる v8086 モードという逃げ道を残しました (たとえば、OS/2 は v8086 モードを頻繁に使用し、Windows システムの DOS エミュレーションもこの機能に依存しています)。ただし、互換性のためには依然として BIOS サービスが必要です。

このメモリは、VGA端末/グラフィックス出力などの一部のタスクでは保護モードでも使用されます(端末のメモリは0xB8000にあり、コンソールフォントもそこで調整される可能性があり、VGAグラフィックスフレームバッファは0xA8000にあると記憶しています)。このメモリは、次のようなAPIにも使用されることがあります。VBE3 についてただし、0xA0000 での BIOS マッピングは、主に下位互換性の問題です。これを置き換える取り組みが行われています。BIOS を現代的に再考した UEFI が、現在着実に人気を集めています。

結論:0xA0000のBIOSマッピングは、主に下位互換性の問題です。UEFI などのより現代的なブート環境に置き換える取り組みもあります。

答え2

私の知る限り、これには主に歴史的な理由があります。プログラムはチップ上に保存されますが、それを実行するには、コードは RAM (BIOS シャドウ) にロードされ、CPU はそこから命令を直接フェッチできます。これは、容量が最小限の安価なチップ上の圧縮された BIOS イメージに特に必要です。

「BIOS シャドウ」オプションを無効にすると、起動プロセスが遅くなったり、まれにもっと深刻な問題が発生することがあります。さらに、MS DOS などのオペレーティング システムでは、IO 用の BIOS ルーチン (HAL のようなもの) も使用していました。これは、今日のマルチスレッド OS で使用すると非常に遅く、安全ではないため、OS に制御を渡した後、その RAM 部分は非アクティブのままになります。

他のシステムでは、そのチップ上にカーネルが搭載されていました。たとえば、Commodore Amiga Kickstart は、フロッピーとしても利用可能でした。

関連情報