# MESI protokolü
Aynı zamanda "Illinois protokolü" olarak da bilinen MESI protokolü yaygın olarak kullanılan bir önbellek tutarlılığı protokolüdür. Intel'in Pentium işlemcilerinde kullanılan önbelleklerde verimliliği artırmak için kullanılmıştır.


## Durumlar.
MESI protokolünde her önbellek satırı (ek iki bitle kodlanmış olarak) aşağıdaki dört durumdan birisinde olarak belirtilir:
  - M - Modified (Değiştirilmiş): Verinin son hali yalnızca ilgili önbellekte tutulmaktadır ve bu nedenle "kirli" olarak tanımlanır. Saklanan veri ana bellekteki veriden farklıdır. Verinin yeniden ana bellekten okunmasından önce ilgili önbellek satırının ana belleğe geri yazılması gerekir.
  - E - Exclusive(Özel): İlgili önbellek satırının verinin son durumunu tuttuğunu gösterir. Saklanan veri ana bellekteki veriyle aynıdır ve bu durumda verinin "temiz" olarak tanımlanır.
  - S - Shared (Paylaşımda): İlgili önbellek satırının aynı makinedeki başka önbelleklerde de saklanıyor olabileceğini gösterir.
  - I - Invalid (Geçersiz): Önbellek satırının geçersiz olduğunu gösterir.


## Çalışma mantığı.
Tipik bir sistemde çok sayıda önbellek ana belleğe giden ortak bir veriyolunu paylaşırlar. Aynı zamanda her birinin bağlı olduğu okuma ve yazma isteklerinde bulunan bir işlemci vardır. Önbelleklerin ortak amacı paylaşılan ana belleğin kullanımını minimize etmektir.
Bir önbellek geçersiz ("I"-Invalid) dışındaki her durumda okuma isteğini karşılar. "I" durumundaki bir önbellek satırının ise okuma isteğini karşılamak için veriyi getirmesi gerekir. Veriyi getirdiğinde ise "S" ya da "E" durumuna geçer.
Yazma isteği ise ancak önbellek satırı değiştirilmiş ("M"-Modified) veya özel ("E"-Exclusive) durumunda ise karşılanabilir. Paylaşımda ("S"-Shared) durumunda olan bir önbellek satırına yazma isteği gelirse, önce diğer önbelleklerdeki kopyaların geçersizleştirilmesi gerekir. Bu genellikle yazma isteğini diğer önbelleklere yayarak yapılır.
Bir önbellek değiştirilmemiş bir satırı istediği zaman atabilir ve "I" durumuna geçer. "M" durumunda yani değiştirilmiş bir satır ise atılmadan önce ana belleğe geri yazılmalıdır.
Bir satırı "M" durumunda tutan bir önbellek, ana belleğe diğer önbellekler tarafından yapılan okuma isteklerini cevaplamak için gözetlemelidir (snoop). Bu genellikle okuma isteğini erteletmek, sonra da veriyi ana belleğe yazarak durumu "S"ye çevirmek şeklinde yapılır.
Bir satırı "S" durumunda tutan bir önbellek başka önbelleklerden gelen geçersizleştirme veya yazma isteklerini dinlemeli ve bu takdirde satırı geçersiz ("I" durumu) yapmalıdır.
Bir satırı "E" durumunda tutan bir önbellek de diğer önbelleklerden gelen okuma isteklerini gözetlemelidir ve bu takdirde satırı "S" durumuna değiştirmelidir.
"M" ve "E" durumundaki satıra sahip önbellek, satırın sahibi durumundadır. "S" durumundaki satıra sahip önbellek ise bir başka önbellek "S" satırını atsa ve satırın tek sahibi olsa dahi "E" durumuna yükselemez.


### Sahiplik isteği.
"Sahiplik isteği" (Request for Ownership) veya "Özel okuma isteği"(Read Exclusive) önbellek tutarlılığı protokollerinde okuma ve geçersizleştirme isteklerinin birleşimi olan bir işlemdir. Bu işlem "I" durumundaki bir önbellek satırına yazmaya çalışan bir işlemci tarafından yapılır. Bu işlem diğer önbelleklerdeki kopyalarını "I" durumuna değiştirir. Bu işlem veriyi önbelleğe getirir ve diğer önbelleklerdeki kopyaları geçersizleştirir.