コンテキスト遷移のオーバーヘッドコストの理解

コンテキスト遷移のオーバーヘッドコストの理解

私はいつもコンテキスト遷移が高価であることを読んで聞いた。私は最近、Robert Loveの「Linux Kernel Development」を読み始め、「Processes and Process Scheduling」の章を終えました。これは私に費用についていくつかのアイデアを与えましたコンテキストスイッチ異なるプロセスとスレッド間(スレッドはプロセスと見なされるため)これをキャプチャし、コストを実際に理解したいと思います。コンテキストスイッチ、理想的には、コマンドの数と失われた時間をおおよそ示します。

簡単にするために、シングルコアプロセッサが同じパフォーマンスで2つのプロセスを実行しているとします。フレンドリー重み付け(proc1とproc2)。さらに、目標遅延20msなので、各プロセスは10msで予約されます。いつコンテキストスイッチそんなことが起こりますが、私の考えではコンテキストスイッチこの場合、proc1は中断されます。現在proc2も一時停止していますか?もしそうなら、これはアクティブなプロセスがいくつかのカーネルスレッドまたはプロセスであることを意味しますか?もしそうなら、これはproc1とproc2の両方が利用できないことを意味しますか?目標遅延?はい(数字はデモ用):

+-----------20ms-----------+

|---proc1---|--|---proc2---|
^____9ms____^__^____9ms____^
             |
            2ms of kernel executing context_switch()

このような場合コンテキストスイッチ()あるプロセスから別のプロセスへの最終呼び出しコンテキストスイッチ()二重?カーネルスレッドで一度proc1、そしてカーネルスレッドで別のproc2

ベストアンサー1

オペレーティングシステムのバージョンと同じくらい多くの答えがあります。すべてを網羅する正解はありません。

デフォルトでは、コンテキスト切り替えコストは、プロセスコンテキストに関連するすべてのCPUステータスを保存し、それを新しいプロセスのコンテキストにロードするコストです。

保存される内容は、オペレーティングシステムだけでなく、CPUハードウェア自体によって大きく異なります。たとえば、Intel CPUなどのプロセッサには、どこかに保存してから他のプロセスのコンテキストと共に再ロードする必要がある多くのレジスタがありますが、sparc CPUはスタック内のすべてのCPUレジスタを含むほとんどのコンテキストを保持するため、コンテキスト切り替えは一つです。スタックポインタを別のレジスタウィンドウに移動することだけが重要です。

一方、ほとんどの最新のCPUはCPUキャッシュメモリにいくつかの状態を持ち、これらの状態は通常コンテキスト切り替え中に交換されませんが、メモリ使用量のために新しいプロセスが実行されるとキャッシュラインがアンロードされ、再ロードされる可能性があります。以前のプロセスのキャッシュラインを再ロードする必要があるかもしれません。これはコンテキスト遷移の直接的な費用ではないが、依然として存在する。

CPU にはページマッピング、許可ビットなど、切り替える必要がある他のリソースがたくさんあり、リストは CPU モデルによって異なり、オペレーティングシステムによって異なる処理を行います。

プロセスとスレッドを参照しました。かつてそれらの間に大きな違いがあり、スレッドは切り替えるコンテキストがはるかに少なかった。その後、スレッドは軽量プロセスとして生成されるため、差が最小限に抑えられ、プロセスはほぼスレッドと同じくらい軽くなります。

また、最新のCPUはマルチタスクオペレーティングシステム用に設計されており、コンテキスト切り替えコストを軽減する機能も含まれています。ただし、コンテキスト切り替えのコストが高い場合でも、軽減する方法はたくさんあります。たとえば、一部のUNIXでは、インタラクティブなプロセス(短時間の計算を実行した後にユーザーの対話を待つ必要がある)と最小限のI / O対話を持つ純粋なコンピューティングスレッドを区別できるリアルタイム機能がスケジューリングに含まれています。あります。どちらの場合も、スケジューラは高い優先順位のために非常に短い予約間隔で対話型スレッドを提供し、同時にコンピューティングプロセスに長い間隔、より低い優先順位、より少ないコンテキスト切り替えを提供することによってオーバーヘッドを削減できます。

したがって、ほとんどの最新のオペレーティングシステムは、固定長スケジューリング間隔がワークロードに適応しないため、使用しません。そして、協力的なマルチタスク(プロセスはその時間を早期に放棄することができます)と時間ベースの強制コンテキスト遷移を組み合わせています。

一部のCPUは、異なるコアで異なる速度でスケジューリングをサポートしているため、短い時間フラグメントを持つ対話型コアと、長い時間フラグメントを持つ計算ベースのコアを持つことができます。

これは主題の複雑さの中で最先端であり、50年以上の研究開発を通じてさまざまなワークロードとハードウェア機能に最適化されています。このトピックについての全体の本が書かれており、ここでの短い答えは詳細を不明瞭にするだけです。

おすすめ記事