Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Duda con política de escritura write-back en protocolo MESI #142

Open
rodrigooflores opened this issue Nov 30, 2024 · 2 comments
Open

Duda con política de escritura write-back en protocolo MESI #142

rodrigooflores opened this issue Nov 30, 2024 · 2 comments

Comments

@rodrigooflores
Copy link

Hola!, estudiando el protocolo MESI, me surgió una duda del funcionamiento de la política de escritura write-back cuando más de una CPU modifica una misma línea. Sé que cuando una CPU lee una dirección que anteriormente fue modificada por otra CPU, ahí recién se actualiza el valor de esa dirección en la memoria compartida, pero no estoy seguro de entender del todo qué pasa con dos modificaciones.
Por ejemplo con el siguiente caso:
duda_mesi

Cuando la CPU 0 lee (en la instrucción 5) la dirección que había modificado la CPU 1 (en la instrucción 4) se actualiza en la memoria compartida a $3$. Pero cuando la CPU 1 modifica (en la instrucción 4) el valor que había cambiado la CPU 0 (en la instrucción 3), ¿la memoria compartida queda con el valor antiguo $(2)$ que había cambiado la CPU 0?

@Geeermy
Copy link
Contributor

Geeermy commented Nov 30, 2024

¡Hola!

Voy a explicar en orden lo que pasa desde la instrucción 3 a la instrucción 5, para que quede súper claro.

  • Instrucción 3: CPU0 modifica var1 y su valor queda en 2 en su caché. En este punto, el valor de var1 sigue siendo 5 en la memoria compartida, solo se actualiza en la caché de la CPU0.
  • Instrucción 4: CPU1 modifica var1 y su valor queda en 3 en su caché. Por protocolo, la CPU0 deberá invalidar en su caché la línea de var1, pero antes enviará los cambios a la memoria compartida (a esto le llamamos flush). Entonces, en este instante se actualiza el valor de var1 a 2 en la memoria compartida, mientras que será 3 en la caché de la CPU1 (en la caché de la CPU0 queda invalidado el contenido).
  • Instrucción 5: CPU0 lee el valor var1. Como este se encuentra modificado, la CPU1 debe hacer flush de los cambios a la memoria principal antes de que CPU0 pueda obtener el valor desde la memoria compartida. Por lo tanto, en este instante var1 se actualiza a 3 en la memoria principal, lo que permite que la CPU0 pueda leer el valor correcto. Dado que el contenido actualizado ahora vive en la caché de más de un procesador, su estado pasa a ser Shared en ambas.

Entonces, respondiendo directamente a tu pregunta: Sí, en ese instante la memoria queda con el valor desactualizado igual a 2, correspondiente a la modificación que realizó CPU0.

Si tienes más dudas, consulta en este mismo hilo. :)

¡Saludos!

@rodrigooflores
Copy link
Author

rodrigooflores commented Nov 30, 2024

Me quedó súper claro, muchas gracias :)
Saludos!

# for free to join this conversation on GitHub. Already have an account? # to comment
Development

No branches or pull requests

2 participants