質問

いくつかのソースを読んだ後、私はまだユーザーレベルとカーネルレベルのスレッドについて混乱しています。

特に:

スレッドは、ユーザーレベルとカーネルレベルの両方で存在する可能性があります

ユーザーレベルとカーネルレベルの違いは何ですか?

役に立ちましたか?

解決

マルチタスクオペレーティングシステムカーネルの役割の1つは スケジューリング: :いつ実行するかを実行する実行のスレッドを決定します。そのようなカーネルにはいくつかの概念があります スレッド また 処理する. 。スレッドは、実行しているコードのシーケンシャルな部分であり、独自のコードを持っています スタック そして時々他のデータ。オペレーティングシステムのコンテキストでは、人々は通常使用します 処理する 独自のメモリスペースを持つスレッドを意味すること、そして スレッド メモリスペースを他のスレッドと共有するスレッドを意味します。プロセスには、1つ以上のスレッドがあります。

古いUNIXシステムなどの一部のオペレーティングシステムは、プロセスのみを提供します。カーネルが管理するすべてのスレッドには、独自のメモリスペースがあります。他のオペレーティングシステム(ほとんどの最新のUNIXシステムなど)により、プロセスには複数の実行スレッドが含まれています。スレッドのカーネルレベルの概念を提供します。

また、プロセスが独自のスレッドを管理することも可能です。の 協同組合 マルチスレッド、各スレッドのコードには、別のスレッドに切り替える手順が含まれています。の 先制 マルチスレッド、プロセスは定期的に要求します 非同期 カーネルからの通知は、別のスレッドに切り替えることにより、これらの通知に対応します。このようにして、マルチスレッドは、ユーザーレベルのカーネル協力なしでライブラリで実装されます。

システムは、カーネルレベルとユーザーレベルの両方のスレッドを提供できます。これはとして知られています ハイブリッドスレッド.

ユーザーレベルとカーネルレベルのスレッドには、それぞれに利点とマイナス面があります。ユーザーレベルのスレッドを切り替えると、メモリ保護をリセットするためにリセットされたメモリ保護を必要としないため、インカーネルスケジューラに切り替え、再びプロセスに戻る必要がないためです。これは、いくつかの高レベル言語など、非常に短命のスレッドを使用する大規模な同時システムにとって主に重要です(エルラン 特に)とそれら 緑の糸. 。ユーザーレベルのスレッドでは、カーネルのサポートが少ないため、カーネルをよりシンプルにすることができます。カーネルレベルのスレッドを使用すると、同じプロセスの別のスレッドがブロックされ、 システムコール;ユーザーレベルのスレッドを使用したプロセスは、プロセスのすべてのスレッドをブロックするため、システムコールをブロックしないように注意する必要があります。カーネルレベルのスレッドは、純粋にユーザーレベルのスレッドが達成できないマルチプロセッサマシンで同時に実行できます。

他のヒント

カーネルレベルのスレッドを」と考えてください仮想プロセッサ「そして、ユーザーレベルのスレッドは単純に スレッド (今のところ、それらをそのように呼びましょう)。さて、スレッドが実行されるためには、プロセッサに割り当てられていますか?そのため、各スレッドは仮想プロセッサに割り当てられ、実行できます。

これが事実です

  • 新しい仮想プロセッサの作成は少しコストがかかります。 (カーネルはエントリを作成する必要があります スレッド制御ブロック, 、スタックなどを割り当てます。)

  • スレッドの作成は、新しい仮想プロセッサの作成と比べて非常に簡単です。アプリケーション開発者は、プログラミング言語によって提供されたスレッドライブラリを使用してスレッドを作成でき、で管理されます ユーザースペース. 。と 異なる言語 埋め込む マルチスレッド さまざまな方法で。

モデル

  • スレッドが単一の仮想プロセッサにマッピングされている場合、他のスレッドが同時に実行できないため、どのスレッドでブロッキングシステムを呼び出しないように注意する必要があります。

  • この制限は、さらにいくつかの仮想プロセッサを作成できれば克服できます。これで、スレッドは同時に実行できます(複数の実際のプロセッサが存在する場合は並行して)。スレッドは、他の仮想プロセッサにマッピングされた他のスレッドに影響しません。

  • 後者のモデルでは、1つまたは多くのスレッドを仮想プロセッサにマッピングできます。

  • 上記のモデルは、それぞれ多くのモデルから1対1、および多くの名前が付けられています。

紹介:Galvinらによるオペレーティングシステムの概念。トピック:スレッド - >マルチスレッドモデル

ライセンス: CC-BY-SA帰属
所属していません cs.stackexchange
scroll top