Context switch nedir? Neden maliyetlidir?
Cevap
Context switch, CPU'nun çalışmakta olan bir thread/process'i durdurup başka birini çalıştırmaya geçmesidir. İşletim sistemi zamanlayıcısı (scheduler) bunu çok çekirdekli olsa bile sürekli yapar; böylece aynı anda çalışıyormuş izlenimi oluşur.
Ne zaman olur?
- Zaman dilimi (time slice) dolunca: preemptive zamanlama.
- Thread I/O beklemeye, kilide veya
sleep'e girince: gönüllü bırakma. - Daha yüksek öncelikli bir iş hazır olunca.
- Kesme (interrupt) işlenirken.
Adımlar
- Mevcut iş parçacığının durumu (register'lar, program sayacı, stack pointer) PCB/TCB'ye kaydedilir.
- Scheduler sıradaki işi seçer.
- Yeni işin durumu yüklenir.
- Farklı bir process'e geçiliyorsa adres alanı da değişir: sayfa tablosu değiştirilir ve TLB büyük oranda geçersizleşir.
Neden maliyetli?
- Doğrudan maliyet: kayıt/yükleme ve çekirdek moduna geçiş (mikrosaniyeler mertebesinde).
- Dolaylı maliyet (asıl büyük olan): CPU önbellekleri ve TLB yeni iş için "soğuk"tur; önbellek ıskaları performansı düşürür.
- Thread geçişi, aynı adres alanında kaldığı için process geçişinden ucuzdur.
Pratik sonuçları
- Binlerce thread açmak çok fazla context switch'e yol açar; bunun yerine thread havuzu kullanılır.
- Node.js event loop, Go goroutine'leri, Java virtual thread'leri,
asynciogibi modeller, çok sayıda eşzamanlı işi az sayıda OS thread'iyle yürüterek bu maliyeti azaltır.
İlgili İşletim Sistemleri soruları
- Concurrency ile parallelism arasındaki fark nedir?
- Race condition nedir? Bir örnekle nasıl önleneceğini gösterin.
- Virtual memory ve paging nasıl çalışır? Page fault nedir?
- Mutex ile semaphore arasındaki fark nedir?
- Deadlock nedir? Oluşması için gereken dört koşul nelerdir ve nasıl önlenir?
- Process ile thread arasındaki fark nedir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.