Ana içeriğe geç

Context Switch

Bağlam Geçişi

Türkçe karşılığı
bağlam değiştirme
Okunuşu
kontekst suiç

Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/context-switch

Kısaca

Context switch, işletim sisteminin çalışan thread veya process'in durumunu kaydedip CPU'yu kullanabilmesi için başka birinin durumunu geri yüklemesidir.

Context switch (bağlam geçişi) nedir?

Bir CPU çekirdeği aynı anda yalnızca bir thread çalıştırabilir; bu yüzden birçok thread çalışmak istediğinde işletim sistemi aralarında sırayla dönüşüm yapar. Context switch, birini çıkarıp diğerini içeri almaktır. Bağlam (context), bir görevi daha sonra tam olarak durduğu yerden sürdürmek için gereken her şeydir: CPU yazmaçları, program sayacı, yığın işaretçisi ve bir process için bellek eşlemeleri.

Geçiş, bir thread'in zaman dilimi bittiğinde ve bir zamanlayıcı interrupt'ı tetiklendiğinde, bir thread disk veya ağ I/O'su, bir kilit ya da bir uyku beklediği için bloke olduğunda ya da daha yüksek öncelikli bir thread hazır olduğunda gerçekleşir. Kernel mevcut thread'in yazmaçlarını kaydeder, zamanlayıcı bir sonraki thread'i seçer ve kernel o thread'in kaydedilmiş yazmaçlarını yükler. Sonraki thread farklı bir process'e aitse kernel o process'in sayfa tablolarına da geçer. Geçişin kendisi yalnızca mikrosaniyeler sürer, ancak gizli maliyet daha büyüktür: yeni thread soğuk CPU önbellekleri ve adres çevirileriyle başlar, bu yüzden bir süre yavaş çalışır.

Aynı anda birkaç yemek pişiren bir şef düşünün. Çorbadan makarnaya geçmek için çorba tarifinde nerede kaldığını not eder, tencereyi kenara koyar ve makarna notlarını alır. Her birkaç saniyede bir geçiş yaparsa yemek pişirmekten çok kayıt tutmaya zaman harcar. Binlerce thread'i olan sunucuların CPU zamanının büyük kısmını geçişlere harcayabilmesinin ve olay döngülerinin, asenkron I/O'nun ve thread havuzlarının çok sayıda bağlantıyı yönetmek için popüler olmasının nedeni budur.

Context switch, CPU zamanlamayla aynı şey değildir: zamanlama, sırada hangi görevin çalışacağı kararıdır; context switch ise bu kararı yerine getiren mekanizmadır. Ayrıca bir system call'daki mod geçişinden de farklıdır; orada başka bir thread devralmadan aynı thread kullanıcı modundan kernel'a geçip geri döner ve bu çok daha ucuzdur. Aynı process'in thread'leri arasında geçiş yapmak da process'ler arasında geçiş yapmaktan daha ucuzdur; çünkü bellek eşlemeleri aynı kalır.

Önemli noktalar

  • Context switch, bir görevin CPU durumunu kaydeder ve başka birininkini geri yükler.
  • Zaman dilimlerinin bitmesi, bloke eden I/O, kilitler veya daha yüksek öncelikli iş tarafından tetiklenir.
  • Doğrudan maliyeti mikrosaniyelerdir, ancak soğuk önbellekler gizli ek yük getirir.
  • Çok fazla geçiş CPU zamanını boşa harcar; olay döngüleri ve thread havuzları bu yüzden vardır.
  • Zamanlama sırada ne çalışacağına karar verir; context switch bunu gerçekleştirir.

Örnek

Linux'ta context switch'leri ölçmekbash
# System-wide context switches per second (the "cs" column)
vmstat 1 5

# Voluntary (blocked) vs involuntary (preempted) switches for this shell
grep ctxt_switches /proc/$$/status

# Per-process switch rates, once per second (from the sysstat package)
pidstat -w 1 5

Sık sorulan sorular

Context switch'ler neden pahalıdır?

Yazmaçları kaydetmek ve yüklemek hızlıdır, ancak yeni görev CPU önbelleklerini ve adres çevirme tamponlarını önceki görevin verisiyle dolu bulur. Bunlar tekrar ısınana kadar bellek erişimleri çok daha yavaştır.

Gönüllü ve gönülsüz context switch'ler arasındaki fark nedir?

Gönüllü geçiş, bir thread'in I/O ya da bir kilit beklemek gibi nedenlerle CPU'yu kendisinin bırakmasıyla olur. Gönülsüz geçiş ise zamanlayıcının hâlâ çalışmak isteyen bir thread'i, genellikle zaman dilimi bittiği için kesmesiyle olur.

Thread'ler arasında geçiş yapmak process'ler arasında geçişten daha ucuz mudur?

Evet. Aynı process'in thread'leri tek bir adres alanını paylaşır; bu yüzden kernel'ın sayfa tablolarını değiştirmesi gerekmez ve önbelleğe alınmış verinin daha büyük kısmı yararlı kalır.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar