Linux の基礎知識

【Linuxの基礎知識】起動の仕組みとカーネルについて!

2020年4月6日

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によるブートデバイスの選択

イメージ例では、予めBIOS設定画面で、ハードディスク(Hard Drive)をブートデバイスとして選択しています。

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が立ち上がります。

GUIモードで起動したイメージ

カーネルとは?

カーネルはOSの中に位置しています。

カーネルとは、OSの核となる部分で、コンピュータを操作するうえでの最も基本的な処理、CPUやメモリ、ディスクの制御などを行います。

例えば、Word(アプリケーション)で作成した文章をプリンター(ハードウェア)で印刷するとき、「カーネル」が間に入って「Word」を「印刷する」という要求を「プリンター」に伝えているということです。

コマンドプロンプト画面から「カーネル」に対してプリント出力を実行するまでの流れ

つまり、コマンドプロント画面から「Shell」を通して、人間の言葉を機械語に翻訳してから、各「H/W(ハードウエア)」へ命令しているのです。

"Linux"の生みの親として名高い「リーナス氏」は、すべての機能を作った人みたいに思われがちですが、実は、このカーネルを開発した人なのです。

この記事では、「"Linux"の起動のしくみ」にも触れました。一見、難しそうと思われる”Linux”も、仕組みを知ってしまえばそれほど複雑でもないことが分かると思います。

よく読まれている記事

1

目次1 Shellとは?1.1 代表的なシェルの種類2 シェルスクリプトの違いとは? Shellとは? Shellとは、人間の理解できる言葉を機会へ伝えるプログラムです。 Linux環境でコマンドプロ ...

2

Linuxは主にサーバー用として利用されるOSです。大規模な基幹システムの開発者、ロボットや家電開発等の組み込み系エンジニア、ネットワーク機器やデータベースに携わるインフラエンジニアは触れることが多い ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Linux の基礎知識

Copyright© Beエンジニア , 2020 All Rights Reserved.