5

実際には、多くのオペレーティング システムは、各スレッドに 1 つのカーネル スタック、または少なくとも各 CPU に 1 つのカーネル スタックを持つように設計されています。しかし、プロセスがトラップするたびにカーネルがロックされるオペレーティング システムの場合、CPU ごとにカーネル スタックを分離する必要はないようです。カーネル (独自のスタックを持つ) は単一の CPU アクセスのみを許可するため、CPU が同時にカーネル モードになることはありません。ネストされたトラップの場合でも、前の CPU がカーネル スタックを離れてクリーンアップするまで、CPU は常にブロックされます。では、そのような OS で複数のカーネル スタックが必要になるのはどのような場合ですか? ありがとう。

4

2 に答える 2

7

あなたが正しい; このような場合、しっかりしたマルチコア ロック機能がある限り、複数のカーネル スタックは役に立ちません。

通常、次の目的で複数のカーネル スタック (各スレッドに少なくとも1 つのカーネル スタック) があります。

  • マイクロカーネル アーキテクチャのように、カーネルをスレッド化して割り込み可能にしたい場合。
  • たとえば、負荷分散の際に、あるコアから別のコアにスレッドを移行する場合。CPU1 のカーネル スタックを CPU2 のカーネル スタックにコピーするのは面倒です。言うまでもなく、その目的で 2 つのコアをフリーズしているため、パフォーマンス キラーにもなります。
  • 基盤となるアーキテクチャによっては、複数のカーネル スタックを持つことで MMU が簡単になります (AS 管理など)。
于 2012-12-19T13:48:28.767 に答える
1

実際には、多くのオペレーティング システムは、カーネル レベルのコードを実行するスレッドの数を制限していません。実際、この制限を設定すると、カーネルのスケーラビリティが大幅に制限されます。この制限がなければ、複数のカーネル スタックが必要です。

さらに、実際には、オペレーティング システムは、現在カーネル モードで実行されているスレッドのプリエンプションと移行を許可する場合があります。これにより、カーネル スタックがプロセッサではなくスレッドに結び付けられます。

これらの機能を持たず、代わりにカーネル レベルの実行を 1 つのスレッドに制限するオペレーティング システムを設計している場合、必要なのは 1 つのスタックだけです。

于 2012-12-19T16:36:27.443 に答える