「Linuxカーネルの理解」の私の理解によると、次の説明は正しいですか?
Linuxカーネルのカーネルスレッドと軽量プロセスは
task_struct
C言語の構造で表されます。カーネルスレッドは常にカーネル空間で実行され、軽量プロセスはユーザー空間とカーネル空間の両方で実行できます。
カーネルスレッドと軽量プロセスは、同じレベルの2つの概念です。彼らは互いに依存していませんか?特に、軽量プロセスはカーネルスレッドに基づいて作成され実行されませんか?
それでは、「オペレーティングシステムの概念」の次の引用は、軽量プロセスがカーネルスレッドにリンクされていることを意味するのはなぜですか? (この本は一般的なオペレーティングシステムの概念をカバーしており、引用にはLinux用とは記載されていませんが、本のほとんどはLinuxに適用されます。)
マルチスレッドプログラムについて考慮すべき最後の問題は、セクション4.3.3で説明した多対多および2レベルモデルに必要なカーネルとスレッドライブラリ間の通信に関連しています。この調整により、カーネルスレッドの数を動的に調整して最適なパフォーマンスを確保できます。
多くのシステムが多対多または2段階モデルを実装しています。ユーザースレッドとカーネルスレッド間の中間データ構造。このデータ構造は、しばしば軽量プロセスまたはLWPと呼ばれます。—— 図 4.13 と同じです。ユーザースレッドライブラリの場合、LWPはアプリケーションがユーザースレッドの実行をスケジュールできる仮想プロセッサとして表示されます。各LWPはカーネルスレッドに接続されます。とオペレーティングシステムは、物理プロセッサで実行するようにカーネルスレッドを予約します。。カーネルスレッドがブロックされている場合(たとえば、I / O操作が完了するのを待っている間)、LWPもブロックされます。オンチェーン、LWPに接続されたユーザーレベルのスレッドもブロックされます。
本で定義されているいくつかの概念は次のとおりです。特に、カーネルスレッドとユーザースレッドの定義は、この記事の冒頭の質問で述べたものとは異なる場合があります。
スレッドサポートはユーザーレベルで提供できます。ユーザースレッド、またはカーネル経由カーネルスレッド。ユーザースレッドはカーネル上でサポートされ、カーネルサポートなしで管理できますが、カーネルスレッドはオペレーティングシステムで直接サポートおよび管理されます。
多対一モデル(図4.5)複数のユーザーレベルのスレッドを1つのカーネルスレッドにマップします。スレッド管理は、ユーザー空間のスレッドライブラリによって実行されるため、非常に効率的です。
多対多モデル(図4.7)多くのユーザーレベルのスレッドを、より少ないまたは同じ数のカーネルスレッドに多重化します。カーネルスレッドの数は、特定のアプリケーションまたは特定のシステムによって異なります(アプリケーションには、1つのプロセッサよりも複数のプロセッサでより多くのカーネルスレッドを割り当てることができます)。
ありがとうございます。
ベストアンサー1
カーネルスレッドは常に次から実行されます。カーネル空間。ユーザースレッドはユーザースペースで実行されます。つまり、ユーザーモードのアドレス空間があります。ユーザースレッドは次のとおりです。予定カーネルサポートの有無にかかわらず。これが質問の後半で「カーネルスレッド」が意味するものです。簡単に言えば、両方とも同じ名前が使用されます。