コンテキストスイッチ (context switch) は、kernel が現在実行中のスレッドの CPU 状態 (レジスタ、プログラムカウンタ、スタックポインタ) を保存し、別のスレッドのそれを復元することで、1 つのコアが多数のスレッドを多重化できるようにするものです。scheduler のプリエンプション、ブロッキング syscall、割り込みのたびに起こり — そして無料ではありません。
コストはどこに隠れているか
text
DIRECT cost (visible, ~1–5 µs):
save/restore registers · run scheduler logic · switch kernel stacks
if PROCESS switch: also swap page tables (CR3) → FLUSHES the TLB
INDIRECT cost (often much larger):
cold CPU CACHES → the new thread's data isn't in L1/L2/L3 → cache misses to RAM
cold TLB → address translations must be re-walked
lost pipeline / branch-predictor state
コストは数マイクロ秒です。 コスト — スイッチ後の冷えたキャッシュと TLB — がしばしばより大きな打撃です: 入ってきたスレッドは、メインメモリからキャッシュを再び暖める間しばらく遅く走ります (ミスごとに数十〜数百サイクル)。
