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

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

💡 CPUが「作業の切り替え」をするときの状態保存と復元
📌 このページのポイント
コンテキストスイッチの仕組み 時間 → プロセスA プロセスB プロセスA 実行中 状態を保存 オーバーヘッド CPU切替 状態を復元 プロセスB 実行中 切替... A復帰 保存される状態 (PCB) - レジスタの値 - プログラムカウンタ (PC) - スタックポインタ - メモリマッピング オーバーヘッドの要因 - レジスタの退避/復元 - TLBフラッシュ - キャッシュミス増加 - パイプラインの無効化 スレッドとの比較 スレッド切替は軽量 (同一メモリ空間を共有) プロセス {'>'} スレッド 切替コストの大小
コンテキストスイッチの仕組み
ひよこ ひよこ

コンテキストスイッチって何?なんで必要なの?

ペンギン先生 ペンギン先生

PCで同時にブラウザと音楽プレーヤーを動かせるよね。でもCPUのコアは一度に一つの処理しかできない。だからOSが超高速で「ブラウザの処理→音楽の処理→ブラウザ→音楽→…」って切り替えてるんだ。その切り替え操作がコンテキストスイッチだよ。

ひよこ ひよこ

切り替えのとき、元の作業はどうなるの?

ペンギン先生 ペンギン先生

レジスタの値やプログラムカウンター(次に実行する命令のアドレス)などを「PCB(プロセス制御ブロック)」というメモリの領域に保存するんだ。切り替え先の処理が終わったら、保存した情報を復元して、続きから再開する。

ひよこ ひよこ

おもしろい!コンテキストスイッチが多いとなぜ遅くなるの?

ペンギン先生 ペンギン先生

切り替えの時間自体は数マイクロ秒だけど、それだけじゃなくてキャッシュメモリの内容もリセットされるんだ。別のプロセスのデータに切り替わるからキャッシュが使えなくなって、メモリを読み直す時間がかかる。これが積み重なると性能に響く。

ひよこ ひよこ

プロセスの切り替えとスレッドの切り替えって何が違うの?

ペンギン先生 ペンギン先生

スレッド切り替えのほうが軽いんだけど、理由が少し複雑でね。プロセスは独立したメモリ空間を持つから、切り替え時にページテーブル(仮想アドレスの対応表)まで切り替わる。これがTLB(変換索引バッファ)のフラッシュを引き起こして重い。同じプロセス内のスレッドはメモリ空間を共有してるから、TLBフラッシュが不要で軽い。「スレッドは軽量プロセス」と言われる一番の理由はここなんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コンテキストスイッチ」って出てきたら「CPUが作業を切り替えるときの状態保存・復元操作だな」と思えばだいたいOK!
📖 おまけ:英語の意味
「Context Switch」 = 文脈の切り替え
💬 Context(文脈・状態)Switch(切り替え)。「今何をやっていたか」という文脈をまるごと保存して切り替えるイメージ
← 用語集にもどる