Önbellek Tutarlılığı ve Senkronizasyonu

Bu bölümde, çoklu önbellek tutarsızlığı sorunları ile başa çıkmak için önbellek tutarlılık protokollerini tartışacağız.

Önbellek Tutarlılığı Sorunu

Çok işlemcili bir sistemde, veri tutarsızlığı bitişik seviyeler arasında veya hafıza hiyerarşisinin aynı seviyesi içinde meydana gelebilir. Örneğin, önbellek ve ana bellekte aynı nesnenin tutarsız kopyaları olabilir.

Birden çok işlemci paralel olarak çalıştığından ve bağımsız olarak birden çok önbellek aynı bellek bloğunun farklı kopyalarına sahip olabileceğinden, bu, cache coherence problem. Cache coherence schemes önbelleğe alınan her veri bloğu için tek tip bir durum sağlayarak bu sorunu önlemeye yardımcı olur.

X, iki işlemci, P1 ve P2 tarafından referans verilen paylaşılan verilerin bir öğesi olsun. Başlangıçta, X'in üç kopyası tutarlıdır. İşlemci P1, önbelleğe yeni bir veri X1 yazarsa,write-through policyaynı kopya hemen paylaşılan hafızaya yazılacaktır. Bu durumda, önbellek ile ana hafıza arasında tutarsızlık oluşur. Zamanwrite-back policy kullanılırsa, önbellekteki değiştirilmiş veriler değiştirildiğinde veya geçersiz kılındığında ana bellek güncellenecektir.

Genel olarak, tutarsızlık sorununun üç kaynağı vardır -

  • Yazılabilir verilerin paylaşılması
  • Süreç geçişi
  • I / O etkinliği

Snoopy Bus Protokolleri

Snoopy protokolleri, veri yolu tabanlı bir bellek sistemi aracılığıyla önbellek ve paylaşılan bellek arasında veri tutarlılığı sağlar. Write-invalidate ve write-update ilkeler, önbellek tutarlılığını korumak için kullanılır.

Bu durumda, yerel önbellek hafızasında ve paylaşılan hafızada (Şekil-a) tutarlı bir veri öğesi 'X' kopyasına sahip üç işlemcimiz P1, P2 ve P3 var. İşlemci P1, X1'i önbelleğine şu şekilde yazar:write-invalidate protocol. Yani, diğer tüm kopyalar veri yolu aracılığıyla geçersiz kılınır. 'I' ile gösterilir (Şekil-b). Geçersiz kılınan bloklar şu şekilde de bilinir:dirtyyani kullanılmamalıdırlar. write-update protocoltüm önbellek kopyalarını veri yolu üzerinden günceller. Kullanarakwrite back cachehafıza kopyası da güncellenir (Şekil-c).

Önbellek Olayları ve Eylemleri

Hafıza erişimi ve geçersiz kılma komutlarının yürütülmesinde aşağıdaki olaylar ve eylemler gerçekleşir -

  • Read-miss- Bir işlemci bir bloğu okumak istediğinde ve bu önbellekte olmadığında, bir okuma-kaçırma meydana gelir. Bu birbus-readoperasyon. Kirli kopya yoksa, tutarlı bir kopyası olan ana bellek, talepte bulunan önbelleğe bir kopya sağlar. Uzak bir önbellekte kirli bir kopya varsa, bu önbellek ana hafızayı kısıtlar ve talep eden önbelleğe bir kopya gönderir. Her iki durumda da, önbellek kopyası, bir okuma kaybından sonra geçerli duruma girecektir.

  • Write-hit - Kopya kirliyse veya reserveddurum, yazma yerel olarak yapılır ve yeni durum kirli. Yeni durum geçerliyse, yazma-geçersiz kılma komutu tüm önbelleklere yayınlanır ve kopyalarını geçersiz kılar. Paylaşılan hafıza üzerinden yazıldığında, ortaya çıkan durum bu ilk yazma işleminden sonra rezerve edilir.

  • Write-miss- Bir işlemci yerel önbelleğe yazamazsa, kopya ya ana bellekten ya da kirli bloğu olan uzak bir önbellekten gelmelidir. Bu bir göndererek yapılırread-invalidatekomut, tüm önbellek kopyalarını geçersiz kılacaktır. Daha sonra yerel kopya kirli durumla güncellenir.

  • Read-hit - Okuma-vuruşu her zaman yerel önbellekte bir durum geçişine neden olmadan veya geçersiz kılma için gözetleme veri yolunu kullanmadan gerçekleştirilir.

  • Block replacement- Bir kopya kirlendiğinde, blok değiştirme yöntemi ile ana belleğe geri yazılır. Bununla birlikte, kopya geçerli veya ayrılmış veya geçersiz durumda olduğunda, değiştirme işlemi yapılmayacaktır.

