En la literatura sobre protocolos de coherencia de caché , Write-Once fue el primer protocolo MESI definido. Tiene la optimización de ejecutar una escritura directa en la primera escritura y una escritura diferida en todas las escrituras posteriores, lo que reduce el tráfico general del bus en escrituras consecutivas en la memoria de la computadora . Fue descrito por primera vez por James R. Goodman en (1983). [1] Los protocolos de coherencia de caché son un tema importante en los sistemas de multiprocesamiento simétrico , donde cada CPU mantiene una caché de la memoria.
Estados
En este protocolo, cada bloque de la caché local se encuentra en uno de estos cuatro estados:
No válido : este bloque tiene una copia incoherente de la memoria.
Válido : Este bloque tiene una copia coherente de la memoria. Los datos pueden ser compartidos, pero su contenido no se modifica.
Reservado : el bloque es la única copia de la memoria, pero sigue siendo coherente. No es necesario volver a escribirlo si se reemplaza el bloque.
Sucio : el bloque es la única copia de la memoria y es incoherente. Esta copia se escribió una o más veces. Este es el único estado que genera una escritura diferida cuando el bloque se reemplaza en la caché.
Estos estados tienen exactamente los mismos significados que los cuatro estados del protocolo MESI (simplemente se enumeran en orden inverso), pero se trata de una forma simplificada que evita la operación de lectura para obtener la propiedad. En cambio, toda la invalidación se realiza mediante escrituras en la memoria principal.
Para cualquier par de cachés dado, los estados permitidos de una línea de caché dada son los siguientes (abreviados en el orden anterior):
Transiciones
El protocolo sigue algunas reglas de transición para cada evento:
Lectura de resultados : la información la proporciona la caché actual. No hay cambios de estado.
Error de lectura : los datos se leen desde la memoria principal. La lectura es vigilada por otros cachés; si alguno de ellos tiene la línea en estado Sucio , la lectura se interrumpe el tiempo suficiente para volver a escribir los datos en la memoria antes de que se le permita continuar. Cualquier copia en estado Sucio o Reservado se establece en estado Válido .
Escritura exitosa : si la información en la caché está en estado Dirty o Reserved , la línea de caché se actualiza en el lugar y su estado se establece en Dirty sin actualizar la memoria. Si la información está en estado Valid , se ejecuta una operación de escritura continua que actualiza el bloque y la memoria y el estado del bloque cambia a Reserved . Otras cachés espían la escritura y establecen sus copias en Invalid .
Error de escritura : una escritura parcial en una línea de caché se maneja como un error de lectura (si es necesario para recuperar la parte no escrita de la línea de caché) seguido de un acierto de escritura. Esto deja a todos los demás cachés en estado no válido y al caché actual en estado reservado .
Esta es una variante del protocolo MESI, pero no hay una operación explícita de invalidación de lectura para propiedad o difusión para llevar una línea a la caché en el estado exclusivo sin realizar una escritura en la memoria principal. En cambio, la primera escritura en una línea de caché válida (también conocida como compartida ) realiza una escritura directa en la memoria, lo que invalida implícitamente otras cachés. Después de eso, la línea está en el estado reservado ( exclusivo ) y se pueden realizar más escrituras sin referencia a la memoria principal, lo que deja la línea de caché en el estado sucio ( modificado ).
Referencias
^ Goodman, James R. (1983). "Uso de la memoria caché para reducir el tráfico entre el procesador y la memoria". ACM Sigarch Computer Architecture News . 11 (3): 124–131. doi : 10.1145/1067651.801647 .
Archibald, J.; Baer, JL (noviembre de 1986). "Protocolos de coherencia de caché: evaluación utilizando un modelo de simulación multiprocesador". ACM Trans. Comput. Syst . 4 (4): 273–298. doi :10.1145/6513.6514. S2CID 713808.
Goodman, JR (1983). "Uso de la memoria caché para reducir el tráfico entre el procesador y la memoria". Actas del 10º simposio internacional anual sobre arquitectura informática - ISCA '83 . Simposio internacional sobre arquitectura informática: Estocolmo, Suecia, 13-17 de junio de 1983. pp. 124-131. doi :10.1145/800046.801647. ISBN 0-89791-101-6.