BIOS (Basic Input/Output System)はコンピューターの電源を入れた後、一番初めに起動するプログラムです。BIOSはハードウエアを初期化したり、OSを読み込んだりしています。今回はBIOSの働きについてできるだけ簡単に解説していきます。
BIOSは起動の第一歩
パソコンが起動してから操作できるようになるまでコンピューターは様々な作業をしています。
そのうちの一つがBIOSによる作業です。
BIOSは電源投入後、最もはじめに起動するプログラムです。BIOSがハードウエアをセットアップしてOSを読み込んで起動します。
BIOSの働きの流れは以下のようになります。
- CPUがROMに書き込まれているBIOSを実行する
- POST(ハードウエアのチェック、初期化)を実行
- 記憶装置からMBR内のブートローダを起動
- OSプログラムの実行
BIOSはハードディスクなどに存在しているのではなく、コンピューターの基板上にあるROMに保存されています。CPUは起動後にROM上のBIOSを実行しにいきます。
BIOSはハードウエアを使える状態にするため、POST(Power On Self Test)を実行します。POSTはチップセット、メモリ、インターフェースなどのチェックを行い、初期化します。ハードウエアに問題があればビープ音などでエラー通知が行われ、起動は失敗します。
POSTが成功すれば次にハードディスク上にあるMBRというディスクの先頭にある領域に書き込まれているブートローダを起動します。ブートローダはディスクからOSを読み込んで実行します。
UEFI
UEFIは最近のコンピューターに導入されているBIOSに代わる新しいプログラムです。
UEFIは古い規格であるBIOSにある課題(大容量ディスク対応、新たなCPUサポート、セキュリティなど)を解決するために作られました。
ブートローダ
ブートローダはOSを起動するためのプログラムです。
BIOSによってPOSTが実行された後はブートローダが起動します。
LinuxではブートローダとしてGRUBが主に使われています。他にはSyslinuxなどがあります。
ブートローダGRUBはOSの中核プログラムであるカーネル(vmlinuz)とハードディスクに存在するルートフォルダを一時的にメモリ上に読み込んでおくプログラムを起動します。
カーネル
カーネルはOSの中核となるプログラムです。プロセスやメモリの管理などを行っています。ブートローダによって読み込まれたカーネルは自己解凍、初期化した後、ブートローダによって読み込まれたもう一つのinitrdを解答、実行します。カーネルはその後systemdを実行します。
initramfs initrdの役割
initramsfs(ディストリビューションによってinitrd)はRAMディスク(メモリ)上にルートファイルシステムを一時的に保存してマウントします。のちにハードディスク上のルートシステムに切り替わります。
参考になる情報
参考 Linuxのブートシーケンスの基礎まとめ - Tech random memorandaTech random memoranda