La coherencia de la memoria es un problema que afecta el 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 (en el que, en términos actuales, existe solo un núcleo), solo hay un elemento de procesamiento que hace todo el trabajo y, por lo tanto, solo un elemento de procesamiento que 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é cuando lo deseen. 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 cambios en valores compartidos; tal 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 exacta y el significado de la coherencia de la memoria están determinados por el modelo de coherencia que implementa el protocolo de coherencia. Para escribir programas concurrentes correctos, los programadores deben conocer el modelo de consistencia exacto que emplean sus sistemas.
Cuando se implementa en hardware, el protocolo de coherencia puede, por ejemplo, estar basado en directorios o en espionaje (también llamado rastreo ). Los protocolos específicos incluyen el protocolo MSI y sus derivados MESI , MOSI y MOESI .
Ver también
Referencias
- ^ Incensario, LM; Feautrier, P. (diciembre de 1978). "Una nueva solución a los problemas de coherencia en sistemas multicache". Transacciones IEEE en computadoras . C-27 (12): 1112–18. doi : 10.1109 / TC.1978.1675013 .
- ^ Smith, Alan Jay (septiembre de 1982). "Caché de memorias". Encuestas de computación ACM . 14 (3): 473–530. doi : 10.1145 / 356887.356892 .
- ^ Li, Kai; Hudak, Paul (noviembre de 1989). "Coherencia de la memoria en sistemas de memoria virtual compartida". Transacciones en sistemas informáticos . 7 (4): 321–59. doi : 10.1145 / 75104.75105 .
- ^ Stenstrom, Per (junio de 1990). "Una encuesta de esquemas de coherencia de caché para multiprocesadores". Computadora IEEE . 23 (6): 12-24. doi : 10.1109 / 2.55497 .