(Para obtener una descripción detallada, consulte Protocolos de coherencia de caché (ejemplos) )
En informática, MOESI es un protocolo de coherencia de caché completo que abarca todos los estados posibles que se utilizan comúnmente en otros protocolos. Además de los cuatro estados comunes del protocolo MESI , existe un quinto estado "Propiedad" que representa los datos que se modifican y se comparten. Esto evita la necesidad de volver a escribir los datos modificados en la memoria principal antes de compartirlos. Si bien los datos aún deben volver a escribirse eventualmente, la escritura puede aplazarse.
Para que esto sea posible, las transferencias directas de datos de caché a caché deben ser posibles, de modo que una caché con los datos en el estado modificado pueda suministrar esos datos a otro lector sin transferirlos a la memoria.
Como se explica en el Manual del programador de la arquitectura AMD64 , vol. 2 ' Programación del sistema ', [1] cada línea de caché se encuentra en uno de cinco estados:
- Modificado
- Esta caché tiene la única copia válida de la línea de caché y ha realizado cambios en esa copia.
- Propiedad
- Este caché es uno de varios con una copia válida de la línea del caché, pero tiene el derecho exclusivo de realizar cambios en él; otros cachés pueden leer pero no escribir la línea del caché. Cuando este caché cambia datos en la línea de caché, debe transmitir esos cambios a todos los demás cachés que comparten la línea. La introducción del estado de propiedad permite el intercambio sucio de datos, es decir, un bloque de caché modificado se puede mover entre varios cachés sin actualizar la memoria principal. La línea de caché puede cambiarse al estado Modificado después de invalidar todas las copias compartidas, o cambiarse al estado Compartido volviendo a escribir las modificaciones en la memoria principal. Las líneas de caché propias deben responder a una solicitud de rastreo con datos.
- Exclusivo
- Esta caché tiene la única copia de la línea, pero la línea está limpia (sin modificar).
- Compartido
- Esta línea es una de las varias copias del sistema. Este caché no tiene permiso para modificar la copia (otro caché puede estar en el estado "poseído"). Otros procesadores del sistema también pueden contener copias de los datos en el estado Compartido. A diferencia del protocolo MESI, una línea de caché compartida puede estar sucia con respecto a la memoria; si es así, alguna caché tiene una copia en el estado de propiedad, y esa caché es responsable de actualizar eventualmente la memoria principal. Si ningún caché mantiene la línea en el estado de propiedad, la copia de la memoria está actualizada. Es posible que la línea de caché no se escriba, pero se puede cambiar al estado Exclusivo o Modificado después de invalidar todas las copias compartidas. (Si la línea de caché era propiedad antes, la respuesta de invalidación lo indicará y el estado se modificará, por lo que no se olvidará la obligación de volver a escribir los datos en la memoria). También se puede descartar (cambiar al estado no válido). ) en cualquier momento. Es posible que las líneas de caché compartidas no respondan a una solicitud de rastreo con datos.
- Inválido
- Este bloque no es válido; debe buscarse para satisfacer cualquier intento de acceso.
Para cualquier par de cachés, los estados permitidos de una línea de caché determinada son los siguientes:
METRO | O | mi | S | I | |
---|---|---|---|---|---|
METRO | |||||
O | |||||
mi | |||||
S | |||||
I |
(El orden en el que normalmente se enumeran los estados solo sirve para que el acrónimo "MOESI" se pueda pronunciar).
Este protocolo, una versión más elaborada del protocolo MESI más simple (pero no en MESI extendido - ver Coherencia de caché ), evita la necesidad de escribir una línea de caché sucia en la memoria principal cuando otro procesador intenta leerla. En cambio, el estado de propiedad permite que un procesador suministre los datos modificados directamente al otro procesador. Esto es beneficioso cuando la latencia de comunicación y el ancho de banda entre dos CPU son significativamente mejores que en la memoria principal. Un ejemplo serían las CPU de varios núcleos con cachés L2 por núcleo.
Si bien MOESI puede compartir rápidamente líneas de caché sucias desde la caché, no puede compartir rápidamente líneas limpias desde la caché. Si una línea de caché está limpia con respecto a la memoria y en el estado compartido, entonces cualquier solicitud de snoop a esa línea de caché se llenará desde la memoria, en lugar de un caché.
Si un procesador desea escribir en una línea de caché propia, debe notificar a los otros procesadores que comparten esa línea de caché. Dependiendo de la implementación, puede simplemente decirles que invaliden sus copias (moviendo su propia copia al estado Modificado), o puede decirles que actualicen sus copias con los nuevos contenidos (dejando su propia copia en el estado Propiedad).
Ver también
Referencias
- ^ "Manual del programador de la arquitectura AMD64 Vol 2 'Programación del sistema ' " (PDF) . Archivado desde el original (PDF) el 19 de junio de 2017 . Consultado el 28 de agosto de 2015 .