Konu bağlam anahtarı Vs. işlem bağlam anahtarı


Yanıtlar:


205

Bir iş parçacığı anahtarı ile bir işlem anahtarı arasındaki temel ayrım, bir iş parçacığı anahtarı sırasında sanal bellek alanının aynı kalmasına karşın bir işlem anahtarı sırasında kalmamasıdır. Her iki tür de bağlam anahtarını gerçekleştirmek için denetimi işletim sistemi çekirdeğine devretmeyi içerir. Kayıtları kapatma maliyetiyle birlikte işletim sistemi çekirdeğine girip çıkma işlemi, bir bağlam anahtarı gerçekleştirmenin en büyük sabit maliyetidir.

Daha belirsiz bir maliyet, bağlam anahtarının işlemcilerin önbellekleme mekanizmalarıyla uğraşmasıdır. Temel olarak, bağlam değiştirdiğinizde, işlemcinin önbelleğinde "hatırladığı" tüm bellek adresleri etkin bir şekilde işe yaramaz hale gelir. Buradaki en büyük ayrım, sanal bellek alanlarını değiştirdiğinizde, işlemcinin Translation Lookaside Buffer (TLB) veya eşdeğerinin boşaltılarak bellek erişimini bir süre çok daha pahalı hale getirmesidir. Bu, iş parçacığı geçişi sırasında olmaz.


8
Bu, TLB ve önbelleğin her giriş için pid depolamadığını varsayar.
dramzy

2
IMHO @dramzy haklı, işletim sistemi, burada kısaca bahsedilen Rapid Context Switching'i destekleyebilir: youtu.be/3akTtCu_F_k?t=46m8s (Sanal Bellek, sayfa tabloları ve TLB hakkında daha fazla bilgi edinmek için baştan izleyin).
piotrwest

@piotrwest Genel işletim sistemlerinden herhangi biri Rapid Context Switching'i destekliyor mu?
en fazla

2
@dramzy İşletim sisteminin veya donanımın pid'i depolayabileceğini mi söylediniz? Mı bu alakalı?
en fazla

Aklımda sadece Linux'ta iş parçacığı anahtarı var (kesin değil), bu yüzden Linux OS çalıştırılacak bir sonraki iş parçacığının programlanacak olan çalışan iş parçacığı ile kaydetme pidine sahip olup olmadığını kontrol edecek.
roachsinai

16

İşlem bağlamı değiştirme, bellek adres alanını değiştirmeyi içerir. Bu, bellek adreslerini, eşlemeleri, sayfa tablolarını ve nispeten pahalı bir işlem olan çekirdek kaynaklarını içerir. Bazı mimarilerde, adres alanlarında paylaşılamayan çeşitli işlemci önbelleklerini temizlemek anlamına bile gelir. Örneğin, x86'nın TLB'yi temizlemesi ve bazı ARM işlemcilerin L1 önbelleğinin tamamını temizlemesi gerekir!

İş parçacığı değiştirme, aynı süreçte bir iş parçacığından diğerine bağlam geçişidir (süreçler arasında iş parçacığından iş parçacığına geçiş yalnızca işlem değiştirmedir) İşlemci durumunun değiştirilmesi (program sayacı ve kayıt içeriği gibi) genellikle çok verimlidir.


13

Öncelikle, işletim sistemi, halihazırda orada değilse, giden iş parçacığını bir çekirdek kipine getirir, çünkü evre anahtarı yalnızca çekirdek modunda çalışan evreler arasında gerçekleştirilebilir. Daha sonra programlayıcı, geçişin gerçekleştirileceği iş parçacığı hakkında bir karar vermek için çağrılır. Karar verildikten sonra çekirdek, işlemcide (CPU kayıtları) bulunan iş parçacığı bağlamının bir kısmını bellekteki ayrılmış yere (genellikle giden iş parçacığının çekirdek yığınının üstünde) kaydeder. Daha sonra çekirdek, giden iş parçacığının çekirdek yığınından gelen iş parçacığının çekirdek yığınına geçiş yapar. Bundan sonra, çekirdek, bellekten CPU kayıtlarına önceden depolanmış gelen evre bağlamını yükler. Ve son olarak kontrolü kullanıcı moduna geri döndürür, ancak yeni iş parçacığının kullanıcı modunda. İşletim sisteminin gelen iş parçacığının içinde çalıştığını belirlemesi durumundabaşka bir işlem, çekirdek ek bir adım daha gerçekleştirir: yeni etkin sanal adres alanı ayarlar.

