コンテキスト スイッチとは

コンピューティングの黎明期、CPU は純粋にシーケンシャルなマシンでした。これにより、デザインをシンプルに保つことができました。ただし、パフォーマンスも制限されました。多くのプロセスでは、システム RAM またはハード ドライブからデータを要求する必要があります。システム RAM は高速ですが、それでも CPU ほど高速ではないため、RAM から応答が返ってくるまでアイドル状態のままデータを待ちます。RAM よりもはるかに遅いストレージ デバイスであるハード ドライブから要求されたデータの場合、状況はさらに悪化します。ここで、CPU はかなりの期間アイドル状態になり、応答を待機する可能性があります。残念ながら、シーケンシャル プロセッサでは、この問題は避けられません。

ありがたいことに、最新の CPU はもはやシーケンシャルではありません。アウトオブオーダー実行や複数のスレッドなど、多くの高度な機能を提供します。アウトオブオーダー実行により、CPU は次の命令を分析し、それらを並べ替えて効率を最大化できます。マルチスレッドにより、CPU は多数の異なるスレッドまたはプロセスを実行できます。

複数のコアがある場合を除き、CPU は一度に複数のコアを実行することはできません。ただし、それらを定期的に切り替えて、それぞれがかなりの量の一定の CPU 時間を確保できるようにすることで、そのように見せることができます。スレッド間の切り替えプロセスは、コンテキスト スイッチと呼ばれます。

コンテキスト スイッチはどのように機能しますか?

コンテキスト スイッチは、前のスレッドの切り替えと新しいスレッドへの切り替えの 2 つの部分で構成されます。古いスレッドを変更するには、CPU は現在の状態をプロセス制御ブロックまたはスイッチ フレームに保存する必要があります。これには、関連するすべての CPU レジスタの値が含まれ、常にプログラム カウンタの値で構成されます。スレッドが格納されると、ハンドルをレディ キューに追加して、必要なときにスレッドを復元できるようにすることができます。

次のスレッドでの切り替えは、逆の同じプロセスです。スレッドは、重み付けに応じて、準備完了キューから選択されます。または、スレッドが待機していたイベントが準備完了または完了したことを示す割り込みによって選択することもできます。次に、スレッドのデータが正しいレジスタにコピーされ、スレッドが復元されます。この時点で、新しいスレッドは、停止した場所から操作を続行する準備ができています。

パフォーマンスへの影響

スレッドを切り替えるときのデータの読み取りと書き込みのプロセスには、使用されるメモリが通常高速であるため、それほど多くはありませんが、ある程度の時間がかかります。ただし、追加のパフォーマンス コストがあります。スレッドを切り替えると、前のスレッドからの CPU キャッシュとバッファ内のデータは、新しいスレッドに関連しない場合があります。これにより、TLB ( Translation Lookaside Buffer ) とキャッシュ ミスが大幅に増加する可能性があります。

2 つのスレッドが同じプロセスによって生成された場合、これらのスレッドはかなりのメモリ要素を共有する可能性が高いため、この影響は重要ではありません。異なるメソッドからスレッドを切り替えるときは、TLB を完全にフラッシュする必要があります。これにより、TLB ミス率が 100% になり、CPU キャッシュのヒット率も大幅に低下します。

CPU はコンテキスト切り替えのハードウェア サポートを提供しますが、オペレーティング システムは通常これを使用しません。ハードウェア コンテキストの切り替えでは、データの関連性が認識されません。したがって、すべてのレジスタを保存および復元する必要があり、所要時間と必要なストレージ スペースが増加します。

さらに、ハードウェア コンテキストの切り替えは、浮動小数点レジスタからのデータを保存しません。これは必要な機能です。したがって、ソフトウェア コンテキスト スイッチングが一般的に使用されます。浮動小数点レジスタを含むすべてのレジスタからのデータを保持できます。ソフトウェア コンテキスト スイッチは、データの関連性を理解しています。これは、必要に応じて保存するものを選択できることを意味します。

結論

コンテキスト スイッチは、最新の CPU が実行中のスレッドを切り替えるプロセスです。このプロセスには、現在のスレッドの関連データの保存と、新しいスレッドの関連データの復元が含まれます。コンテキストの切り替えには、切り替えの実行に必要な時間に関連するパフォーマンス コストが伴い、キャッシュと TLB のミス率は保存されないため増加します。コンテキストの切り替えは、すべてのスレッドが十分な CPU 時間を確保できるようにするため、または回線が待機していたイベントが完了したことを示す割り込みのために発生します。



Leave a Comment

ハードドライブのクローンを作成する方法

ハードドライブのクローンを作成する方法

データが貴重な資産である現代のデジタル時代では、Windows 上でハード ドライブのクローンを作成することは、多くの人にとって重要なプロセスとなる可能性があります。この包括的なガイド

Windows 10でドライバーWUDFRdのロードに失敗した場合の修正方法

Windows 10でドライバーWUDFRdのロードに失敗した場合の修正方法

コンピュータの起動中に、ドライバ WUDFRd をコンピュータに読み込めなかったことを示すエラー メッセージが表示されましたか?

NVIDIA GeForce Experienceエラーコード0x0003を修正する方法

NVIDIA GeForce Experienceエラーコード0x0003を修正する方法

デスクトップで NVIDIA GeForce experience エラー コード 0x0003 が発生していますか? 「はい」の場合は、ブログを読んで、このエラーをすばやく簡単に修正する方法を見つけてください。

Chromebook の電源が入らないのはなぜですか

Chromebook の電源が入らないのはなぜですか

「Chromebook の電源がオンにならないのはなぜですか?」という質問に対する答えを見つけます。この役立つガイドは Chromebook ユーザー向けです。

Fitbit Versa 4 の文字盤を変更する方法

Fitbit Versa 4 の文字盤を変更する方法

Fitbit Versa 4 の文字盤を無料で変更して、時計の外観を毎日変えることができます。それがいかに早くて簡単かを見てください。

ルンバが止まったり、くっついたり、向きを変えたりする – 修正

ルンバが止まったり、くっついたり、向きを変えたりする – 修正

ルンバ ロボット掃除機が停止し、固着し、回転し続ける問題を修正します。

Steam Deckのグラフィック設定を変更する方法

Steam Deckのグラフィック設定を変更する方法

Steam デッキは、堅牢で多彩なゲーム体験をすぐに提供します。ただし、ゲームを最適化し、可能な限り最高のパフォーマンスを保証するには、

分離ベースのセキュリティとは何ですか?

分離ベースのセキュリティとは何ですか?

サイバーセキュリティの世界でますます重要になっているトピック、つまり分離ベースのセキュリティを詳しく掘り下げる予定でした。このアプローチは、

Chromebook でオート クリッカーを使用する方法

Chromebook でオート クリッカーを使用する方法

今日は、Chromebook で繰り返しクリックするタスクを自動化できるツール、オート クリッカーについて詳しく説明します。このツールは時間を節約し、

SMPSとは何ですか?

SMPSとは何ですか?

コンピューターに SMPS を選択する前に、SMPS とは何か、およびさまざまな効率評価の意味を理解してください。