Dizin Tabanlı Protokoller

Yüzlerce işlemciye sahip büyük bir çok işlemcili oluşturmak için çok aşamalı bir ağ kullanarak, meraklı önbellek protokollerinin ağ yeteneklerine uyacak şekilde değiştirilmesi gerekir. Çok aşamalı bir ağda yayın yapmak çok pahalıdır, tutarlılık komutları yalnızca bloğun bir kopyasını tutan önbelleklere gönderilir. Ağa bağlı çok işlemciler için dizin tabanlı protokollerin geliştirilmesinin nedeni budur.

Dizin tabanlı bir protokol sisteminde, paylaşılacak veriler, önbellekler arasındaki tutarlılığı koruyan ortak bir dizine yerleştirilir. Burada dizin, işlemcilerin birincil bellekten önbelleğine bir girdi yüklemek için izin istediği bir filtre görevi görür. Bir girdi değiştirilirse, dizin onu ya günceller ya da o girdiyle diğer önbellekleri geçersiz kılar.

Donanım Senkronizasyon Mekanizmaları

Senkronizasyon, veri kontrolü yerine, aynı veya farklı işlemcilerde bulunan iletişim süreçleri arasında bilgi alışverişinin yapıldığı özel bir iletişim şeklidir.

Çok işlemcili sistemler, düşük seviyeli senkronizasyon işlemlerini uygulamak için donanım mekanizmalarını kullanır. Çoğu çok işlemcinin, bazı senkronizasyon ilkellerini uygulamak için bellek okuma, yazma veya okuma-değiştirme-yazma işlemleri gibi atomik işlemleri empoze eden donanım mekanizmaları vardır. Atomik bellek işlemleri dışında, bazı işlemciler arası kesintiler de senkronizasyon amacıyla kullanılır.

Paylaşılan Bellek Makinelerinde Önbellek Tutarlılığı

Önbellek tutarlılığını korumak, işlemciler yerel önbellek içerdiğinde çok işlemcili sistemde bir sorundur. Bu sistemde farklı önbellekler arasında veri tutarsızlığı kolaylıkla ortaya çıkar.

Başlıca endişe alanları:

  • Yazılabilir verilerin paylaşılması
  • Süreç geçişi
  • I / O etkinliği

Yazılabilir verilerin paylaşılması

İki işlemcinin (P1 ve P2) yerel önbelleklerinde aynı veri elemanına (X) sahip olması ve bir işlemin (P1) veri elemanına (X) yazması durumunda, önbellekler P1'in yerel önbelleğinin üzerinden yazılırken, ana bellek ayrıca güncellendi. Şimdi P2, veri elemanını (X) okumaya çalıştığında, X'i bulamaz çünkü P2 önbelleğindeki veri elemanı güncelliğini yitirmiştir.

Süreç geçişi

İlk aşamada, P1 önbelleğinde X veri öğesi bulunurken, P2 hiçbir şeye sahip değildir. P2 üzerindeki bir süreç önce X üzerine yazar ve sonra P1'e geçer. Şimdi, işlem X veri elemanını okumaya başlar, ancak işlemci P1 güncel olmayan verilere sahip olduğu için süreç onu okuyamaz. Böylece, P1 üzerindeki bir işlem X veri öğesine yazar ve ardından P2'ye geçer. Geçişten sonra, P2 üzerindeki bir işlem veri öğesi X'i okumaya başlar, ancak ana bellekte X'in eski bir sürümünü bulur.

I / O etkinliği