Her iki senaryodaki ana maliyet önbellek kirliliğiyle ilgilidir. Çoğu durumda, giden iş parçacığı tarafından kullanılan çalışma kümesi, gelen iş parçacığı tarafından kullanılan çalışma kümesinden önemli ölçüde farklı olacaktır. Sonuç olarak, gelen iş parçacığı, çığ gibi önbellek kaçırmalarıyla yaşamına başlayacak, böylece eski ve yararsız verileri önbelleklerden temizleyecek ve yeni verileri bellekten yükleyecektir. Aynısı TLB için de geçerlidir (CPU'da bulunan Translation Bakma Tamponu). Sanal adres alanının sıfırlanması durumunda (iş parçacıkları farklı işlemlerde çalışır) ceza daha da kötüdür çünkü sanal adres alanının sıfırlanması tüm TLB'nin, hattayeni iş parçacığı aslında yalnızca birkaç yeni giriş yüklemesi gerekiyorsa. Sonuç olarak, yeni iş parçacığı zaman kuantumuna çok sayıda TLB kaçırma ve sık sık sayfa yürüyüşü ile başlayacak. İş parçacığı anahtarının doğrudan maliyeti de ihmal edilebilir değildir (~ 250 ve ~ 1500-2000 döngüye kadar) ve CPU karmaşıklığına, hem iş parçacığının durumlarına hem de gerçekte kullandıkları yazmaç kümelerine bağlıdır.

Not: Bağlam değiştirme ek yükü hakkında iyi bir gönderi: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html


3
  • işlem değiştirme: çok programlama ortamında sürecin iki yerleşik belleği arasında bir geçiştir;
  • bağlam değiştirme: bir yürütme programından bir kesinti servis rutinine (ISR) değişen bir bağlamdır.

2

Thread Context Switching'de sanal bellek alanı Process Context Switch durumunda değilken aynı kalır. Ayrıca, Process Context Switch, Thread Context Switch'ten daha pahalıdır.


0

Bence temel fark, switch_mm()eski ve yeni görevin hafıza tanımlayıcılarını işleyen arama sırasında . Evreler durumunda, sanal bellek adres alanı değişmez (iş parçacıkları sanal belleği paylaşır), bu nedenle çok az şey yapılması gerekir ve bu nedenle daha az maliyetlidir.


0

İş parçacığı bağlamını değiştirmenin yürütme bağlamını (kayıtlar, yığın işaretçileri, program sayaçları) değiştirmesi gerekmesine rağmen, işlem bağlam anahtarlarının yaptığı gibi adres alanını değiştirmeleri gerekmez. Adres alanını değiştirdiğinizde ek bir maliyet vardır, daha fazla bellek erişimi (sayfalama, bölümleme, vb.) Ve yeni bir işleme girerken veya çıkarken TLB'yi temizlemeniz gerekir ...


-1

Kısacası, iş parçacığı bağlam anahtarı yepyeni bir bellek ve pid kümesi atamaz, aynı süreç içinde çalıştığı için üst öğe ile aynı şeyi kullanır. Bir süreç, yeni bir süreci ortaya çıkarır ve böylece yeni mem ve pid atar.

Daha fazlası var. Bunun üzerine kitaplar yazdılar.

Maliyete gelince, bir işlem bağlamı anahtarı >>>> iş parçacığı, tüm yığın sayaçlarını vb. Sıfırlamanız gerekir.


-1

İşletim Sisteminin çalıştırdığı CPU'nun Takılı Bazı Yüksek Gecikmeli Aygıtlara sahip olduğunu varsayarsak,

Yüksek gecikmeli cihaz yanıt verirken İşlemin Adres Alanının başka bir iş parçacığını çalıştırmak mantıklıdır.

Ancak, Yüksek Gecikme Aygıtı gerekli zamandan daha hızlı yanıt veriyorsa, YENİ bir İşlem için tablo kurulumu + Sanaldan Fiziksel belleğe çevirme, bir anahtarın gerekli olup olmadığı sorgulanabilir.

Ayrıca, HOT önbelleği (işlemi / iş parçacığını çalıştırmak için gereken verilere daha kısa sürede ulaşılabilir) daha iyi bir seçimdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.