起動時にカーネル全体がメモリにロードされますか?

起動時にカーネル全体がメモリにロードされますか?

最後まで読んだこの人気のあるIBM文書(オンラインでよく見た内容です)初期のRAMディスクの機能について説明します。

しかし、これがどのように機能するかを概念化するのに問題があります。

文書には次のように記載されています。

ブートローダ(GRUBなど)は、ロードするカーネルを識別し、カーネルをコピーします。カーネルイメージと関連するinitrdをメモリに追加する

私はすでに混乱しています。カーネル全体をメモリにコピーしますか、それとも一部だけコピーしますか?カーネル全体がメモリにある場合、初期RAMディスクが必要なのはなぜですか?

私の考えでは、initrdの目的は小さな一般的なカーネルイメージを持つことを可能にすることであり、initrdはカーネルイメージをロードする前にここに正しいモジュールをインストールします。しかし、カーネル全体がすでにメモリにある場合、なぜinitrdが必要なのですか?

これはまた私を混乱させるもう一つの問題をもたらします。モジュールがカーネルにロードされる場所はどこですか?すべてのカーネルモジュールはinitrdに保存されていますか?

答え1

カーネル全体は、起動時に通常initramfs現在と一緒にメモリにロードされます。 (起動を必要としないようにシステムを設定することも可能ですinitramfsが、デスクトップやサーバーでは一般的ではありません。)

の目的は、initramfs「実際の」ファイルシステムをマウントし、システムの起動を続行するために必要な機能を提供することです。これにはカーネルモジュールとさまざまなバイナリが含まれます。少なくともudevいくつかのネットワーキングおよびkmodローディングモジュールが必要な場合がある。

モジュールは起動後にカーネルにロードされるため、実際のファイルシステム、開発ツリー(モジュールを開発する場合)など、どこにでも保存できます。マウントルートファイルシステム(残りを含む)を含めるだけinitramfsです。必須モジュール。initramfs/lib/modulesinitramfs

答え2

カーネル全体(モジュールを除く)がメモリにロードされます。ファイルシステムを使用する前にカーネルに特定のモジュールが必要な場合(通常はファイルシステムとそのデバイス用のドライバを意味します)、これらのモジュールはinitramfs(メモリ内)にあり、カーネルはそのモジュールをそこからロードします。他のモジュールは後でファイルシステムからロードできます。

答え3

ほとんどの最新のLinux設定では、カーネルは通常モジュールベースです。つまり、カーネル自体(起動時にRAMにロードされる)には最も基本的な機能のみが含まれており、残りのすべての機能はモジュール(実行時にロード可能)にコンパイルされます。 )。これが機能するには、起動に必要なデバイスまたはファイルシステムがモジュールinitramfs(名前が示すように、起動時にインストールされる単純なファイルシステムを含むRAM領域)であってもカーネルがロードされます。この一時ファイルシステムはマウントされ、起動/プログラムと必須モジュールが含まれます。起動がinitramfs完了すると、Linuxは実行し、pivot_root(8)物理ファイルをインストールして内容を/削除します。initramfs

この複雑さの鍵は、たとえば、ディストリビューションが次をコンパイルできることです。一つカーネル(最小カーネルとフルモジュールセット)で、カーネルをインストールするときにターゲットシステムinitramfsのハードウェアと設定に適したカーネルを作成します。これらはすべて「パーソナルコンピュータ」のさまざまなデバイスと構成のために必要です。

関連情報