Bellek modeli (programlama) - Memory model (programming)

Hesaplamada, bir bellek modeli , iş parçacıklarının bellek yoluyla etkileşimlerini ve verilerin paylaşılan kullanımını tanımlar .

Tarih ve önemi

Bir bellek modeli, bir derleyicinin birçok önemli optimizasyonu gerçekleştirmesine izin verir. Programdaki, potansiyel olarak paylaşılan değişkenlerin okuma ve yazma işlemlerinin sırasını etkileyebilen döngü füzyon hareket deyimleri gibi derleyici optimizasyonları . Okuma ve yazma sırasındaki değişiklikler yarış koşullarına neden olabilir . Bellek modeli olmadan, bir derleyicinin bu tür optimizasyonları genel olarak çok iş parçacıklı programlara veya yalnızca özel durumlarda uygulamasına izin verilmez. Veya bazı derleyiciler için çok iş parçacıklı yürütme olmadığını varsaymazlar (bu nedenle daha iyi optimize edilmiş kod üretilebilir), bu da çoklu iş parçacığı ile uyumsuz optimizasyonlara yol açabilir - bunlar genellikle erken testte görünmeyen ince hatalara yol açabilir. .

Java gibi modern programlama dilleri bu nedenle bir bellek modeli uygular. Bellek modeli , senkronize bir blok veya yöntem girerek bir kilit elde etme gibi özel, iyi tanımlanmış senkronizasyon işlemleri yoluyla kurulan senkronizasyon engellerini belirtir . Bellek modeli, paylaşılan değişkenlerin değerlerinde yapılan değişikliklerin, yalnızca böyle bir senkronizasyon engeline ulaşıldığında diğer iş parçacıkları tarafından görülebilir hale getirilmesi gerektiğini öngörür. Dahası, bir yarış durumu kavramının tamamı , bu bellek engelleriyle ilgili işlemlerin sırası üzerinden tanımlanır.

Bu anlambilim, iyileştirme yapan derleyicilere optimizasyonları uygularken daha yüksek derecede özgürlük sağlar: derleyicinin yalnızca senkronizasyon engellerinde (potansiyel olarak paylaşılan) değişkenlerin değerlerinin hem optimize edilmiş hem de optimize edilmemiş kodda aynı olmasını garanti etmesi gerekir. Özellikle, senkronizasyon engeli içermeyen bir kod bloğundaki ifadelerin yeniden sıralanmasının derleyici tarafından güvenli olduğu varsayılır.

Bellek modelleri alanındaki araştırmaların çoğu şunların etrafında döner:

  • Derleyici optimizasyonları için maksimum düzeyde serbestliğe izin verirken, yarışsız ve (belki daha da önemlisi) yarış içeren programlar hakkında yeterli garantiler veren bir bellek modeli tasarlamak.
  • Böyle bir bellek modeline göre doğru olan program optimizasyonlarının kanıtlanması .

Java Hafıza Modeli popüler bir programlama dili için kapsamlı bir iş parçacığı bellek modeli sağlamak için ilk girişim oldu. Uygulamaya belirli kısıtlamalar getirilmeden iş parçacıklarının bir kitaplık olarak güvenli bir şekilde uygulanamayacağı ve özellikle C ve C ++ standartlarının ( C99 ve C ++ 03 ) gerekli kısıtlamalardan yoksun olduğu belirlendikten sonra, C ++ iş parçacığı alt komitesi şu şekilde ayarlandı: uygun bellek modeli üzerinde çalışmak; 2005 yılında, C Komitesini çabalarıyla birlikte işe almak için C çalışma belgesi n1131'i sunmuşlardır. Önerilen bellek modelinin son revizyonu olan C ++ n2429, Kona'daki Ekim 2007 toplantısında C ++ taslak standardına kabul edildi. Bellek modeli daha sonra sonraki C ++ ve C standartlarına, C ++ 11 ve C11'e dahil edildi .

Ayrıca bakınız

Referanslar