【こんてきすとすいっち】

コンテキストスイッチ とは?

最終更新:
💡 CPUが「作業の切り替え」をするときの状態保存と復元

CPUが実行中のプロセスやスレッドを切り替えるときに、現在の状態を保存して別の処理を開始する操作。マルチタスクの基盤となる仕組み。

📌 このページのポイント
状態を保存・復元し、実行先を切り替える一つのCPUの実行場所を、時間順に表示A実行処理中A保存状態をB復元状態をB実行処理中続きのための状態レジスタ・実行位置など切替処理の負担キャッシュ等の影響切り替わる理由やコストはOS・CPUによる
Aを保存してBを復元する一回の切り替えを時間順に示した概念図。区間の横幅は所要時間の比ではありません。CPUキャッシュやTLBが毎回すべて消去されることを示す図ではありません。
ひよこ ひよこ
コンテキストスイッチって何?
ペンギン先生 ペンギン先生
実行中の状態を保存して、別の処理の状態を復元する操作だよ。OSは実行するスレッドを選び、CPUの実行を切り替える。同じ実行場所を順に使えるので、複数のアプリを動かす基盤になるんだ
ひよこ ひよこ
いつも決まった間隔で切り替えるの?
ペンギン先生 ペンギン先生
実行時間の区切りだけではないよ。入出力などを待つときや、より優先度の高いスレッドが実行できるようになったときなどにも切り替わる。複数のCPUがあれば、別々の処理を並列に実行することもできるんだ
ひよこ ひよこ
元の作業は、どうやって続きから再開するの?
ペンギン先生 ペンギン先生
レジスタや実行位置、スタックなどの状態を保存しておき、再び選ばれたら復元するよ。保存場所や対象はOSやCPUによる。切り替え先が終了したときだけ戻るのでも、元のメモリー全体を毎回コピーするのでもないんだ
ひよこ ひよこ
切り替えが多いと、なぜ遅くなるの?
ペンギン先生 ペンギン先生
保存・復元などの処理時間がかかるからだよ。また、次の処理が必要とするデータやアドレス変換が手元にないと、読み直しの負担もある。ただしキャッシュの内容が切り替えのたびに全て消えるわけではなく、影響はCPUやOS、実行する処理によるんだ
ひよこ ひよこ
スレッドの切り替えは、必ず軽いの?
ペンギン先生 ペンギン先生
同じプロセス内ならアドレス空間を共有するので、その切り替えを避けられるよ。でもレジスタなどの保存・復元は必要。別プロセスへの切り替えでも、CPUの識別機能などでTLB全体の消去を避ける場合があり、コストの大小は一律には決められないんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コンテキストスイッチ」って出てきたら「CPUが作業を切り替えるときの状態保存・復元操作だな」と思えばだいたいOK!
📖 おまけ:英語の意味
「Context Switch」 = 実行状態の切り替え
💬 Contextは実行を続けるための状態、Switchは切り替えだよ。メモリーの中身全体を毎回コピーするのではなく、続きから再開するための状態を扱うんだ

参考資料

← 用語集にもどる