Ejercicio 8

Ejercicio 8

de Rodrigo Alain De La Vega Rodriguez -
Número de respuestas: 1

Buenas! Mirando el ejercicio supongo que la idea es que n al final de la ejecución de los dos procesos concurrentes sea 40. Dicho esto tengo las siguientes dudas:

Al hacer la parte 1 de este ejercicio no entiendo si el for del procedimiento incremento lo debo poner en el entrelazado, por ejemplo yo quise analizar que pasaba cuando ambos procesos tenían su for en i=20 y solo quedaba esa ejecución. Por lo tanto los pasos del algoritmo a analizar son:
1) for i in 1..20 loop (cuando i=20, ultima ejecución)
2) n := n + 1;
Por lo tanto el n = 38 en ese momento para ambos procesos y luego hago el entrelazado para ver los casos posibles de falla.

Pero en la segunda parte "cambio" n := n + 1 por:
1) MOV Reg1, [ n ]
2) INC Reg1
3) MOV [ n ], Reg1

(No importa si están mal las instrucciones, la idea es mostrar que son varios pasos para poder realizar la suma y la asignación)

Luego sigo la misma idea que en el paso 1 para analizar que paso con el caso cuando n = 38 e i=20 llegando a la misma conclusión.

Si algo no se entiende adjunto el pdf  del ejercicio razonado.

La duda es: Que me tiene que transmitir este ejercicio? ya que no logro verlo aplicando los entrelazados.
Supongo que al hacer que n := n + 1 no sea atómica puede generar otros resultados erróneos pero cuales serian? no se que me esta faltando para verlo.

Agradezco me puedan corregir. Gracias!

En respuesta a Rodrigo Alain De La Vega Rodriguez

Re: Ejercicio 8

de Federico Rivero -

Estimado,

Cómo estás? Con respecto a tu primer consulta, incluir o no el for para el caso de n = n + 1 no debería cambiar el resultado. El entrelazado que hacés al principio (a la izquierda en el screenshot de abajo), es correcto. El de la derecha no,  Fijate donde marqué, ese pasaje es incorrecto. La idea es que n = n + 1 se ejecuta de forma atómica, por lo tanto, al ejecutar 2, estás realizando la lectura de n y la escritura de n + 1. Teniendo eso en cuenta, el n leído es 39 porque inmediatamente antes el proceso 2 había incrementado n a 39, y por tanto el resultado final es n = 40.



La idea es generalizar un poco esos entrelazados para llegar a concluir que en las 20 iteraciones, el resultado de n va a ser siempre 40. 

Luego, la idea de la parte 2 es probar otros caminos del entrelazado para obtener diferentes valores del resultado (ya viste que 39 es un posible resultado). Acá sí te va a convenir hacer un entrelazado un poco más grande (4 o 5 iteraciones, diría), para intentar deducir cuáles son los posibles resultados.

Saludos,
Federico