コンテキストスイッチ
コンテキストスイッチは、CPU が実行する対象を別のプロセスやスレッドへ切り替える処理です。レジスタなどの状態を退避・復元することで、1つの CPU を見かけ上共有します。
- 1.コンテキストスイッチは、CPU が実行中のプロセス/スレッドを別のものへ切り替える処理です。
- 2.走っていた側のレジスタやPCを退避し、次に走る側の状態を復元することで切り替えます。
- 3.切り替え自体は仕事をしないオーバーヘッドで、頻発するとシステム全体が遅くなります。
コンテキストスイッチとは
1つの CPU コアは、ある瞬間には たった1つの実行単位(プロセスやスレッド)しか動かせません。それでも私たちのパソコンが多数のアプリを同時に動かしているように見えるのは、OS が 高速に実行対象を切り替えている からです。
この 実行対象を切り替える処理 が コンテキストスイッチ です。「コンテキスト(文脈)」とは、その実行単位が どこを・どんな状態で実行していたか を表す情報の総称を指します。
切り替えるには、いま走っていた側の状態を 保存(退避) し、次に走らせる側の状態を 復元 する必要があります。途中で止めても、後で続きから再開できるようにするためです。
退避した状態を後で正確に復元するからこそ、中断された処理は何事もなかったかのように続きから走れます。コンテキストの保存・復元は、1つのCPUを安全に共有するための前提です。
何を退避・復元するのか
「コンテキスト」の中身は、主に CPU 内部の状態です。
- 汎用レジスタ:計算途中の値などが入っている
- プログラムカウンタ(PC):次に実行する命令の番地
- スタックポインタ:呼び出し履歴やローカル変数の位置
- 各種ステータスレジスタ:演算結果のフラグなど
これらをまとめてメモリ上の管理領域(プロセスごとの PCB=プロセス制御ブロック など)に保存し、次の実行単位の分を読み戻します。
切り替えの流れ:
実行中タスクA
│ 退避: A のレジスタ・PC・SP をメモリへ保存
▼
スケジューラが次(B)を選ぶ
│ 復元: B のレジスタ・PC・SP をCPUへ書き戻す
▼
タスクB が続きから再開
どのタスクに切り替えるかを決めるのは スケジューリング の役割です。コンテキストスイッチは、その決定を 実際に実行する 担当だと言えます。
いつ起こるのか
コンテキストスイッチが発生する主なきっかけは次のとおりです。
- タイムスライス満了:割り当て時間を使い切ったので交代する
- I/O 待ち:ディスクやネットワークの応答待ちで、その間に別タスクを走らせる
- 割り込み:ハードウェア割り込みなどで、より優先すべき処理に移る
- より高優先度のタスクが実行可能 になった
特に I/O 待ち は重要です。応答を待つだけの間 CPU を遊ばせるのはもったいないので、OS はその隙に別タスクを動かします。これが「待ち時間の多い処理でもシステム全体は効率よく動く」理由です。
オーバーヘッドという代償
コンテキストスイッチ自体は、ユーザーの仕事を1ミリも進めません。状態を保存して読み戻すだけの 純粋なオーバーヘッド です。
しかも目に見える退避・復元だけがコストではありません。
| コスト | 内容 |
|---|---|
| 直接コスト | レジスタ等の退避・復元、スケジューラの実行 |
| 間接コスト | CPU キャッシュの中身が無効化され、再ヒットまで遅くなる |
| プロセス間切替 | さらに仮想アドレス空間(ページテーブル)を切り替え、TLB も無効化 |
同じプロセス内のスレッド同士なら、アドレス空間を共有しているのでそのまま使えます。しかし別プロセスへ切り替えると、ページテーブルの差し替えに伴ってTLBやキャッシュの内容が無効化され、コストが跳ね上がります。切り替えが過剰に頻発する状態(スラッシングや過剰なスレッド)は、CPUが本来の処理ではなく切り替えに忙殺され、全体を遅くします。
まとめ
- コンテキストスイッチは、CPU が 実行対象を別のプロセス/スレッドへ切り替える 処理。
- レジスタ・PC・スタックポインタ などを退避・復元し、続きから再開できるようにする。
- 時間切れ・I/O 待ち・割り込み・優先度変化などを契機に起こる。
- それ自体は 仕事をしないオーバーヘッド で、プロセス間切替は特に重い。
OS Article
コンテキストスイッチを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
コンテキストスイッチ
比較で見る軸
難易度: intermediate / カテゴリ: OS / タグ数: 4
導入後に効く点
走っていた側のレジスタやPCを退避し、次に走る側の状態を復元することで切り替えます。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- OS
- タグ数
- 4
判断チェックリスト
- 自社の用途が「コンテキストスイッチ / スケジューリング」に近いか確認する。
- 強みである「コンテキストスイッチは、CPU が実行中のプロセス/スレッドを別のものへ切り替える処理です。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。