Bellek Tutarlılık Modelleri
Bir bellek tutarlılık modeli, eşzamanlı iş parçacıklarının paylaşılan belleğe eriştiği durumlarda okuma işlemlerinin hangi değerleri gözlemleyebileceğini belirlemekte ve programcıların güvenebileceği sıralama garantilerini tanımlamaktadır.
Tanım
Bir bellek tutarlılık modeli, eşzamanlı bir yürütmede okuma işlemlerinin döndürebileceği değerlerin resmi bir spesifikasyonudur; dilin, derleyicinin ve donanımın uyması gereken bellek erişimlerinin sıralamalarını sabitlemektedir.
Kapsam
Bu konu, sıralı tutarlılıktan (sequential consistency) gevşek ve zayıf modellere kadar tutarlılık modellerinin tüm yelpazesini, 'önce-gerçekleşir' (happens-before) ilişkisini ve veri yarışı içermeyen (data-race-free) garantileri, donanım bellek sıralamalarını (toplam depolama sırası (total store order) gibi) ve C++ ile Java için dil düzeyinde bellek modellerini kapsamaktadır. Gevşek modellerin neden var olduğunu, çitlerin (fences) ve atomik işlemlerin sıralamayı nasıl geri sağladığını ve eşzamanlı bellek hakkında nasıl sağlam bir şekilde akıl yürütüleceğini ele almaktadır.
Temel sorular
- Bir program bellek işlemlerinin hangi sıralamalarını yasal olarak gözlemleyebilir?
- Gevşek bellek modelleri neden mevcuttur ve neye izin vermektedirler?
- Veri yarışı içermeyen garantisi akıl yürütmeyi nasıl basitleştirmektedir?
- Çitler (fences) ve atomik işlemler sıralamayı nasıl sağlamaktadır?
Temel kuramlar
- Sıralı tutarlılık (Sequential consistency)
- Lamport, çok işlemcili bir yürütmenin her işlemcinin program sırasına saygı duyan tek bir işlem araya girme (interleaving) gibi görünmesi gereken sıralı tutarlılığı tanımlamıştır; bu, en güçlü sezgisel temel modeldir.
- Gevşek tutarlılık ve DRF için SC garantisi
- Adve ve Gharachorloo, gevşek modelleri ve veri yarışı içermeyen programların sıralı tutarlıymış gibi davrandığı ilkesini açıklamakta, performansı programlanabilirlikle uzlaştırmaktadırlar.
- Dil düzeyinde bellek modelleri
- Manson, Pugh ve Adve, Java bellek modelini bir 'önce-gerçekleşir' (happens-before) ilişkisi kullanarak formüle etmiş, hangi optimizasyonların yasal olduğunu ve hatta yarış içeren (racy) programların hangi garantileri aldığını tanımlamışlardır.
Klinik önem
Çok çekirdekli işlemciler ve optimize edici derleyiciler bellek işlemlerini yeniden sıraladığından, dil bellek modelleri doğru, taşınabilir eşzamanlı kod yazmak için elzemdir. Programcılara senkronizasyonun ne zaman gerekli olduğunu bildirmekte ve kütüphanelerin ve çalışma zamanlarının sunabileceği garantileri tanımlamaktadırlar.
Tarihçe
Lamport, 1979 yılında sıralı tutarlılığı (sequential consistency) formüle etmiştir. Donanım performans için gevşek sıralamaları benimsedikçe, Adve ve Gharachorloo'nun 1996 tarihli ders kitabı tutarlılık modeli manzarasını ve veri yarışı içermeyen (data-race-free) çerçeveyi kodlamıştır. Dil tasarımcıları daha sonra bellek modellerini spesifikasyonlara dahil etmiş, Java bellek modeli (2005) ve C++11 bellek modeli modern yaklaşımı tesis etmiştir.
Tartışmalar
- Yarış içeren (racy) programların semantiği
- Zor bir soru, veri yarışları içeren programlara hangi garantilerin, eğer varsa, verileceğidir; dil modelleri, agresif derleyici ve donanım optimizasyonlarına hala izin verirken 'havadan gelme' (out-of-thin-air) değerleri engellemelidir.
Öne çıkan isimler
- Leslie Lamport
- Sarita Adve
- Kourosh Gharachorloo
- William Pugh
- Jeremy Manson
İlgili konular
Temel eserler
- lamport1979
- adve1996
- manson2005
Sıkça sorulan sorular
- Neden tüm sistemler sadece sıralı tutarlılığı kullanmamaktadır?
- Sıralı tutarlılık, performansı artıran birçok derleyici ve donanım optimizasyonunu yasaklamaktadır, bu nedenle çoğu gerçek sistem gevşek modelleri benimsemekte ve yalnızca gerektiğinde daha güçlü sıralamayı geri kazanmak için senkronizasyon ilkelleri (primitives) sağlamaktadır.
- Veri yarışı içermeyen garantisi nedir?
- Birçok dil bellek modeli altında, veri yarışı içermeyen (tüm çakışan erişimler uygun şekilde senkronize edilmiş) bir programın, bellek sıralı tutarlıymış gibi davranması garanti edilmektedir.