コンテキストスイッチ

コンテキストスイッチ(context switch)とは、プロセスを一旦中止して、プロセッサ内部の状態を保存し、別のプロセスや先にこれを行った他のプロセスをロードして復元し、再び実行するという切換えのことをいう。

コンテキストスイッチでは、プロセスを中止する際にレジスタOS固有のデータが特定のメモリ領域に保存される。割り込みハンドラが動作すると、まずこの処理が行われる。その後、同じようにプロセスを途中で停止された作業過程の状態を復元し、再び処理に移行するというコンテキストスイッチの切換え作業が行われる。

しかし、割り込み処理が終わったからといって必ずしも停止された作業過程を再び読み込む訳ではない。優先度の高いタスクが実行できる状態になっていれば、そちらが優先して処理される。

コンテキストスイッチのコンテキストとはCPUの状態のことを指す。CPUで処理されているデータを喪失することなく、現在のタスクから他のタスクへ移るには、今行っているプロセスのCPU状態を保存しなければならない。同時に後で復元できるようにもしておく必要がある。また、カーネルでコンテキストスイッチを補助するには、各プロセスに対して、それぞれ保存領域を確保し、最適な時を見計らってコンテキストスイッチを実行しなければならない。

コンテキストスイッチは、マルチタスクで必要な機能である。これは、二つ以上の作業を同時もしくは少しのずれで並行して行うものである。また、OSが強制的にこれを管理をする場合、プリエンプティブマルチタスクという。これに対し、CPU管理を各アプリケーションに委ねたものをノンプリエンプティブマルチタスクという。

現在のWindowsやMac、LinuxUNIXなどはプリエンプティブである。しかし、Windowsでは、コンテキストスイッチを採用していないようである。Linuxではカーネルがコンテキストスイッチをサポートしているようだ。

コンテキストスイッチの意味を簡潔に説明すると

CPU状態の保存や復元による切り替えのこと。