You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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:
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?
The text was updated successfully, but these errors were encountered:
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. :)
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:
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?
The text was updated successfully, but these errors were encountered: