カーネルはプロセスですか?


27
  1. Linuxでは、最初のプロセスはinit(pid == 1)であると常に言っています。しかし、なぜシステムをセットアップしてinitプロセスを作成するのはカーネル(起動)ではありません。カーネルはプロセスですか?
  2. すべてのユーザースペーススレッドはinitプロセスに基づいています。それでは、スケジューラや、メモリ管理のような他のカーネルについてはどうでしょうか。

基本的に、私が混乱しているのは、カーネルの構造です。プロセスであれば、それは単一のプロセスなのか、複数のプロセスで構成されているのでしょうか。

回答:


18

短い答え:

  1. いいえ、それはプロセスではありません
  2. ユーザースレッドはinitを起点としていません。

initは最初のプロセスです。プロセスやスレッドは管理しません。カーネルのsyscalls fork()とexecを使って作成します。

私はあなたがプロセスが何であるかについて泥だらけの考えを持っていると思います。コードを実行するだけではありません。ええ、カーネルはinitの前に(そしてそれ以前のブートローダも)実行します。しかし、「プロセス」は以下の特定の定義を持ちます。

  • ユーザー空間で実行
  • プロセスIDで実行
  • 多くの対話はカーネルを通過する必要があります
  • すべてのリソースはカーネルから来る必要があります
  • カーネルによってスケジュールされる必要があります

そのため、カーネルが初期化されるとinitが実行され、次にinitはその構成に指定されている他のプロセスを起動します。

#2に関して言えば、カーネルのものはすべてカーネル内にあります。カーネルを広い範囲のコードとして考えてください。繰り返しますが、プロセスではなく、大規模なコードBLOBです。カーネルの一部はメモリ管理を扱い、その一部はそれ自体のスケジューリング部分(ドライバなど)を扱い、その一部はスケジューリングプロセスを扱う。


3
OPが彼の心をマイクロカーネルに吹き飛ばすのに十分に知っているのだろうか?いずれにしてもそれが気を散らすものになるだろうと思ったので、私はそれを私の編集に含めなかった。
new123456

4
カーネルについて考える一つの方法は巨大なライブラリのようなもので、エントリポイント(システムコール)があなたに代わって何かをするように頼みます。もう1つの補足的な見方は、ユーザからのシステムコールまたはハードウェア割り込み(例えば、新しいネットワークパケットが到着した)であれ、イベントが処理されるのを待っているということである。処理に時間がかかるため、カーネルは作業を内部スレッドに送って呼び出した人に戻るだけです。
vonbrand

15

カーネルは実際にはまったくプロセスのようには動作しません。それはスケジュールされません、それはプロセスに代わって(いわゆるプロセスコンテキストまたはユーザコンテキスト)実行されるか、または割り込みまたは例外(いわゆる割り込みコンテキスト)の結果として実行されます。

Linuxカーネルは、タスクを実行したり、割り込みコンテキストで長時間実行したりすることを回避するためにカーネルスレッドを生成します(つまり、ksoftirqdスレッドは、オーディオのドロップなどの原因となる過度の遅延を回避します)。 。

あなたはの出力でカーネルスレッドを見ることができます ps コマンド。それらは簡単に識別されます:それらの名前は括弧の間にあります。そのうちのいくつかはCPUごとに1つのインスタンスを実行し、CPUはスラッシュの後の数字で識別されます、従って[ksoftirqd / 0]はCPU 0のksoftirqdのインスタンスです。


1

マイクロカーネルには、カーネルのさまざまな部分が実際にプライマリセンチネルを使用してIPCを管理するだけのプロセスであるという概念があります。

良くも悪くもLinuxは、マイクロカーネルシステムではありません。


1

いいえ、そうではありません...カーネル(およびカーネル拡張)はメモリに直接ロードされます。カーネルに安全でないコードがあったとしても、それが大きな問題になることはありません。

それはさておき、カーネルは基本的にプロセス間で実行/切り替えを行います。明らかに、実際にプロセスを実行しているものは、プロセスそれ自体ではありません。

(tl; dr 1. no 2.カーネルの一部/その拡張子)


0

ninjaljは次のように書いています。「カーネルは実際にはまったくプロセスのようには動作しません。スケジュールされているわけではありません。」

まあ、スケジュールされ、ほぼ常に実行可能な状態にあるアイドルプロセス(基本的にpid 0、どこにも表示されていません)があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.