スレッド:カーネルスレッドvsカーネルサポートスレッドvsユーザーレベルスレッド?


9

これらの違いが何か知っている人はいますか?

カーネルスレッドはカーネルを(直感的に)実行するコードに対応しているように見えますが、他の2つについてはわかりません...

また、カーネルがすべてのスレッドのスケジューリング/切り替えを実行しているときにライブラリにアクセスしているため、pthread標準はユーザーレベルでカーネルがサポートしていると見なされますか?

回答:


14

「カーネルスレッド」という用語は、完全にカーネルスペースで実行される実際のスレッドを指す場合や、カーネルによってスケジュールされたユーザースペーススレッドを指す場合もあります。「カーネルがサポートする」スレッドという用語は、ユーザー空間で実行されるがカーネルによって促進される後者のスレッドを意味します。これは通常、カーネルがそれらをスケジュールすることを意味します。

「ユーザーレベルのスレッド」とは、通常、ユーザー空間から見えるスレッドを意味します。つまり、スレッド化標準の「スレッドの作成」関数を呼び出すときに作成するものです。一般に、「ユーザーレベルのスレッド」という用語は、システムによる実装方法に関係なく、アプリケーションコードによって作成されるスレッドを意味するために使用されます。カーネルがほとんどサポートされていない、またはまったくサポートされていない純粋なユーザー空間のスレッドであるか、カーネルによってスケジュールされたスレッドである可能性があります。

pthreads標準は、純粋なユーザー空間スレッド(カーネルがプロセスをスケジュールし、プロセスがスレッドをスケジュールする)、カーネルがサポートするスレッド(カーネルがスレッドを直接スケジュールする)、またはハイブリッドアプローチ(カーネルがスケジュールする場所)として実装できます。カーネルレベルのスレッドは、ユーザー空間でユーザーレベルのスレッドをスケジュールします)。この規格は、特定の実装手段を要求していません。最も一般的な実装は1対1のマッピングであり、各ユーザーレベルのスレッドには、カーネルによってスケジュールされた対応するスレッドがあります。


Linuxでの実装はどのようなものですか?
yati sagade、2011

3
私が知っているすべての最新(2.6カーネル以降)Linuxシステムでは、システムのデフォルトのスレッド実装は1対1です。各ユーザーレベルのスレッドには、対応するKSE(カーネルスケジューリングエンティティ-基本的に、 Linuxカーネル)。「pthread_create」で作成したスレッドは、カーネルによって直接スケジュールされます。最近のシステムは一般にNPTLを使用し、古いシステムはLinuxThreadsを使用しました。どちらも1対1です。
David Schwartz

「またはハイブリッドアプローチ(カーネルがカーネルレベルのスレッドをスケジュールし、次にユーザー空間でユーザーレベルのスレッドをスケジュールする)」 デビッド、これをもう一度説明してもらえますか?何が起こっているのかわかりません... 1対1のマッピングと言うとき、カーネルレベルの広告について言及するときにスレッド制御ブロックを参照していますか?
ダークテンプラー

1対1の私は、あなたが「pthread_createの」呼び出すたびに、新しいコンテキストがカーネルによってスケジュールされるように作成されていることを意味します。でハイブリッドアプローチ、カーネルによってスケジューリングコンテキストの数が少ない作成されるスレッドの数よりも-カーネルスケジュールライブラリスケジュールをスレッドこれらのコンテキストの1、その後、アプリケーションによって作成されたスレッドの一つ。
David Schwartz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.