Algoritmo Peterson en arquitecturas modernas

Algoritmo Peterson en arquitecturas modernas

de Maximiliano Diaz Burgueño -
Número de respuestas: 2

Buen dia.

Estoy leyendo el libro del curso en su novena edición, y en el capítulo 5.3 dice:

Because of the way modern computer architectures perform basic machine-language instructions, such as load and store, there are no guarantees that Peterson’s solution will work correctly on such architectures.

Cómo se manejan las arquitecturas modernas para que el algoritmo deje de funcionar?

En respuesta a Maximiliano Diaz Burgueño

Re: Algoritmo Peterson en arquitecturas modernas

de Federico Rivero -

Estimado,

Consideremos un procesador multinúcleo, donde estos dos procesos del algoritmo de peterson puedan ejecutar a la misma vez. Lo que se tiene que respetar para que el algoritmo funcione, es que en todo momento, ambos procesos vean los mismos valores en las variables. Es decir, si ambos ejecutan las líneas

flag[i] = true; 
turn = j;
a la vez, entonces no importa quién haya ejecutado primero y quién haya ejecutado después, pero al leer los valores en el while, deben ver los mismos valores en la variables.

Lo que sucede en las arquitecturas modernas, es que para no perder tiempo, los loads y stores se envían al sistema de memoria y continúan la ejecución de instrucciones, utilizando estructuras internas a la CPU para adelantar los valores. Lo que puede pasar, es que ambos procesadores ejecuten 'turn = j' a la vez, y al evaluar la condición del while, vean valores diferentes en la variable turn (cada uno va a leer el valor que seteó), por lo tanto ambos entrarían en la sección crítica. Esto intuitivamente hace pensar que los procesadores 'funcionan mal', pero no, es un tema de sincronizacion, los procesadores respetan ciertas reglas definidas en lo que se llama su modelo de consistencia de memoria. Naturalmente, no se exige que todas las CPUs tengan que ver el mismo valor de memoria si inician lecturas al mismo tiempo 

Saludos!

        Federico