コンテキストスイッチ
OSの機能として、実行中のプロセスを切り替える機能があります。これをプロセススイッチあるいはコンテキストスイッチと呼びます。
一般的にコンテキストスイッチは以下のように、割り込みを使って行われます。
- 実行中のプロセスAからプロセッサを横取りし、そのプロセスを一時中断する
- 割り込み処理を実行する(OS側の実行)
- 割り込み処理が終了したら、プロセスBにプロセッサを譲り、プロセスBの実行を開始する
コンテキストスイッチは、割り込み処理の実行、プロセススケジューリング、プロセスディスパッチャの3つの処理により実現されています。

ここで、割り込みは時分割制御によるタイマ割り込みあるいは、ユーザプログラムがハードウェア資源を使いたい場合などに利用するソフトウェア割り込みなどがある。このソフトウェア割り込みはOSに依頼する形で割り込みを発生させるので、SVC(Supervisor Call)と呼ばれています。
OS側では割り込み処理を行い、どのプロセスを割り当てるかのプロセススケジューリングを実行し、プロセスをディスパッチするという流れでOS側は実行されます。
ここで、割り込みがかかると必ず別プロセスにスイッチするわけではありません。下図のように、元のプロセスが実行されることもあります。

状態遷移とプロセススイッチの関係
前回の記事では、プロセスには3つの状態があることを説明しました。これらの状態の遷移は割り込みを使って行われます。


横取り→ディスパッチ
割り込みが入って、実行状態であったプロセスAは横取りされ実行可能状態に移ります。次に、プロセススケジューリングの結果、プロセスBが選択されディスパッチされ実行状態に遷移します。
事象の発生待ち→ディスパッチ
実行中のプロセスAが何らかのIO処理のような形で事象の発生待ちにより待ち状態に遷移します。このとき、プロセスA自身が割り込みをOSに要求します。このような割り込みをブロック割り込みと呼びます。このとき、実行可能状態のプロセスからスケジューリングしてディスパッチして、プロセスBが実行中状態に遷移します。
このようにIO処理での待ちから発生する割り込みなので、内部割り込みのほとんどはブロック割り込みです。
事象の発生→ディスパッチ
事象の発生が起こり、そのことにより割り込みが発生します。この割り込みをウェイクアップ割り込みと呼びます。ウェイクアップ割り込みは待ち状態のプロセスを実行可能状態へ移行させます。
待ち状態では、ユーザの入力などを待っている状態が多いので、ハードウェアからの割り込み通知であることが多いです。したがって、外部割り込みのほとんどはウェイクアップ割り込みです。
このとき、ウェイクアップ割り込みは発生したがプロセスを切り替えない場合と、プロセスを切り替える場合があります。
切り替える場合、横取りして、実行可能状態のプロセスからスケジューリングしてプロセスBが実行されます。
まとめ
本記事では、プロセススイッチについて解説しました。プロセススイッチは割り込みを契機に行われます。
コメント