助け合いフォーラム

LinuC

LinuC Lv1-101(Ver10.0)
問題ID : 14331
問題を開く
システム起動時においてのカーネルの説明として正しいものは次のうちどれか。(全て選択)

正解

高度にハードウェアを認識・制御し、ルートファイルシステムのマウントなど様々な初期化処理を行う

/sbin/initを起動する

解説

カーネルは起動されると、高度にハードウェアを認識・制御し、ルートファイルシステムのマウントなど様々な初期化処理を行います。
ブートローダはカーネルと初期RAMディスク(initramfs)の内容をメモリ上に展開し、カーネルはメモリ上に展開された初期RAMディスク内の、ファイルシステムへアクセスするために必要なドライバやスクリプトを使用してルートファイルシステムをマウントします。その後、initという特別な最初のプロセスをルートファイルシステムから起動します。
「SysVinit」と呼ばれる従来のinitプログラムを採用しているシステムでは、initプロセスとして「/sbin/init」が起動されます。なお、カーネルはブートローダの次に起動されます。

したがって正解は
・高度にハードウェアを認識・制御し、ルートファイルシステムのマウントなど様々な初期化処理を行う
・/sbin/initを起動する
です。

その他の選択肢については以下のとおりです。
・記憶装置(HDD)内のカーネルをロードし、制御を移す
ブートローダについての説明ですので、誤りです。

・設定ファイル「/etc/inittab」の記述に基づいて、自動起動するべきプロセスを立ちあげるなど、アプリケーションレベルの初期化を行う
initについての説明ですので、誤りです。

・記憶装置(HDD)等に関して最低限の認識を行う
BIOSについての説明ですので、誤りです。

参考

一般的なLinuxシステムでは、BIOS、ブートローダ、カーネル、initの順にブートプロセスが進行します。

それぞれの役割と、各段階の詳細は以下のとおりです。
この知識は、OS起動に失敗する場合の問題特定の際にも重要なので、自分で順を追って説明できるようにしておきましょう。

・BIOS(Basic I/O System)
最もハードウェアに近い部分を司るシステムで、物理的なハードウェア(マザーボード)上に書き込まれています。
コンピュータの電源を入れると、まずBIOSが起動し、記憶装置(HDD)等に関して最低限の認識をして起動デバイスの優先順位を決定します。その後、優先順位に従って各デバイスの先頭セクタにあるMBR(ブート用の特殊領域。ブートローダが格納されている)を読み込み、得られたブートローダに制御を移します。ブートローダが得られない場合は次のデバイスのMBRを読み込みます。
起動デバイスの優先順位は、BIOSセットアップ画面で任意の順序に設定変更できます。BIOSセットアップ画面はコンピュータの起動時に特定のキー(DEL、F2など)を押すことで呼び出せます。
最近のシステムではUEFI(Unified Extensible Firmware Interface)への移行が進んでいます。

・ブートローダ
LinuxシステムではGRUBが該当します。
MBRに格納されている第一段階部分と、記憶装置内の別の場所に格納されている第二段階部分があります。
このように分かれている理由は、MBRには厳しいサイズ制限があるためです。
ブートローダは記憶装置内のカーネルをロードし、カーネルに制御を移す役割を果たします。
第一段階のブートローダはMBRの先頭446バイトの領域にインストールされます。


・カーネル
カーネルは起動されると、高度にハードウェアを認識・制御し、ルートファイルシステムのマウントなど様々な初期化処理を行います。
ブートローダはカーネルと初期RAMディスク(initramfs)の内容をメモリ上に展開し、カーネルはメモリ上に展開された初期RAMディスク内の、ファイルシステムへアクセスするために必要なドライバやスクリプトを使用してルートファイルシステムをマウントします。その後、initという特別な最初のプロセスをルートファイルシステムから起動します。
カーネルイメージと、カーネルのバージョンに対応する初期RAMディスクは「/boot」ディレクトリに格納されます。初期RAMディスクは展開してイメージ内のディレクトリ、ファイルを参照することができます。

・init
最初に起動されるプロセスで、PID(プロセス ID)は必ず1です。「SysVinit」と呼ばれる従来のinitプログラムを採用しているシステムでは、「/sbin/init」が起動されます。
initプロセスは設定ファイル「/etc/inittab」の記述に基づいて、自動起動するべきプロセスを立ちあげるなど、アプリケーションレベルの初期化を行います。
以降、initプロセスは全てのプロセスの先祖(直接・間接的な呼び出し元)として存在し続けます。
なお、最近のシステムではinitプログラムとして、初期化処理を高速化したUpstartやsystemdを採用している場合があります。その場合は基本的に「/etc/inittab」ファイルは使用されません。
上に戻る

カーネルについて

公開日 2024/06/07

Q.システム起動時においてのカーネルの説明として正しいものは次のうちどれか。

A・高度にハードウェアを認識・制御し、ルートファイルシステムのマウントなど様々な初期化処理を行う
 ・/sbin/initを起動する

説明を読んだところ、「/sbin/initを起動する」はカーネルではなくinitなのではと思ったのですが、
なぜ正解になるのか教えてください。

2024/06/09 00:11

疑問の内容がちょっとうまく掴めないのですが、「 init と言うものが /sbin/init を起動する」と言う説明があると言うことでしょうか?

解説の

その後、initという特別な最初のプロセスをルートファイルシステムから起動します。
「SysVinit」と呼ばれる従来のinitプログラムを採用しているシステムでは、initプロセスとして「/sbin/init」が起動されます。

で「カーネルがinitプロセス( バイナリは /sbin/init )を起動する」と説明されていると思うのですが、ご指摘のポイントはこことは違う箇所でしょうか?


コメント

k kyuri116

2024/06/10 10:14

ご回答ありがとうございます。 『initプロセスとして「/sbin/init」が起動されます』 と記述されているのに、『/sbin/initを起動する』がカーネルの役割とされていることが腑に落ちませんでした。

a arashi1977

2024/06/10 22:39

うーん、そうは言われましてもカーネルが /sbin/init を起動するのは事実ですしねぇ https://github.com/torvalds/linux/blob/master/init/main.c#L1523 もしかして「起動される」と「起動する」の言葉が問題だって言われてますか? - プロセスとして起動されるのは /sbin/init (プロセスとは実行中プログラムの管理に使われる単位なので、 /sbin/init と言うバイナリファイルを起動することで init プロセスが実行中となる) - initプロセスとして /sbin/init を起動するのは「カーネル」の役割。カーネルもプログラムだが、そのプログラムの実行処理の中で /sbin/init を起動するというものが実装されている と言うだけの話なのですが、どのあたりが腑に落ちない部分でしょうか?

k kyuri116

2024/06/11 11:47

理解できました。 ご丁寧にありがとうございます。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?