そもそも、OSがどうやって起動するのか。BIOSとOSの関係性は何なの?というのが長年の疑問でした。
今回は、OS起動までの流れを整理していきます。
OS起動までの流れ
パソコンの電源が入ってからOSが起動するまで、次のような順番で起動されます。
- BIOS起動
- ブートローダ起動
- OS起動
BIOS起動
まずはBIOSが起動されます。
BIOSはマザーボード内のROMに書き込まれているS/Wです。必ず決まったところに保存されていて、電源が入るとCPUはROMからBIOSをレジスタに読み込みます。
レジスタとはCPU内にある小さなメモリです。レジスタはとても小さいので、OSのような大きなS/Wは読み込めません。これがBIOSを起動する必要がある理由になります。
BIOSは基本的なH/Wの初期化などを行うため、H/Wメーカによって提供されます。最近では、UEFIという仕様で作られたUEFI BIOSが一般的で、単純にUEFIと呼びます。対して、従来のBIOSはレガシーBIOSと呼ばれることが多いようです。
UEFI BIOSはストレージ内から実行可能なファイルを探して、メインメモリに展開します。そしてブートローダが実行されます。
ブートローダ起動
UEFI BIOSが実行するプログラムをUEFIアプリケーションと呼び、広義ではブートローダと呼ばれます。
ブートローダの仕事は、CPUの動作モードを変更したり、PCIデバイスを設定したりしますが、最も重要な仕事はOSをメインメモリに読み込み、起動することです。
UEFIアプリケーションはUEFI BIOSの機能を引き継ぎ、使用することができます。UEFIアプリケーションが介在し、あれこれ処理をしてくれることで、OSはUEFI BIOSに依存しなくてよくなります。
もちろんUEFIアプリケーションなしで、UEFI BIOSからOSを起動してもよいです。Linuxではカーネルファイルの先頭を細工し、UEFI BIOSから起動できるEFIファイルとして認識され起動できるEFI boot stub機能があります。
OS起動
ブートローダからOSを起動します。
OSを起動するとは、単純にOSで最初に実行される関数をブートローダが実行しているだけになります。OSもS/Wですので、何のことはなく関数を実行しているだけでした。この関数のことをエントリポイントと呼びます。
ちなみにUEFI BIOSの機能を、OSに継承することも可能なようです。
まとめ
OSが起動されるまでの大まかな流れをまとめてみました。実際には様々な処理が行われていますが、BIOS・ブートローダがなぜ必要なのかは理解できました。
コメント