カーネルはプロセスのどれも破壊せず、実行時にどのようにそれ自体で更新されますか?
答え1
カーネルを更新すると、実際にカーネルも更新されます。パック。ほとんどのLinuxディストリビューションでは、これは実際にパッケージマネージャにパッケージを登録し、以下に新しいモジュールを追加し、下に/lib/modules
initramfsとカーネルを追加し/boot
、ブートローダエントリやその他のアクティビティを更新するだけです。通常、メモリにロードされたカーネルを実際に置き換えるわけではありません。
起動時にカーネル自体がメモリにロードされます。つまり、ロードしたファイル(例/boot/vmlinuz
:)が消えても、カーネルを最初にロードした後はもう必要ありません。
たとえそれでも以前はいくつかの項目(デバッグ情報など)が必要になり、交換されました。接続されたinodeの参照カウントが0になるまでサポートデータは削除されないため、すでに開かれたファイルハンドルを持っている人は誰でもファイルを引き続き使用できます(カーネル自体はユーザースペース実行可能ファイルでプロセスを実行するのとは異なり、すでにメモリに読み込まれているため、これらの参照は必要ありません。一部のユーザースペースプログラムを実行しない限り、これらのブロックは通常ディスクから完全に解放される可能性があります。解凍することもできます。ブートされた/boot/vmlinuzにアクセスする方法がないか、まったくありません/proc/.../exe
。/proc/.../fd
したがって、通常、カーネルはそれ自体では更新されません。これは通常、再起動またはkexec
再起動時に行われます。あなたが描いた種類のものする限られたユースケースに存在斑点、否定的な利益とケスステッチしかし、通常、これは新しいアップストリームカーネルバージョンではなく、小規模およびターゲットパッチでのみ使用できます。