Linuxの軽量プロセスはカーネルスレッドに接続されていますか?

Linuxの軽量プロセスはカーネルスレッドに接続されていますか?

「Linuxカーネルの理解」の私の理解によると、次の説明は正しいですか?

  • Linuxカーネルのカーネルスレッドと軽量プロセスはtask_structC言語の構造で表されます。

  • カーネルスレッドは常にカーネル空間で実行され、軽量プロセスはユーザー空間とカーネル空間の両方で実行できます。

  • カーネルスレッドと軽量プロセスは、同じレベルの2つの概念です。彼らは互いに依存していませんか?特に、軽量プロセスはカーネルスレッドに基づいて作成され実行されませんか?

それでは、「オペレーティングシステムの概念」の次の引用は、軽量プロセスがカーネルスレッドにリンクされていることを意味するのはなぜですか? (この本は一般的なオペレーティングシステムの概念をカバーしており、引用にはLinux用とは記載されていませんが、本のほとんどはLinuxに適用されます。)

マルチスレッドプログラムについて考慮すべき最後の問題は、セクション4.3.3で説明した多対多および2レベルモデルに必要なカーネルとスレッドライブラリ間の通信に関連しています。この調整により、カーネルスレッドの数を動的に調整して最適なパフォーマンスを確保できます。

多くのシステムが多対多または2段階モデル​​を実装しています。ユーザースレッドとカーネルスレッド間の中間データ構造このデータ構造は、しばしば軽量プロセスまたはLWPと呼ばれます。—— 図 4.13 と同じです。ユーザースレッドライブラリの場合、LWPはアプリケーションがユーザースレッドの実行をスケジュールできる仮想プロセッサとして表示されます。各LWPはカーネルスレッドに接続されます。オペレーティングシステムは、物理プロセッサで実行するようにカーネルスレッドを予約します。。カーネルスレッドがブロックされている場合(たとえば、I / O操作が完了するのを待っている間)、LWPもブロックされます。オンチェーン、LWPに接続されたユーザーレベルのスレッドもブロックされます。

ここに画像の説明を入力してください。

本で定義されているいくつかの概念は次のとおりです。特に、カーネルスレッドとユーザースレッドの定義は、この記事の冒頭の質問で述べたものとは異なる場合があります。

スレッドサポートはユーザーレベルで提供できます。ユーザースレッド、またはカーネル経由カーネルスレッド。ユーザースレッドはカーネル上でサポートされ、カーネルサポートなしで管理できますが、カーネルスレッドはオペレーティングシステムで直接サポートおよび管理されます。

多対一モデル(図4.5)複数のユーザーレベルのスレッドを1つのカーネルスレッドにマップします。スレッド管理は、ユーザー空間のスレッドライブラリによって実行されるため、非常に効率的です。

ここに画像の説明を入力してください。

多対多モデル(図4.7)多くのユーザーレベルのスレッドを、より少ないまたは同じ数のカーネルスレッドに多重化します。カーネルスレッドの数は、特定のアプリケーションまたは特定のシステムによって異なります(アプリケーションには、1つのプロセッサよりも複数のプロセッサでより多くのカーネルスレッドを割り当てることができます)。

ここに画像の説明を入力してください。

ありがとうございます。

ベストアンサー1

カーネルスレッドは常に次から実行されます。カーネル空間。ユーザースレッドはユーザースペースで実行されます。つまり、ユーザーモードのアドレス空間があります。ユーザースレッドは次のとおりです。予定カーネルサポートの有無にかかわらず。これが質問の後半で「カーネルスレッド」が意味するものです。簡単に言えば、両方とも同じ名前が使用されます。

おすすめ記事