0

私は現在オペレーティング システムを勉強していて、Implementing Multi-Threaded Processes.

具体的には、教科書では というシステムでユーザーレベルのスレッドを実装できると説明していますPer-Processor Kernel Threads。このシステムの詳細な説明は次のとおりです。

アプリケーションが起動すると、ユーザー レベルのスレッド ライブラリによって、ホスト マシン上のプロセッサごとに 1 つのカーネル スレッドが作成されます。システムに他のアクティビティがない限り、カーネルはこれらの各スレッドにプロセッサを割り当てます。各カーネル スレッドは、ユーザー レベルのスケジューラを並行して実行します。ユーザー レベルの準備完了リストから次のスレッドを取り出して実行します。スレッド スケジューリングの決定はユーザー レベルで行われるため、柔軟でアプリケーション固有のものにすることができます。

ただし、次に、このシステムにはいくつかの欠点があり、これはグリーン スレッドと同様です。言及されているいくつかの欠点は以下のとおりです

  • ユーザーレベルのスレッドがカーネルを呼び出すたびに、そのホスト カーネル スレッドがブロックされます。これにより、その間、スレッド ライブラリがそのプロセッサで別のユーザー レベルのスレッドを実行することを防ぎます。

  • カーネルがカーネル スレッドをタイム スライスするときはいつでも、それが実行していたユーザー レベルのスレッドも中断されます。このライブラリは、カーネル スレッドが再開するまでそのスレッドを再開できません。

どちらも完全には理解できません。これが私の質問です。

  1. ユーザーレベルのスレッドがカーネルを呼び出す場合、ホスト カーネル スレッドがこのシステムでブロックされるのはなぜですか?
  2. とはkernel time-slices a kernel threadどういう意味ですか?
  3. カーネルがカーネル スレッドをタイム スライスする場合、ユーザー レベルのスレッドの実行が中断されるのはなぜですか?

ありがとう。

4

1 に答える 1