Linuxの起動の仕組みは非常にシンプルです。難しく感じさせているのは、単純に専門用語の存在です。「BIOS」「ブートデバイス」「ブートローダー」「カーネル」等、初めての方は戸惑いますよね?
この記事では、Linuxの起動の仕組みとそれぞれの機能の役割について解説しています。
Linuxの起動のしくみ
コンピューターの電源をいれてからログインするまでに、コンピューターの内部ではどのような処理が行われているのでしょうか?
簡単な流れ
- 電源を投入する
- BIOSを起動、デバイス認識・初期化
- ブートデバイスから(HDD)MBRをロード
- ブートローダーを起動
- ブートローダが「カーネル」イメージをロード
- カーネルを起動
- カーネルが「systemd(旧/sbin/init)」を実行する
BIOSとは(Basic Input/Output System)
BIOSとは、インストールしたマシンの電源ボタンを押下時に、一番初めに立ち上がるプログラムです。マシンを立ち上げた時点では、まだカーネルが認識されていないため、予めマザーボードの内臓チップに組み込まれているBIOS(小さなプログラム)が起動します。
起動したBIOSがブートデバイス(HDD、CDROM、USB)等を認識して、必要なブートローダー(起動プログラム)を読み込みます。
ブートデバイスとは?
ブートデバィスとは、起動に使う装置のことであり、一般的にはハードディスクを指します。なかにはCDROMやUSBで起動している環境もあります。
起動したBIOS内に設定されているブートデバイス情報から、該当するデバイスを認識します。
イメージ例では、予めBIOS設定画面で、ハードディスク(Hard Drive)をブートデバイスとして選択しています。
ブートローダーとは?
ブートローダーとは、OSを読み込む(Loadする)ためのプログラムを指します。ブートローダーは、ブートデバイスの先頭を読み込み、その部分にあるプログラムを実行します。
OSが起動する時には、「小さなプログラムが次の大きなプログラムを読み込む」という作業が繰り返されカーネルが読み込まれます。
ココがポイント
このカーネルこそが、Linuxの本体です。Linuxの起動とは、カーネルが読み込まれてからの動作を言います。
この動作のことを「ブートストラップ(bootstrap)」と呼びます。
systemdとは?
Systemdとは、Linuxの起動処理やシステム管理を行う仕組みを指します。Systemd が実行されると「default.target」というファイルが読み込まれ「default.target」の定義に従ってサービスなどを起動します。
「テキストモード」「グラフィカルモード」「マルチユーザー・ターゲット(旧LANレベル)」等の設定情報は、このSystemdで管理されています。
ココに注意
RedHat7/CentOS7以上は、Linux起動の仕組みが大きく変更されました。
Kernelイメージロードまでは以前と同様ですが、RedHat7/CentOS7以上からは、initプログラムがsystemdへのシンボリックリンクになっています。「inittab」は未使用となりました。
狭義の"Linux"とは、このカーネル部分のみを指しています。一連の処理を終えて、いよいよLinuxが立ち上がります。
カーネルとは?
カーネルとは、OSの核となる部分で、コンピュータを操作するうえでの最も基本的な処理、CPUやメモリ、ディスクの制御などを行います。
例えば、Word(アプリケーション)で作成した文章をプリンター(ハードウェア)で印刷するとき、「カーネル」が間に入って「Word」を「印刷する」という要求を「プリンター」に伝えているということです。
つまり、コマンドプロント画面から「Shell」を通して、人間の言葉を機械語に翻訳してから、各「H/W(ハードウエア)」へ命令しているのです。
"Linux"の生みの親として名高い「リーナス氏」は、すべての機能を作った人みたいに思われがちですが、実は、このカーネルを開発した人なのです。
この記事では、「"Linux"の起動のしくみ」にも触れました。一見、難しそうと思われる”Linux”も、仕組みを知ってしまえばそれほど複雑でもないことが分かると思います。
Linux基礎知識(全12記事)
├─Linuxとは何か? Linuxの基本概要を理解しよう!
├─Linuxをインストールし、ログインしてみよう!
├─起動の仕組みとカーネルについて!
├─ディレクトリ構造とファイルシステムについて!
├─ユーザー環境(ユーザー、グループ、パスワード)の設定について!
├─ディレクトリ操作について!
├─ファイル操作について!
├─テキスト操作について!
├─Linuxの基本コマンドを覚えよう!
├─適切なアクセス制御を付与してみよう!
├─リンクとiノードについて理解を深めよう!
└─LVMとは?LVMを理解しよう?