Diferencia entre revisiones de «Protocolo MESI»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
CEM-bot (discusión · contribs.)
m Correcciones menores PR:CEM.
Deshecha la edición 23198062 de CEM-bot (disc.)
Línea 14: Línea 14:
Una cache puede cambiar el estado de una línea en cualquier momento, pasándolo a estado Inválido. Una línea Modificada debe ser escrita antes.
Una cache puede cambiar el estado de una línea en cualquier momento, pasándolo a estado Inválido. Una línea Modificada debe ser escrita antes.


Una cache que contenga una línea en estado Modificado debe sondear (interceptar) todos los intentos de lectura (de todas las CPUs del sistema) a la memoria principal y copiar los datos que tiene. Esto se hace habitualmente forzando la lectura ''back off'' (cancelar el bus de transferencia a memoria), para luego escribir los datos en memoria principal y cambiar la línea de cache ha estado Compartido.
Una cache que contenga una línea en estado Modificado debe sondear (interceptar) todos los intentos de lectura (de todas las CPUs del sistema) a la memoria principal y copiar los datos que tiene. Esto se hace habitualmente forzando la lectura ''back off'' (cancelar el bus de transferencia a memoria), para luego escribir los datos en memoria principal y cambiar la línea de cache a estado Compartido.


Una cache que contenga una línea en estado Compartido debe también sondear todas las operaciones broadcast inválidas de otras CPUs, y descartar la línea (cambiándola a estado Inválido) una vez hecho.
Una cache que contenga una línea en estado Compartido debe también sondear todas las operaciones broadcast inválidas de otras CPUs, y descartar la línea (cambiándola a estado Inválido) una vez hecho.


Una cache que contenga una línea en estado Exclusivo también debe sondear todas las peticiones de lecturas del resto de CPUs y cambiar la línea ha estado Compartido una vez hecho.
Una cache que contenga una línea en estado Exclusivo también debe sondear todas las peticiones de lecturas del resto de CPUs y cambiar la línea a estado Compartido una vez hecho.


Los estados Modificado y Exclusivo son siempre precisos: corresponden a los poseedores de la línea correcta en el sistema. El estado Compartido puede ser impreciso: si alguna otra CPU descarga una línea Compartida, y esta CPU es la única que tiene una copia, la línea no será cambiada ha estado Exclusivo. (porque cambiar todas las lineas de cache de todas las CPUs no es práctico en un bus de sondeo broadcast)
Los estados Modificado y Exclusivo son siempre precisos: corresponden a los poseedores de la línea correcta en el sistema. El estado Compartido puede ser impreciso: si alguna otra CPU descarga una línea Compartida, y esta CPU es la única que tiene una copia, la línea no será cambiada a estado Exclusivo. (porque cambiar todas las lineas de cache de todas las CPUs no es práctico en un bus de sondeo broadcast)


En ese sentido el estado Exclusivo es una optimización oportunista: si la CPU quiere modificar la línea de cache ha estado Compartido, es necesario un intercambio por el bus para invalidar cualquier otra copia en cache. El estado Compartido permite modificar una línea de cache sin ningún intercambio por el bus.
En ese sentido el estado Exclusivo es una optimización oportunista: si la CPU quiere modificar la línea de cache a estado Compartido, es necesario un intercambio por el bus para invalidar cualquier otra copia en cache. El estado Compartido permite modificar una línea de cache sin ningún intercambio por el bus.


== Enlaces externos ==
== Enlaces externos ==

Revisión del 21:08 22 abr 2009

El protocolo MESI, también conocido como protocolo Illinois, es un extendido protocolo de coherencia de caché y coherencia de memoria, que fue creado por Intel en el procesador Pentium para "dar soporte más eficientemente a write-back en lugar del write-through de caché de CPU usado con anterioridad en el procesador 486".[1]

Cada línea de caché se marca con uno de los cuatro estados siguientes (codificados con dos bits adicionales):

  • M - Modified (Modificado): La línea de cache sólo está en la cache actual, y está "sucia"; ha sido modificado el valor de la memoria principal. Es necesario que los datos sean escritos otra vez en la memoria principal antes de permitir cualquier otra lectura del estado de la memoria (ya no es válida).
  • E - Exclusive (Exclusivo): La línea de cache sólo se encuentra en la cache actual, pero está "limpia"; coincide con el valor de la memoria principal.
  • S - Shared (Compartido): Indica que esta línea de cache puede estar duplicada en otras caches.
  • I - Invalid (Inválido): Indica que esta línea de cache no es válida.

Se puede leer de cache en cualquier estado excepto en Inválido. Una línea inválida puede ser cogida (de los estados Compartido o Exclusivo) para satisfacer una lectura.

Una escritura sólo puede ser llevada a cabo si la línea de cache está en estado Modificado o Exclusivo. Si está en estado Compartido todas las otras copias en otras caches deben ser puestas en estado Inválido antes. Esto se hace habitualmente con una operación broadcast.

Una cache puede cambiar el estado de una línea en cualquier momento, pasándolo a estado Inválido. Una línea Modificada debe ser escrita antes.

Una cache que contenga una línea en estado Modificado debe sondear (interceptar) todos los intentos de lectura (de todas las CPUs del sistema) a la memoria principal y copiar los datos que tiene. Esto se hace habitualmente forzando la lectura back off (cancelar el bus de transferencia a memoria), para luego escribir los datos en memoria principal y cambiar la línea de cache a estado Compartido.

Una cache que contenga una línea en estado Compartido debe también sondear todas las operaciones broadcast inválidas de otras CPUs, y descartar la línea (cambiándola a estado Inválido) una vez hecho.

Una cache que contenga una línea en estado Exclusivo también debe sondear todas las peticiones de lecturas del resto de CPUs y cambiar la línea a estado Compartido una vez hecho.

Los estados Modificado y Exclusivo son siempre precisos: corresponden a los poseedores de la línea correcta en el sistema. El estado Compartido puede ser impreciso: si alguna otra CPU descarga una línea Compartida, y esta CPU es la única que tiene una copia, la línea no será cambiada a estado Exclusivo. (porque cambiar todas las lineas de cache de todas las CPUs no es práctico en un bus de sondeo broadcast)

En ese sentido el estado Exclusivo es una optimización oportunista: si la CPU quiere modificar la línea de cache a estado Compartido, es necesario un intercambio por el bus para invalidar cualquier otra copia en cache. El estado Compartido permite modificar una línea de cache sin ningún intercambio por el bus.

Enlaces externos

  1. IA-32 Intel Architecture Software Developers Manual

atc2.aut.uah.es ,msdnvñ-asdv´lk<sndváidjvdlbm<ZÇÑLOvkaçpokvçaepmgbvzçñldbmç<SOLKGDÇ<`ÑDOBKEPÇRHGKÇAEPOJHRÇa