MOESI

**MOESI** diğer önbellek tutarlılığı protokollerinin çoğunda kullanılan durumları kapsayan tam bir protokoldür. Yaygın olan dört yaygın MESI durumları yanında, bu protokolde beşinci bir "Sahip (Owned)" durumu mevcuttur ki hem değiştirilmiş hem de paylaşılan veriyi ifade eder. Bu değiştirilmiş veriyi paylaşmadan önce ana belleğe geri yazma ihtiyacını ortadan kaldırır. Neticede veri yine de ana belleğe yazılmak zorunda olsa da, bu yazma ertelenmiş olur.

AMD64 Architecture Programmer's Manual Vol 2 'System Programming', dokümanında anlatıldığı üzere, her önbellek satırı (öbeği) beş durumdan birinde bulunur:

* **M** - Modified (değiştirilmiş): "M" durumundaki bir önbellek öbeği güncel kopyaya sahiptir. Ana bellekteki kopyası güncel değildir ve başka hiçbir önbellek geçerli bir kopyaya sahip değildir. Bu durumda sahip olunan veri ilgili işlemci tarafından yerel olarak değiştirilebilir. Önbellek satırı, değişiklikleri ana belleğe geri yazarak "E" durumuna geçirilebilir. "M" durumundaki önbellek satırına sahip önbellek isteklere cevap vermek zorundadır.
* **O** - Owned (sahip): "O" durumundaki bir önbellek satırı güncel kopyaya sahiptir. "O" durumu, başka önbelleklerin de güncel kopyaya sahip olabilmesinden dolayı "S" durumuna benzerlik gösterir. Ana bellekteki kopya güncel değildir. Tüm önbelleklerde yalnızca bir tane önbellek, veriye "O" durumunda sahip olabilir, güncel veriye sahip diğerleri ancak "S" durumunda bulunabilir. Önbellek satırı diğer paylaşanları geçersizleştirerek "M" durumuna geçiş yapabilir ve satırda değişiklik yapabilir ya da değişiklikleri ana belleğe geri yazarak "S" durumunda geçiş yapabilir. "O" durumundaki önbellek satırına sahip önbellek isteklere cevap vermek zorundadır.
* **E** - Exclusive (özel): "E" durumundaki bir önbellek satırı güncel kopyaya sahiptir. Ana bellekteki kopya da günceldir ama başka hiçbir önbellekte kopya yoktur. Önbellek satırına "E" durumunda sahip olan önbellek istediğinde veriyi yerel olarak değiştirerek (yazarak) "M" durumuna geçebilir; bu geçiş sırasında veriyolundan bilgi yollamak zorunda değildir. Yine önbellek istediğinde veriyi geçersizleştirebilir ("I" durumuna geçebilir). "E" durumundaki önbellek satırına sahip olan önbellek isteklere cevap verebilir.
* **S** - Shared (paylaşımda): "S" durumundaki bir önbellek satırı güncel kopyaya sahiptir. Diğer önbellekler de verinin kopyasını "S" durumunda tutuyor olabilirler. Eğer veriye "O" durumunda sahip olan bir önbellek varsa ana bellekteki kopya geçersizdir, aksi takdirde ana bellekteki kopya da günceldir. Bu durumdaki önbellek satırı diğer paylaşımcıları geçersizleştirerek "E" durumuna geçebilir veya istenildiği zaman önbellekten atılabilir ("I" durumuna geçiş). "S" durumundaki önbellek satırına sahip olan önbellek isteklere bazı MOESI uygulamalarında cevap verebilir.
* **I** - Invalid (geçersiz): "I" durumundaki bir önbellek satırı verinin geçerli bir kopyasına sahip değildir. Geçerli veri ana bellekte ya da başka önbelleklerde bulunabilir.

MESI protokolünün daha geniş bir versiyonu olan bu protokol, bir başka önbellek okuma isteğinde bulunduğunda değiştirilmiş veriyi ana belleğe geri yazma ihtiyacını ortadan kaldırır. Ana belleğe geri yazmak yerine, "O" durumu önbelleğin değiştirilmiş verinin doğrudan istekte bulunan önbelleğe verilmesini sağlar. İletişim gecikmesi ve bant genişliği önbellekler arasında (önbellek-ana bellek arasındakine göre) daha iyiyse çok daha faydalıdır.

## Kaynakça