Las mejores preguntas (y algunas respuestas)

 

En esta página se irán recopilando las mejores preguntas realizadas tanto en clase como por mail, sobre Paralelismo y Concurrencia en Sistemas. Si usted desea hacer una pregunta, responder alguna, enviar una pregunta interesante junto con su respuesta, o realizar algún comentario sobre alguna de las respuestas ofrecidas, simplemente envíe un e-mail.

Obs: Si desea que su nombre NO figure junto con la pregunta, aclárelo en el mail y la pregunta será incluida en forma anónima.

 


Pregunta: Fernando Sagui (en clase 27/8/03)

                      ¿Si varios procesos hacen LOCK(S) y quedan esperando (spinning) se tiene en cuenta el orden de llegada cuando

                       algún otro proceso hace UNLOCK(S)?

Respuesta:

La pregunta es muy interesante porque de no existir ese orden, entonces podría darse el caso que un proceso se quede para siempre esperando un UNLOCK y siempre haber otro proceso que se lo “roba”.

Según la definición de LOCK como un bucle de “busy waiting” no habría ningún orden asociado,

sin embargo, parecería ser que la implementación de Multi-Pascal si conserva el orden de llegada y los procesos son liberados en ese orden.

Ejecute el programa spin.mp y observe como se liberan los procesos.

 


Pregunta: Guillermo Ayala (mail 4/9/03)

                    La operación C? sobre un canal ¿es exclusiva? o puede suceder por ejemplo en

                                                           IF C? THEN e:=C;

si el canal tiene un único elemento, dos procesos pasen la condición del IF y uno consuma el elemento y el otro se quede esperando.  Si es así, la solución sería poner el IF entre un Lock y Unlock y así evitar deadlocks

Respuesta:

Es cierto, varios procesos pueden sensar un canal con C? y cuando van a leer el elemento otro proceso ya lo sacó.

La propuesta de Guillermo es correcta.

El programa canal.mp fue construido para ejemplificar esta situación.

 


Pregunta: Dana Urribarri (en clase 30/8/04)

                    ¿Qué valores de ‘ i ’ lee el procedimiento “PutinPlace” si no usa parámetro en la versión de “rank sort” del libro de Lester93?

Respuesta:

Claramente, para que el procedimiento lea los valores correctos de ‘ i ’ debe usar un parámetro. Pero, cuando no lo utiliza y se declara la variable ‘ i ’ como global, ¿qué pasa?

Si en “FORALL i:= 1 TO N DO…” tuviéramos el comportamiento de un FOR convencional, el procedimiento podría leer N (si el proceso padre terminó de crear todos sus hijos) o algún valor intermedio.

Sin embargo, el entorno del índice del FORALL está limitado al cuerpo de la sentencia del FORALL, y no modifica el valor de la variable global. Esto es, dentro del cuerpo del FORALL, la variable ‘ i ’ se comporta como una variable local.

Entonces, el procedimiento va a leer el valor que tenía ‘ i ’ antes de la ejecución del FORALL. Incluso, al terminar el FORALL, la variable no queda en N sino en su valor previo a la ejecución del FORALL (no se modifica).

El planteo de Dana fue correcto.

Las variantes de este problema se encuentran en cuatro pequeños programas que demuestran el comportamiento explicado: forall1.mp, forall2.mp, forall3.mp, forall4.mp.

 


Pregunta: Virginia Perez (clase 30/8/04)

Al simular un spinlock con un channel como plantea [Lester93], si un proceso hace varios “unlocks” seguidos antes de un “lock”, ¿no se acumularían los “unlocks” en el channel, produciendo un efecto diferente al del verdadero unlock con spinlocks?

Respuesta: Si.

Se produciría un efecto diferente. La única forma de garantizar que sea equivalente es que

el programador ponga siempre un “lock” antes de un “unlock”.