¿Qué es el problema de coherencia de cache?

La esencia del del problema de la coherencia de cache se basa en que pueden existir varias copias del mismo dato simultáneamente en cachés diferentes, y si los procesadores actualizan sus copias, puede producirse una visión inconsistente de la memoria.

Para evitarlo, se debe avisar a los otros procesadores de que se ha producido una actualización de memoria. Este problema se conoce como problema de coherencia de caché, que es resuelto típicamente por el hardware más que por el sistema operativo

Protocolos:

El objetivo de un protocolo de coherencia de caché es situar las variables locales utilizadas recientemente en la caché apropiada y mantenerlas allí para las distintas escrituras y lecturas, al mismo tiempo que se mantiene la consistencia de las variables compartidas que pudieran encontrarse en varias cachés al mismo tiempo.

Soluciones por hardware

El enfoque más sencillo consiste en impedir que cualquier dato compartido pase a caché.

Dentro de las soluciones por hardware tenemos 3 protocolos distintos para implementar

1. Protocolo directo

Los protocolos de directorio recogen y mantienen la información acerca de dónde residen las copias de las líneas.

2. Protocolo de sondeo

Se han explorado dos enfoques básicos del protocolo de sondeo: invalidar-si-escritura (write-invalidate) y actualizar-si-escritura, o difundir-escritura (write-update o write-broadcast).

  1. Con un protocolo de invalidar-si-escritura: puede haber múltiples procesadores que leen pero un solo procesador que escribe en un momento dado. Inicialmente, una línea puede compartirse por varias cachés con el propósito de lectura. Cuando se quiere hacer una escritura en la línea de una caché, primero envía una notificación que invalida la línea en las otras cachés, haciendo que dicha línea sea exclusiva
  2. Con un protocolo de actualizar-si-escritura: puede haber varios procesadores que escriben igual que varios procesadores que leen. Cuando un procesador desea escribir en una línea compartida, la palabra a actualizar se distribuye a los demás, y las cachés que contienen esa línea lo pueden actualizar

3. Protocolo MESI

Con el protocolo MESI, la caché de datos incluye dos bits de estado en la marca, puesto que cada línea puede estar en uno de estos cuatro estados:

  1. Modificado (Modified): la línea de caché ha sido modificada (es distinta a su valor en memoria principal) y está disponible solo en esta caché.
  2. Exclusivo (Exclusive): la línea de caché tiene el mismo contenido que en memoria principal y no está presente en ninguna otra caché.