Protocolo DRAGON
# Protocolo DRAGON

El protocolo de coherencia caché Dragon es el esquema usado en la estación de trabajo multiprocesador Xerox Dragon, desarrollada por Xerox PARC. Este protocolo usa una política de postescritura.

## Estados

En este protocolo, a cada bloque pueden asignarse los siguientes estados:

* Invalido(I, Invalid): Sin datos en el bloque de caché.
* Limpio (C, Clean): Limpio, sólo copia.
* Compartido-Limpio (SC, Shared-Clean): Limpio, puede estar compartido.
* Sucio (D, Dirty): Modificado, sólo copia.
* Compartido-Sucio (SD, Shared-Dirty): Modificado, puede que compartido. Esto implica que puede haber otras copias actualizadas de los datos (en el estado Compartido-Limpio), pero la copia de memoria no está actualizada.

Esos cinco estados corresponden a los cinco estados del protocolo MESI, aunque los superiores listados arriba están en orden IESMO.

Para cada par de cachés dada, los estados permitidos de una línea de caché dada son los siguientes (los estados están abreviados en el orden superior):

| | I | C | SC | D | SD |
| - | - | - | - | - | - |
| I | Sí | Sí | Sí | Sí | Sí |
| C | Sí | No | No | No | No |
| SC | Sí | No | Sí | No | Sí |
| D | Sí | No | No | No | No |
| SD | Sí | No | Sí | No | No |

## Transiciones

Para identificar que transición debe hacerse, el protocolo detecta la compartición usando una línea especial de bus llamada Compartida o Shared. Todos los accesos a la memoria principal del bus son espiados por todas las cachés, que establecen la línea ha compartido (Shared) cuando ocurren un éxito en el espionaje. Las reglas siguientes se aplican a las transiciones:

* Acierto de lectura (Read hit): el dato es suministrado por la caché local. No hay cambio de estado.
* Fallo de lectura (Read miss): si hay alguna caché con una copia de la línea de caché, se indica con la línea compartida (Shared) y suministra el dato a la caché solicitante, que mantiene una copia en el estado compartido-limpio (Shared-Clean). La caché suministradora deja su copia de la línea en el estado compartido-sucio (Shared-Dirty) o el estado compartido-limpio (Shared-Clean), en su caso. De lo contrario coge el dato desde la memoria principal y marca la caché limpia (Clean).
* Acierto de escritura (Write hit): si el estado del dato de la caché está en sucio (Dirty) o limpio (Clean), se actualiza el dato cacheado y se marca como sucio (Dirty). Si el estado es compartido-limpio (Shared-Clean) o compartido-sucio (Shared-Dirty) entonces actualiza las otras cachés. Si la línea compartida (Shared) está establecida, cambia la caché local a compartido-sucio (Shared-Dirty) y todas las otras a compartido-limpio (Shared-Clean), de lo contrario el estado de la caché local cambia a sucio (Dirty).
* Fallo de escritura (Write miss): si hay alguna caché con una copia, esa caché suministra el dato. La escritora genera una difusión de escritura, la caché local cambia a compartido-sucio (Shared-Dirty) y todas las otras a compartido-limpio (Shared-Clean). De lo contrario, la memoria principal suministra el dato y el estado de la caché local cambia a sucio (Dirty).
