El protocolo MOSI es una extensión del protocolo de coherencia de caché MSI básico . Agrega el estado O wned, que indica que el procesador actual es propietario de este bloque y atenderá las solicitudes de otros procesadores para el bloque.
Resumen de estados
A continuación se muestran los estados permitidos de una línea de caché determinada:
Modificado (M) : solo una caché tiene una copia válida del bloque y es probable que el valor sea diferente al de la memoria principal. Tiene casi el mismo significado que un estado sucio en una caché de escritura diferida, excepto por la diferencia de que el estado modificado también implica la propiedad exclusiva de ese bloque. El estado sucio solo significa que el valor del bloque es diferente al de la memoria principal, mientras que modificado implica que el valor es diferente al de la memoria principal y que está almacenado en caché en una sola ubicación.
Propiedad (O) : varias cachés pueden contener el valor más reciente y correcto de un bloque y el valor en la memoria principal puede ser correcto o no. A la vez, solo una caché puede tener el estado de propiedad de un bloque. Todas las demás cachés con el mismo bloque deben estar en estado compartido. [1]
Compartido (S) : el bloque de caché es válido, puede ser compartido por múltiples cachés y puede tener o no el mismo valor que la memoria principal. Otros procesadores pueden leer esto, pero no tienen permisos de escritura.
No válido (I) : el bloque de caché no es válido.
Para cualquier par de cachés, los estados permitidos de una línea de caché determinada son los siguientes:
METRO | O | S | I | |
---|---|---|---|---|
METRO | ||||
O | ||||
S | ||||
I |
Operaciones
En el protocolo MOSI, cada caché tiene las siguientes solicitudes:
- PrRd : solicitud del procesador para leer un bloque de caché.
- PrWr : solicitud del procesador para escribir en un bloque de caché.
- BusRd : solicitud snooped que indica que hay una solicitud de lectura a un bloque de caché realizada por otro procesador.
- BusRdX : solicitud snooped que indica que hay una solicitud de escritura en un bloque de caché realizada por otro procesador que no tiene el bloque.
- BusUpgr : solicitud snooped que muestra que hay una solicitud de escritura en un bloque de caché realizada por otro procesador que ya tiene el bloque en su caché.
- Flush : solicitud snooped después de la cual el bloque de caché se coloca en el bus para una transferencia de caché a caché. [2]
Transacciones del procesador
En cuanto al caso de las transacciones del procesador, cuando el bloque está en el estado No válido (I) , el bloque de caché nunca se extrajo de la memoria o se invalida. Cuando hay una lectura de procesador ( PrRd ), el estado cambia de inválido (I) a compartido (S), generando así una lectura de bus ( BusRd ). Al mismo tiempo, si se trata de una solicitud de escritura del procesador ( PrWr ), el estado del bloque cambia a modificado (M) junto con una solicitud de escritura snooped ( BusRdX ).
Una vez que el bloque se encuentra en el estado de propiedad (O) , la lectura del procesador (PrRd) no genera ninguna señal fisgoneada y el bloque permanece en el mismo estado. Considerando que, una solicitud de escritura del procesador (PrWr) resulta en cambiar el estado del bloque de propiedad (O) a modificado (M) junto con la generación de una solicitud de escritura espiada ( BusUpgr ). [3]
Cuando el bloque está en el estado Modificado (M) , ni una solicitud de lectura del procesador (PrRd) ni una solicitud de escritura del procesador (PrWr) genera una señal fisgoneada ya que el bloque ya indica que el valor más reciente y correcto reside solo en esa caché. Por lo tanto, no cambia el estado y permanece en el estado modificado (M).
Mientras el bloque está en el estado Compartido (S) y hay una solicitud de lectura del procesador (PrRd), dado que el valor del bloque de caché es el mismo en todos los demás procesadores y en la memoria principal, no hay señal de bus que se genere después una lectura de procesador (PrRd). Se genera una solicitud de escritura de bus (BusUpgr) una vez que hay una solicitud de escritura del procesador (PrWr) a un bloque en el estado compartido (S) porque el bloque de caché ya no es válido en todas las demás cachés y el estado del bloque cambia de compartido (S) a modificado (M).
Transacciones de bus
Teniendo en cuenta el comportamiento de la máquina de estados finitos para las transacciones de bus fisgoneado, si el bloque de caché está en estado no válido (I) , entonces ninguna solicitud de bus fisgoneada afectará al bloque de ninguna manera, por lo que incluso si es una lectura de bus (BusRd) o bus solicitud de escritura de un procesador que tiene o no tiene el bloque (BusRdX o BusUpgr) , el bloque permanece en el mismo estado no válido (I) y no genera más acciones.
Cuando el bloque de caché está en el estado Compartido (S) y hay una transacción de lectura de bus snooped (BusRd), entonces el bloque permanece en el mismo estado y no genera más transacciones, ya que todos los bloques de caché tienen el mismo valor, incluida la memoria principal y solo se lee, no se escribe. Si hay una solicitud de escritura snooped (BusRdX o BusUpgr), entonces el estado del bloque cambia de compartido (S) a inválido (I) ya que el valor del bloque se ha modificado en uno de los otros bloques de caché y en todas las demás copias. ahora debe invalidarse.
Una vez que el bloque de caché está en el estado Modificado (M) y hay una solicitud de lectura de bus (BusRd), el bloque vacía (Flush) los datos modificados y cambia el estado a poseído (O), lo que lo convierte en el único propietario de ese bloque de caché particular. Al mismo tiempo, cuando está en el estado modificado (M), nunca habrá una solicitud de escritura de bus (BusUpgr) de otro procesador, ya que no tiene el bloque de caché. Con una solicitud de escritura de otro procesador que no tiene el bloque (BusRdX), el bloque cambia su estado a inválido (I) ya que otro procesador está escribiendo en el bloque y por lo tanto tendrá la propiedad de ese bloque.
Mientras un bloque de caché está en el estado modificado, no hay posibilidad de una solicitud BusUpgr de ningún otro procesador, ya que ninguno de ellos tendrá el bloque. Según la definición del estado modificado (M), solo ese procesador tiene el bloque, el resto se invalidan y, por lo tanto, no pueden iniciar una solicitud de BusUpgr.
Mientras está en el estado Propietario (O) y hay una solicitud de lectura espiada (BusRd), el bloque permanece en el mismo estado mientras descarga (Flush) los datos para que el otro procesador los lea. Con una solicitud de escritura snooped (BusRdX), el bloque cambia de estado a inválido (I) junto con vaciar (Flush) los datos mientras otro procesador está escribiendo en él, perdiendo así su propiedad en ese bloque. Siempre que otro procesador intenta acceder a ese bloque, en lugar de ir a la memoria para acceder a él, el procesador lo toma de otra caché que ya tiene ese bloque en el estado de propiedad (O). Con un BusUpgr, simplemente cambia el estado de propietario (O) a inválido (I). [3]
Comparación con el protocolo MSI
La diferencia obvia entre el protocolo MSI y el protocolo MOSI, también conocido como protocolo Berkeley [4] es la presencia de un estado adicional (propiedad) en MOSI además de tener solo un estado modificado (M).
En el protocolo MSI, siempre que hay una solicitud de fallo de lectura para bloquear que se encuentra en el estado modificado (M), se vuelve a escribir en la memoria principal mientras cambia el estado del bloque a compartido (S). Pero en el caso del protocolo MOSI, donde tenemos un estado adicional (propietario), cada vez que otro procesador solicita una operación de lectura, el bloque cambia de modificado al estado de propiedad (O) y así retiene el bloque sucio de caché, eliminando así la necesidad de volver a escribir en la memoria principal inmediatamente.
Este aplazamiento puede ahorrar tráfico de bus y escrituras en la memoria principal en ciertas secuencias de transacciones. Considere, por ejemplo, si un caché es M para el procesador 1, entonces el procesador 2 lee de él y luego el procesador 1 escribe nuevamente en él. En MSI, la transición de MS del procesador 1 de lectura conduce a una escritura de memoria, y luego la transición de SM conduce a BusUpgr. En MOSI, la transición de MO no genera tráfico y la transición de OM también genera un BusUpgr como antes. Por lo tanto, MOSI distribuyó la escritura de memoria inicial y el tráfico de bus asociado que haría MSI.
Comparación con el protocolo MESI
Ambos protocolos MESI (también conocido como Illinois) [4] y MOSI, son extensiones del protocolo MSI para mejorar diferentes funcionalidades. MOSI se enfoca en reducir las reescrituras y MESI intenta reducir la cantidad de transacciones de bus requeridas después de una solicitud de lectura y escritura de otro procesador. El estado exclusivo (E) en el protocolo MESI implica que el bloque de caché es válido, limpio (el mismo valor que en la memoria principal) y almacenado en caché solo en un caché, mientras que el estado de propiedad (O) en el protocolo MOSI implica que el bloque de caché es válido , potencialmente sucio, escribible y podría estar presente en más de un caché (todos los cachés tienen el mismo valor).
Referencias
- ^ Sorin, Daniel; Hill, Mark; Madera, David (2011). Introducción a la coherencia de la memoria y la coherencia de la caché . Morgan y Claypool. págs. 119-122. ISBN 9781608455645.
- ^ Solihin, Yan (2016). Fundamentos de la arquitectura multinúcleo en paralelo . RC Press, Taylor & Francis Group. ISBN 9781482211184.
- ^ a b "Una evaluación de los protocolos de coherencia de caché basados en Snoop" (PDF) .
- ^ a b "Análisis y comparación de protocolos de coherencia de caché para un multiprocesador de paquetes conmutados". Transacciones IEEE en computadoras . 38 . doi : 10.1109 / 12.30868 .