Context Switch(コンテキストスイッチ)とは?
コンテキストスイッチ (context switch) とは、複数のプロセスが1つのCPUを共有できるように、CPUの状態(コンテキスト (情報工学))を保存したり復元したりする過程のことである。コンテキストスイッチはマルチタスクオペレーティングシステムに不可欠な機能である。通常コンテキストスイッチは多くの計算機処理を必要とするため、オペレーティングシステムの設計においてはコンテキストスイッチを最適化することが重要である。
- マルチプロセスの環境でCPUがある一つのプロセスを実行している状態でインターラプトリクエストによる次の優先順位のプロセスが実行しなければならないとき、既存のプロセスの状態またはレジスタの値(Context)を保存してCPUが次のプロセスを行えるように新しいプロセスの状態またはレジスタ値(Context)を変える作業をContext Switch(Context Switching)といいます。
Context(コンテキスト)とは?
-
ユーザーと他のユーザー、ユーザーとシステムまたはデバイス間の相互作用に影響を受ける人、場所、オブジェクトなどの現在状況を規定する情報をいいます。
-
AndoroidやServletなのでもContextがあるが、OSでのContextはCPUが該当プロセスを実行するためのプロセス情報です。
-
このContextはプロセスのPCB(Process Control Block)に保存され、Context Switching時にPCBの情報を読み込んで(積載)CPUが前のプロセスがしていた作業を続けて行うことができます。
PCB(Process Control Block)の保存情報
-
プロセス状態
- 生成
- 準備
- 実行
- 待機
- 中止
-
プログラムカウンター
- プロセスが次に実行するアドレス
-
レジスタ
- アキュムレーター(累算器)
- スタック
- 索引レジスター
-
プロセス番号
ちなみにContext Switching時、該当CPUは何もできない。なので頻繁にContext Switchingを行われるとオーバーヘッドが発生し、効率(性能)が落ちます。
Context Switching - Interrupt
InterruptはCPUがプログラムを実行している時、実行中のプログラムの外から例外が発生し、処理が必要な場合
CPUに伝えて例外状況を処理できるようにすることをいいます。
では、なんのInterruptリクエストが来たらContext Switchingが起きるでしょう?
- I/O リクエスト(入出力リクエスト)
- time slice expired (CPU使用時間の満了時)
- fork a child (子プロセスを作成時)
- wait for an interrupt (Interrupt処理を待っている時)
その他にもあるで法けど、詳しいことは省略します。