コンテキストスイッチ

From Wikipedia, the free encyclopedia

コンテキストスイッチ: context switch)とは、複数のプロセスが1つのCPUを共有できるように、CPUの状態(コンテキスト)を保存したり復元したりする過程のことである。コンテキストスイッチはマルチタスクオペレーティングシステム (OS) に不可欠な機能である。通常コンテキストスイッチは多くの計算機処理を必要とするため、オペレーティングシステムの設計においてはコンテキストスイッチを最適化することが重要である。

マルチタスキング

マルチタスクOSにおいては、実行中のプロセスは途中でCPUを明け渡し、他のプロセスも実行されるようにする必要がある。このプロセスの切り替えの際にコンテキストスイッチが発生する。

プリエンプティブなマルチタスクOSでは、スケジューラーが各プロセスを「タイムスライス」と呼ばれるある短い時間ずつ走行させる。 しかし、プロセスがその時間内にCPUを明け渡さなかった場合(明け渡すとは、例えばI/Oを行ってその完了を待つ場合など)、タイマ割り込みが発生し、OSが別のプロセスを走行させるようスケジュール設定しコンテキストスイッチが発生する。これによりCPUが計算ばかりするアプリケーションに占有されないようにするのである。

割り込み処理

割り込みが発生した時には、現在のプロセスの実行を停止して割り込みハンドラを実行する必要があるため、コンテキストスイッチが発生する。

リアルタイムオペレーティングシステムの場合、プリエンプティブなタスクが実行中に割り込みが発生した時は、割り込み処理が終了しても停止させたタスクに実行権が戻るとは限らない。 割り込み処理終了時に停止させたタスクよりプライオリティの高いタスクが実行可能となっている場合はディスパッチが行われプライオリティの高いタスクを優先して処理するのが一般的である。

ユーザーモードとカーネルモードの切り替え

ユーザーモードカーネルモード間の遷移が必要となった場合、コンテキストスイッチが発生する。システムコールはカーネルモードで実行されるので、これらの関数が呼び出される際にはまずカーネルのコンテキストを読み出し、システムコールを実行して、それから元のユーザーモードのコンテキストを復元する必要がある。

コンテキストスイッチの手順

様々な実装例

脚注

Related Articles

Wikiwand AI