Bilgisayar biliminde tutarlılık , bir sistemin bir veri öğesinin kopyasına, bu verilerin diğer kopyalarında yapılan değişiklikleri yansıtma kapasitesidir. Bu fikir temel olarak üç bilgisayar alanında kullanılır: dosya sistemleri , veritabanları ve paylaşılan bellekler . Kısıtlayıcı bir tutarlılık modeli ("güçlü" tutarlılık) sezgisel davranışa izin verir ve program davranışının anlaşılmasını kolaylaştırır, ancak "zayıf" veya "gevşek" tutarlılık modelleri genellikle performansın iyileştirilmesine izin verir. '' Gerektiğinde veri tutarlılığını sağlar.
Basit bir ilk tutarlılık ayrımı genellikle veritabanları için kullanılır.
A bir veri olsun. Birkaç kopya aracılığıyla okunabilir ve değiştirilebilir {C1, C2, ... Cn}. C1'in C1 'olarak değiştirildiğini varsayalım. Veri yönetim sistemi A, değişikliğin ardından bir Cx kopyasının okunması C1 'döndürürse yüksek tutarlılık sağlar. Zayıf uyumlu bir sistemde, C2 okumak hala A'nın eski versiyonunu verebilir.
Tutarlılık genellikle daha karmaşıktır. Tutarlılık modeli, verilere eşzamanlı erişim için yapılan garantiler kümesidir. Pek çok tutarlılık modeli mümkündür ve biz bunların sadece bir kısmını sunacağız.
Modeller, daha güçlü veri tutarlılığını zorlamayı mümkün kılan " senkronizasyon " talimatlarını içerip içermediğine bağlı olarak iki gruba ayrılır .
En kısıtlayıcı senkronizasyon dışı tutarlılık modeli, verilerin "ideal görünümü" ile tam olarak eşleşen modeldir. Sunulan tutarlılık modelleri, en kısıtlayıcı olandan en hızlıya (yürütme zamanında) gider.
Kesin tutarlılıkBir okuma her zaman gerçekleştirilen son yazmanın sonucunu döndürdüğünde, yani küresel bir zaman tabanının varlığını ima ettiğinde atomik, bölünmez, katı veya kesintisiz tutarlılıktan bahsediyoruz. Bu tutarlılık modeli, var olan en güçlüsüdür.
Güçlü tutarlılıkHerhangi bir zamanda (yani herhangi bir gözlem noktasında) tüm veri kopyalarının aynı olması durumunda güçlü bir tutarlılık olduğunu söylüyoruz. Somut bir uygulama şöyle olacaktır:
Maalesef bu tutarlılık modeli kaynaklar açısından çok maliyetlidir. Gerekli olmasa bile her koşulda tutarlılık sağlanır.
Sıralı tutarlılıkHerhangi bir yürütmenin sonucu, tüm işlemlerin işlemlerinin herhangi bir sırayla yürütülmesi ve her işlemin işlemlerinin program tarafından belirtilen sırayla bu sırada görünmesi gibi aynıdır. Kısacası, tüm hafıza erişimlerinde program sırasını koruyan global (toplam) bir sıra vardır.
Anında tutarlılık, uzun vadeli tutarlılığın tersidir. Yazma işlemi yalnızca tüm işlemler veya düğümler senkronize edildiğinde sonlandırılır. Bu yeni değeri aynı anda ortaya çıkarmak. Anında tutarlılık için iki ana çözüm vardır:
Sıralı tutarlılıktan daha zayıf model, çünkü sadece nedensel bir ilişki ile bağlantılı olayları ele alıyoruz. Tutarlılık modeli, aşağıdaki iki koşulu garanti ediyorsa nedenseldir:
Aşağıdaki örneği düşünün. P1 işleminin X değişkenine yazdığı varsayılır. Sonra P2 X'i okur ve Y yazar. Burada, X'in okunması ve Y'nin P2 tarafından yazılması potansiyel olarak nedensel olarak bağlantılıdır çünkü Y'nin yazılması X'in değerine bağlı olabilir. .
PRAM ve FIFO tutarlılığıNedensellik farklı süreçler arasında değil, yalnızca tek bir süreç içinde ele alınırsa, nedensel tutarlılık daha da zayıflatılabilir. PRAM tutarlılığı ( Lipton ve Sandberg nedeniyle ardışık düzenlenmiş RAM ), aynı işlemden yazılanların başkaları tarafından yapıldıkları sırayla görüldüğünü belirtir. Öte yandan, farklı süreçlere ait olanların görünme sırası üzerinde herhangi bir kısıtlama yoktur.
Nesne ve önbellek tutarlılığıAynı nesneye (bir veritabanında) veya aynı bellek konumuna yazılanlar tüm aktörler tarafından aynı sırada görülüyorsa; sırasıyla nesne tutarlılığından ve önbellek tutarlılığından söz ediyoruz - bu, bir önbellek tutarlılık protokolü kullanılırken "doğal" tutarlılıktır . Bu model PRAM tutarlılığıyla ilişkilendirildiğinde, işlemci tutarlılığından bahsediyoruz.
Zaman içinde tutarlılıkNihai yoğunluk modeli bir işlem yazıları kaçınılmaz olarak başkaları tarafından görülen, ancak son ya da sipariş kısıtlama olmadan edilen, bir yandan, gerektirir; ve diğer yandan güncellemeler durduğunda tüm süreçler aynı durumu gözlemler. Bu, pratikte kullanılan en zayıf tutarlılık modelidir.
Bu yaklaşım eşzamanlı yazımlara izin verdiğinden, sistem çakışmaları çözmelidir. Bunun için üç çözüm var:
Aslında tutarlılığı her zaman sağlamak her zaman gerekli değildir. Bu nedenle, değişkenleri ve senkronizasyon işlemlerini kullanarak yalnızca gerektiğinde zorlama fikri. Bu modellerde, daha güçlü tutarlılığı geçici olarak uygulamak için senkronizasyon talimatları kullanılır. Bu talimatlar genellikle önceki erişimlerin tüm aktörler tarafından görülebilmesini sağlayan "engellerdir". Bu, planlanan erişimlerle ilgili bilgileri kullanarak korunacak değişkenleri hassas bir şekilde belirlemeyi mümkün kılar. Motivasyon, tutarlılık operasyonlarının sayısını azaltmaktır.
Düşük tutarlılıkZayıf tutarlılıkta, normal erişimler ve senkronizasyon işlemleri arasında bir ayrım yapılır. Eşitlenmemiş erişim herhangi bir özel kısıtlama getirmez. Öte yandan, senkronizasyonlar, önceki tüm erişimlerin sona ermesini (okumaların yapılmasını ve yazılanların tüm aktörler tarafından görülebilmesini) ve yeni erişimlerin senkronizasyon talimatlarının sonunu beklemesini gerektirir. sıralı tutarlılık modelini izleyin.
Programcı veya derleyici, gerektiğinde tutarlılığı sağlamak için senkronizasyon talimatlarını yerleştirmekten sorumludur.
Serbest bırakıldığında tutarlılıkSerbest bırakmada tutarlılık, uyum zayıflığına benzer, ancak iki işleme tabidir: senkronizasyon için kilitleme ve kilit açma. Bellekteki bir nesneyi değiştirmeden önce, daha sonra kilidini açmak için kilitlenerek elde edilmelidir. Bu iki operasyon arasında yer alan değişiklikler, "kritik bir bölgede" gerçekleştirilir.
Tutarlılık modeli, aşağıdaki üç özelliği garanti ediyorsa gevşektir:
Girişte tutarlılık, serbest bırakıldığında tutarlılığa yakındır. Aradaki fark, bağımsız olarak değiştirilen herhangi bir değişkenin belirli bir kilitle ilişkilendirilmesi gerektiğidir. Kilitleme işlemi sırasında, yalnızca kullanılan kilitle ilişkili değişkenler güncellenir.
Resmi olarak, girişte tutarlılık üç koşul gerektirir:
Delta tutarlılığı, tüm sistemi düzenli zaman aralıklarında senkronize eder. Diğer bir deyişle, bir hafıza okumasının sonucu, senkronizasyonun henüz gerçekleştirilmediği kısa bir süre dışında tutarlıdır. Dolayısıyla, bir bellek alanı değiştirilmişse, kısa bir süre için okuma erişimi tutarsız olacaktır. Senkronizasyonun gerçekleşmesini beklemeniz gerekecek.
Vektöre göre tutarlılıkBu tutarlılık modeli, bir kaynağa yakın verilere erişim süresini en aza indirmek için tasarlanmıştır. Tipik olarak, bant genişliğini en aza indirmek için video oyunu gibi bir ortamda kullanılabilir. Aslında, oyuncuların hedef pozisyon yaklaştıkça belirli bilgileri daha hızlı ve güvenilir bir şekilde bilmeleri gerekir. Bu, tutarlılığı korumak için kullanılan bir vektör alanına dayalı çok boyutlu bir şema gerektirir. Vektör alanına göre tutarlılık, pivotlara (oyuncu) bağlı jeneratör alanlarından kaynaklanır. Mesafe arttıkça alanın yoğunluğu azalır.
Çok işlemcili sistemlerde tutarlılık modelleri farklılık gösterir. Gevşek bir tutarlılık, belirli optimizasyonlara izin verir. Örneğin, bazı tutarlılık modelleri, bir yazmanın sonucunun bir arabellek aracılığıyla tüm işlemciler tarafından görünür hale getirilmesini beklemeden yürütmenin devam etmesine izin verir. Önbelleklerin varlığı, tutarlılıklarını sağlamaya yönelik protokoller uygulanarak düzenlenir .