Önbellek tutarlılığı
Önbellek tutarlılığı, paylaşılan kaynağın yerel önbelleğinde kaydedilen verinin tutarlılığını ifade eder. Bir bilgisayar sistemindeki istemciler ortak bir bellek kaynağının önbelleğini kullandıklarında, tutarsız verilerle ilgili sorunlar ortaya çıkabilir. Bu, bilhassa, çoklu işleme yapan sistemlerdeki merkezi işlem birimi için geçerlidir.
Paylaşılan Belleğe Bağlı Önbellekler şekline istinaden, üstteki istemcide bir önceki okumasından kalan bir bellek öbeği kopyası varsa ve alttaki istemci o bellek öbeğini değiştirirse, üstteki istemci değişiklikten habersiz olarak geçersiz bir önbellek bilgisiyle kalacaktır. Önbellek tutarlılığı bu gibi çakışmaları idare etmek ve önbellek ile bellek arasındaki tutarlılığı muhafaza etmeyi amaçlar.
Tutarlılık Protokolü[değiştir | kaynağı değiştir]
Tutarlılık protokolü dağıtık-paylaşımlı bir bellek sisteminde, önbellekler arasındaki tutarlılığı muhafaza eden protokoldür. Bu protokol belirli bir uyumluluk (consistency) modeline göre bellek tutarlılığını sağlar. Eski çoklu işlemci sistemleri sıralı uyumluluk (sequential consistency) modelini desteklerken yeni sistemler genellikle serbest (release) veya zayıf (weak) uyumluluk modellerini destekler.
Bu protokollerin durumlar arası geçişleri her gerçekleştirme için farklı olabilir. Örneğin belli bir gerçekleştirme, okumada-güncelle, yazmada-güncelle, okumada-geçersiz-kıl, yazmada-geçersiz-kıl gibi güncelleme ve geçersiz kılma durum geçişlerinden birini seçebilir. Geçiş seçimi önbellekler arası trafik miktarını etkileyebilir. Bu da gerçekte mümkün olan bant genişliğine bağlı olabilir. İşlemci önbellekleri arasında yoğun çekişmeye sebep olabilecek dağıtık yazılım tasarımında bunun dikkate alınması gerekir.
Önbellek tutarlılığını muhafaza etmek için muhtelif model ve protokoller tasarlanmıştır. MSI, MESI (Illinois protokolü), MOSI, MOESI, MERSI, MESIF, tek-yaz, Synapse, Berkeley, Firefly ve Dragon protokolleri bunlardan bazılarıdır.
Bir protokol işlemci önbelleklerini, önbellekteki veri hedef belleğe transfer edilmeden önce kaybedilmeyecek şekilde idare eder. İki veya daha fazla bilgisayar işlemcisi bir program üzerinde birlikte çalıştığında, her bir işlemci genellikle ortak kullanılan ve daha büyük olan RAM'den ayrı olarak kendi önbelleğine sahiptir. Önbellek, bellek için kullanılan dinamik RAM'e (DRAM) göre yüksek hızlı statik RAM'den (SRAM) yapılmış bir parçadır. Programların çoğu aynı veri veya buyruklara sık sık eriştiklerinden, bellek verisini önbelleğe almak çok etkin bir yöntemdir. Erişilen bilgiyi olabildiğince SRAM'de tutarak bilgisayar, daha yavaş olan DRAM'e erişmek durumunda kalmaz. Kendi önbelleklerine sahip birden çok işlemci ortak bir ana-belleği paylaştığında, paylaşılan ve herhangi bir önbellekte değiştirilmiş verinin bütün sistemde değiştirilmiş olmasını temin ederek önbellekleri tutarlı tutmak gerekir. Bu iki yolla yapılır: dizin (directory) veya gözetleme (snooping) tabanlı bir sistemle.
Dizin-tabanlı bir sistemde paylaşılan veri, önbellekler arası tutarlılığı idare eden ortak bir dizine konulur. Bu dizin, işlemcinin ana bellekten bir öğeyi kendi önbelleğine yüklemek için izin istemesi gereken bir filtre gibidir. Bir öğe değiştirildiğinde, dizin bu öğeye sahip diğer önbellekleri günceller veya geçersiz kılar. Gözetleme tabanlı bir sistemde veriyolu üzerindeki bütün önbellekler, veriyolundan istenen veri öbeğinin bir kopyasına sahip olup olmadıklarını belirlemek için veriyolunu gözetler. Her bir önbellek, sahip olduğu bütün veri öbeklerinin paylaşım durum bilgilerine sahiptir. Paylaşılan veri öbeklerinden kaynaklı bağlı önbellekte bulamama ve veriyolu trafiği, çok işlemcili sistemlerde paralel programlama performansını sınırlar. Önbellek tutarlılığı veri paylaşımıyla ilgili problemleri çözmeyi amaçlar. Uyumluluk modeli seçimi tutarlı önbelleğe sahip bir sistem tasarlamak için çok önemlidir. Tutarlılık modelleri performans ve ölçeklenebilirlik olarak farklılık gösterir ve her sistem tasarımı için farklı değerlendirilmesi gerekir.