OS理解への道 その2:OSの起動

プログラミング知識
スポンサーリンク

そもそも、OSがどうやって起動するのか。BIOSとOSの関係性は何なの?というのが長年の疑問でした。

今回は、OS起動までの流れを整理していきます。

OS起動までの流れ

パソコンの電源が入ってからOSが起動するまで、次のような順番で起動されます。

  1. BIOS起動
  2. ブートローダ起動
  3. 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・ブートローダがなぜ必要なのかは理解できました。

コメント

タイトルとURLをコピーしました