Şekilde gösterildiği gibi, iki işlemcili çok işlemcili bir mimaride veri yoluna bir G / Ç aygıtı eklenir. Başlangıçta, her iki önbellek de veri elemanı X'i içerir. G / Ç cihazı yeni bir X elemanı aldığında, yeni elemanı doğrudan ana bellekte depolar. Şimdi, P1 veya P2 (P1 varsayalım) X öğesini okumaya çalıştığında, güncel olmayan bir kopya alır. Böylece P1, X öğesine yazar. Şimdi, G / Ç cihazı X'i iletmeye çalışırsa, güncel olmayan bir kopya alır.

Tekdüzen Bellek Erişimi (UMA)

Tekdüzen Bellek Erişimi (UMA) mimarisi, paylaşılan belleğin sistemdeki tüm işlemciler için aynı olduğu anlamına gelir. Yaygın olarak (dosya) sunucular için kullanılan popüler UMA makineleri sınıfları, Simetrik Çok İşlemciler (SMP'ler) olarak adlandırılır. Bir SMP'de bellek, diskler, diğer G / Ç aygıtları vb. Gibi tüm sistem kaynaklarına işlemciler tarafından tek tip bir şekilde erişilebilir.

Tek Tip Olmayan Bellek Erişimi (NUMA)

NUMA mimarisinde, ölçeklenebilir mesaj geçirme ağına bağlı dahili dolaylı / paylaşılan ağa sahip birden çok SMP kümesi vardır. Bu nedenle, NUMA mimarisi, mantıksal olarak paylaşılan fiziksel olarak dağıtılmış bellek mimarisidir.

Bir NUMA makinesinde, bir işlemcinin önbellek denetleyicisi, bir bellek referansının SMP'nin belleğine yerel mi yoksa uzak mı olduğunu belirler. Uzak bellek erişimlerinin sayısını azaltmak için, NUMA mimarileri genellikle uzak verileri önbelleğe alabilen önbelleğe alma işlemcileri uygular. Ancak önbellekler söz konusu olduğunda, önbellek tutarlılığının sürdürülmesi gerekir. Dolayısıyla bu sistemler aynı zamanda CC-NUMA (Önbellek Tutarlı NUMA) olarak da bilinir.

Yalnızca Önbellek Bellek Mimarisi (COMA)

COMA makineleri NUMA makinelerine benzer, tek fark, COMA makinelerinin ana belleklerinin doğrudan eşlemeli veya set-çağrışımlı önbellekler olarak davranmasıdır. Veri blokları adreslerine göre DRAM önbelleğindeki bir konuma karma hale getirilir. Uzaktan alınan veriler aslında yerel ana bellekte depolanır. Dahası, veri bloklarının sabit bir ana konumu yoktur, sistem içinde serbestçe hareket edebilirler.

COMA mimarileri çoğunlukla hiyerarşik bir mesaj geçirme ağına sahiptir. Böyle bir ağaçtaki bir anahtar, alt ağacı olarak veri öğeleri içeren bir dizin içerir. Verilerin ev konumu olmadığından, açıkça aranmalıdır. Bu, uzaktan erişimin, gerekli veriler için dizinlerinde arama yapmak için ağaçtaki anahtarlar boyunca bir geçiş gerektirdiği anlamına gelir. Dolayısıyla, ağdaki bir anahtar kendi alt ağacından aynı veri için birden fazla istek alırsa, bunları anahtarın üst kuruluşuna gönderilen tek bir istekte birleştirir. İstenen veriler geri döndüğünde, anahtar alt ağacının altına birden çok kopyasını gönderir.

COMA ve CC-NUMA

COMA ve CC-NUMA arasındaki farklar aşağıdadır.

  • COMA, CC-NUMA'dan daha esnek olma eğilimindedir, çünkü COMA, işletim sistemine ihtiyaç duymadan verilerin geçişini ve çoğaltılmasını şeffaf bir şekilde destekler.

  • COMA makineleri pahalı ve karmaşıktır çünkü standart olmayan bellek yönetimi donanımına ihtiyaç duyarlar ve tutarlılık protokolünün uygulanması daha zordur.

  • Verileri bulmak için ağaç ağının üzerinden geçilmesi gerektiğinden, COMA'daki uzaktan erişimler genellikle CC-NUMA'dakilerden daha yavaştır.