La coherencia de la memoria es un problema que afecta al diseño de sistemas informáticos en los que dos o más procesadores o núcleos comparten un área común de memoria . [1] [2] [3] [4]
En un sistema monoprocesador (donde existe un solo núcleo), solo hay un elemento de procesamiento que realiza todo el trabajo y, por lo tanto, solo un elemento de procesamiento puede leer o escribir desde/hacia una ubicación de memoria determinada. Como resultado, cuando se cambia un valor, todas las operaciones de lectura posteriores de la ubicación de memoria correspondiente verán el valor actualizado, incluso si está almacenado en caché .
Por el contrario, en sistemas multiprocesador (o multinúcleo ), hay dos o más elementos de procesamiento trabajando al mismo tiempo, por lo que es posible que accedan simultáneamente a la misma ubicación de memoria. Siempre que ninguno de ellos cambie los datos en esta ubicación, pueden compartirlos indefinidamente y almacenarlos en caché como quieran. Pero tan pronto como uno actualiza la ubicación, los demás pueden trabajar en una copia desactualizada que, por ejemplo, reside en su caché local. En consecuencia, se requiere algún esquema para notificar a todos los elementos de procesamiento de los cambios en los valores compartidos; dicho esquema se conoce como protocolo de coherencia de memoria , y si se emplea dicho protocolo, se dice que el sistema tiene una memoria coherente .
La naturaleza y el significado exactos de la coherencia de la memoria están determinados por el modelo de consistencia que implementa el protocolo de coherencia. Para escribir programas concurrentes correctos, los programadores deben conocer el modelo de consistencia exacto que utilizan sus sistemas.
Cuando se implementa en hardware, el protocolo de coherencia puede, por ejemplo, estar basado en directorios o en snooping (también llamado sniffing ). Los protocolos específicos incluyen el protocolo MSI y sus derivados MESI , MOSI y MOESI .