Önbellek tutarlılığı

Ön bellek tutarlılığı, paylaşılan kaynağın yerel ön belleğinde kaydedilen verinin tutarlılığını ifade eder. Bir bilgisayar sistemindeki istemciler ortak bir bellek kaynağının ön belleğini kullandıklarında, tutarsız verilerle ilgili sorunlar ortaya çıkabilir. Bu, bilhassa, çoklu işleme yapan sistemlerdeki merkezi için geçerlidir.

Paylaşılan belleğe bağlı ön bellekler ş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 ön bellek bilgisiyle kalacaktır. Ön bellek tutarlılığı bu gibi çakışmaları idare etmek ve ön bellek ile bellek arasındaki tutarlılığı muhafaza etmeyi amaçlar.

Tutarlılık protokolü dağıtık-paylaşımlı bir bellek sisteminde, ön bellekler 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 ön bellekler arası trafik miktarını etkileyebilir. Bu da gerçekte mümkün olan bant genişliğine bağlı olabilir. İşlemci ön bellekleri arasında yoğun çekişmeye sebep olabilecek dağıtık yazılım tasarımında bunun dikkate alınması gerekir.

Ön bellek 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 ön belleklerini, ön bellekteki 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 ön belleğine sahiptir. Ön bellek, 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 ön belleğ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 ön belleklerine sahip birden çok işlemci ortak bir ana-belleği paylaştığında, paylaşılan ve herhangi bir ön bellekte değiştirilmiş verinin bütün sistemde değiştirilmiş olmasını temin ederek ön bellekleri 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, ön bellekler arası tutarlılığı idare eden ortak bir dizine konulur. Bu dizin, işlemcinin ana bellekten bir öğeyi kendi ön belleğine yüklemek için izin istemesi gereken bir filtre gibidir. Bir öğe değiştirildiğinde, dizin bu öğeye sahip diğer ön bellekleri günceller veya geçersiz kılar.

Gözetleme tabanlı bir sistemde veri yolu üzerindeki bütün ön bellekler, veri yolundan istenen veri öbeğinin bir kopyasına sahip olup olmadıklarını belirlemek için veri yolunu gözetler. Her bir ön bellek, sahip olduğu bütün veri öbeklerinin paylaşım durum bilgilerine sahiptir. Paylaşılan veri öbeklerinden kaynaklı bağlı ön bellekte bulamama ve veri yolu trafiği, çok işlemcili sistemlerde paralel programlama performansını sınırlar. Ön bellek tutarlılığı veri paylaşımıyla ilgili problemleri çözmeyi amaçlar.

Uyumluluk modeli seçimi tutarlı ön belleğ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.