Protocolo de coherencia MESI-Cache de la CPU Intel Pentium Series

MESES

¿Qué es MESI?

==> MESI es un protocolo de coherencia de caché

¿Por qué debería haber MESI?

==> Para coordinar las cachés en múltiples núcleos de CPU para mantener los datos consistentes

En primer lugar, debido a que la velocidad de la CPU y la memoria no coinciden, hay un caché de CPU. El caché de una CPU moderna generalmente se divide en tres niveles, L1, L2 y L3. En general, en un procesador central, cada núcleo de la CPU tiene su propio caché L1 y L2, el caché L3 es compartido por todos los núcleos. Cuando la CPU lee ciertos datos, primero los leerá de la caché. Si la lectura de la caché falla, cargará los datos de la memoria principal a la caché. Una unidad de datos en la caché se llama línea de caché, que generalmente tiene 64 bytes. La carga de datos desde la memoria principal a la caché no se carga un byte a la vez, sino una línea de caché a la vez.

imagen-20200423180437623

MESI se utiliza para garantizar la coherencia de datos entre múltiples cachés

Cómo funciona MESI

MESI es un protocolo de coherencia de caché basado en la invalidación y admite la escritura diferida. Dado que el acuerdo se inventó en la Universidad de Illinois, también se denomina Acuerdo de Illinois.

El protocolo MESI es un protocolo de coherencia de caché basado en invalidación y es uno de los protocolos más comunes que admiten cachés de escritura diferida. También se conoce como protocolo de Illinois

Los 4 acrónimos de MESI representan respectivamente los 4 estados de una línea de caché

  1. Modificado

    La línea de caché solo existe en el caché actual, no en otros cachés, y los datos de la línea de caché no son coherentes con los datos de la memoria principal, que son datos sucios (sucios)

  2. Exclusivo

    La línea de caché solo existe en el caché actual, no en otros cachés, y los datos de la línea de caché son consistentes con los datos en la memoria principal, que está limpia

  3. Compartido

    La línea de caché existe en múltiples cachés y los datos de la línea de caché son consistentes con los datos de la memoria principal

  4. Inválido

    La línea de caché no es válida

El protocolo MESI es en realidad un modelo de una máquina de estados finitos (Finite State Machine) En esta FSM se definen 4 estados y 2 tipos de estímulos que provocan transiciones de estados. En pocas palabras, MESI son 4 estados, más 2 incentivos.

Cada caché necesita recibir comandos de lectura y escritura de su propia CPU, y también necesita monitorear los eventos que ocurren en el bus (bus snooping).

Los 2 estímulos son los siguientes

  • El primer tipo de estímulos está en el lado de la CPU. Las operaciones emitidas por un cierto núcleo de la CPU a su caché incluyen lectura y escritura

    1. PrRd

      La solicitud del procesador para leer un bloque de caché

      El procesador inicia una solicitud de lectura a su caché

    2. PrWr:

      La solicitud del procesador para escribir un bloque de caché

      El procesador inicia una solicitud de escritura en su caché

  • El segundo tipo de estímulos está en el lado del bus, eventos en el bus monitoreados por el controlador de caché

    1. BusRd

      Solicitud fisgoneada que indica que hay una solicitud de lectura a un bloque de caché realizada por otro procesador

      Una caché detecta una solicitud de lectura de otro procesador en el bus

    2. BusRdX

      Solicitud fisgoneada que indica que hay una solicitud de escritura en un bloque de caché realizada por otro procesador que no tiene el bloque

      Un caché rastrea una solicitud de escritura de otro procesador en el bus, y el caché del procesador en sí no contiene estos datos

    3. BusUpgr

      Solicitud fisgoneada que indica que hay una solicitud de escritura en un bloque de caché realizada por otro procesador, pero ese procesador ya tiene ese bloque de caché que reside en su caché

      Un caché rastrea una solicitud de escritura de otro procesador en el bus, y el caché del procesador mismo contiene estos datos

    4. Enjuagar

      Solicitud fisgoneada que indica que otro procesador vuelve a escribir un bloque de caché completo en la memoria principal

      Un caché detecta que otro procesador escribe un bloque de caché en la memoria principal.

    5. FlushOpt

      Solicitud fisgoneada que indica que un bloque de caché completo se publica en el bus para suministrarlo a otro procesador (transferencia de caché a caché)

      Un caché detecta que hay un bloque de caché que pasa por el bus.

    Las transiciones de estado y la respuesta en un estado particular con respecto a diferentes entradas se muestran a continuación

Estado inicial Operación Respuesta
Inválido (I) PrRd Emita BusRd a los otros Caches bus, vea BusRd y verifique si tienen una copia no inválida, informe el envío de cacheState transición a (S) Shared , si otras Caches tienen copia no inválida. State transición a (E) Exclusive , si ninguna (debe asegúrese de que todos los demás hayan informado) .Si otros cachés tienen copia, uno de ellos envía valor, de lo contrario, lo recupera de la memoria principal
PrWr Emitir señal BusRdX en la transición busState a (M) Modificado en la caché solicitante. Si otras cachés tienen copia, envían valor, de lo contrario, obtienen de la memoria principal Si otras cachés tienen copia, ven la señal BusRdX e invalidan sus copias. Escribir en el bloque de caché. modifica el valor.
Exclusivo (E) PrRd No se generan transacciones de bus El estado permanece igual. Lee el bloque es un Cache Hit
PrWr No se generan transacciones de bus La transición de estado de escritura exclusiva a (M) modificada en el bloque es un acierto de caché
Compartido (S) PrRd No se generan transacciones de bus. El estado permanece igual. Lee el bloque es un Cache Hit.
PrWr Emite la señal BusUpgr en el bus. Transición del estado a (M) Modificado .otras cachés ver BusUpgr y marcar sus copias del bloque como (I) Invalid.
Modificado (M) PrRd No se generan transacciones de bus El estado permanece igual. Lee el bloque es un golpe de caché
PrWr No se generan transacciones de bus El estado permanece igual. Escribir en el bloque es un acierto de caché.
Estado inicial Operación Respuesta
Inválido (I) BusRd Sin cambio de estado. Señal ignorada.
BusRdX / BusUpgr Sin cambio de estado. Señal ignorada
Exclusivo (E) BusRd Transición a Compartido (ya que implica una lectura que tiene lugar en otra caché). Coloque FlushOpt en el bus junto con el contenido del bloque.
BusRdX Transición a .Put FlushOpt no válido en Bus, junto con los datos del bloque ahora invalidado.
Compartido (S) BusRd Sin cambio de estado (otro caché realizó la lectura en este bloque, por lo que aún está compartido). Puede poner FlushOpt en el bus junto con el contenido del bloque (elección de diseño, qué caché con estado compartido hace esto).
BusRdX Transición a no válido (la caché que envió BusRdX se modifica) Puede poner FlushOpt en el bus junto con el contenido del bloque (elección de diseño, qué caché con estado compartido hace esto)
Modificado (M) BusRd Transición a ** (S) Shared. ** Ponga FlushOpt en Bus con datos. Recibido por el remitente de BusRd y controlador de memoria, que escribe en la memoria principal.
BusRdX Transición a (I) no válido. Ponga FlushOpt en el bus con datos. Recibido por el remitente de BusRdx y controlador de memoria, que escribe en la memoria principal.

Enlace de referencia:
https://en.wikipedia.org/wiki/MESI_protocol

Supongo que te gusta

Origin blog.csdn.net/vcj1009784814/article/details/106544494
Recomendado
Clasificación