ふと、「ARM版のOSをx86のPCにインストールしたらどうなるんだろう?」などの疑問が浮かび調べてみました。
UEFI、ブートローダー、OSともに実行の仕方は通常のプログラムと同様「CPUに命令を渡す」だけで行われるのですが、プログラムが書き込まれている場所が異なります。
UEFIはマザーボードのROMに書き込まれていますが、ブートローダーやOSはストレージに書き込まれています。
なお、UEFIの仕様はかなりはっきりと定まっていて、公開されています。1私はちゃんと読めていませんが…。
この前提で、CPUの命令セットについて考えると以下のようになります。
- CPUが対応する命令セットはあらかじめ決まっている。
- 起動直後最初に読み出されるプログラムである2UEFIは、CPUの対応する命令セットの範疇で命令を発行してブートローダーに制御を渡す。(PC出荷時に設計されている)
- ブートローダーはCPUの命令セットに合うようにビルドしてインストールされている。※CPUの命令セットの範疇であるかのチェックは実行時には行われない。もし範囲外だった場合例外が発行され、起動が止まる。)
- ブートローダーはOSカーネルに制御を渡す。OSカーネルはCPUの命令セットに合うようにビルドしてインストールされている。
- なお、ブートローダーもOSカーネルも、拡張命令セットを変に使わないようにビルドされている。
以上です。
-
厳密にはそうとも限らないらしい。 ↩
