Fork Join
Fork Join
Fork Join
Curso 2009/2010
Grafos de Precedencia
Representacin grca de un algoritmo en el que se establece el orden de ejecucin de un conjunto de instrucciones y/o datos.
I1 I1
I2
I2
I4
I5 I3 I3 I7 I6
Algoritmo secuencial
Algoritmo concurrente
Los procesos concurrentes de un algoritmo pueden ser independientes o compartir datos. Nuestro objetivo: estudiar ambos tipos de relaciones entre procesos concurrentes, mediante soluciones independientes del procesador y su algoritmo de planicacin.
Curso 2009/2010
I0
I1
I2
I3
Curso 2009/2010
I0
I1
I2
I3
I4
Problemas: El uso de GOT O perjudica la legibilidad del programa. No empleado en lenguajes de alto nivel. Difcil depuracin etiquetas. Alternativa: Sentencias COBEGIN y COEND.
Curso 2009/2010
Ejercicio #1: Implementar el siguiente grafo con: (i) sentencias FORK y JOIN y (ii) sentencias COBEGIN y COEND.
S1
S2
S3
S4
S5
S6
S7
Curso 2009/2010
S4
S5
S6
S7
Curso 2009/2010
S1
S2
S3
S0 : x = 100; S1 : x := x + 10; S2 : if x > 100 then write(x); else write (x 50); S3 : nop;
Escenario #1: S1 y S2 Se escribe x = 110. Escenario #2: S2 y S1 Se escribe x = 50. Escenario #3: S2 pierde el control (p. ej. n de quantum) antes de escribir y sigue S1 Se escribe x = 60. Se han propuesto mltiples soluciones para tratar situaciones indeterministas con procesos concurrentes compartiendo datos.
Curso 2009/2010
Solucin de Bernstein
Cada proceso Pi est asociado a dos conjuntos: R(Pi ): conjunto de variables accedidas durante la ejecucin de Pi . W (Pi ): conjunto de variables modicadas durante la ejecucin de Pi . Bernstein concluy que para que dos procesos Pi y Pj , concurrentes, puedan ejecutarse de forma determinista tienen que satisfacerse las siguientes condiciones: R(Pi ) W (Pj ) = W (Pi ) R(Pj ) = W (Pi ) W (Pj ) = Condiciones sucientes pero no necesarias slo se pueden compartir variables de lectura. Objetivo: Buscar soluciones al indeterminismo sin que se cumplan las condiciones de Bernstein compartir variables de escritura.
Curso 2009/2010
Seccin Crtica
Ejemplo de motivacin: contar el nmero de coches que pasan por los dos carriles de una autopista. El problema surge cuando los procesos-contadores intentan acceder a una variable compartida. Seccin crtica: zona de cdigo de un proceso en la cual se lee y/o modican las variables compartidas por los procesos concurrentes. Solucin: exclusin mutua cuando un proceso est en su seccin crtica, ningn otro puede estar en la suya. Para ello, adoptaremos las restricciones de Djkstra: La solucin debe ser independiente del HW o del nmero de procesos. No se puede realizar ninguna suposicin sobre la velocidad relativa de los procesos. Cuando un proceso est fuera de su seccin crtica no puede impedir a otros procesos entrar en sus respectivas secciones crticas. La seleccin del proceso que debe entrar en la seccin crtica no puede posponerse indenidamente. Puede producirse interbloqueo: procesos bloqueados que slo podran ser desbloqueados por otros que tambin estn en bloqueo.
Curso 2009/2010
2.
3.
4.
Algoritmo de Dekker
Curso 2009/2010
Conclusiones
Las soluciones son mucho ms complejas de lo que parecen a simple vista. Incluso en el algoritmo de Dekker la sincronizacin se consigue siempre mediante espera activa (esperar por una condicin comprobndola continuamente) despilfarro de recursos. La programacin concurrente tiene que ser sistemtica Demasiados escenarios de prueba para ingenieros SW. Es necesario recurrir a herramientas de programacin ms potentes herramientas de sincronizacin: Herramientas de bajo nivel. Herramientas de nivel intermedio: semforos. Herramientas de alto nivel: regiones crticas y monitores.
Curso 2009/2010
Herramientas de Sincronizacin
Funciones primitivas, implementadas de forma SW o HW, que ayudan a controlar la interaccin entre procesos concurrentes: Sincronizacin: Los procesos intercambian seales que controlan su avance. Comunicacin: Los procesos intercambian informacin. Caractersticas deseables: Desde el punto de vista conceptual: Simplicidad. Generalidad. Vericabilidad. Desde el punto de vista de implementacin: Eciencia. Tipos de herramientas de sincronizacin: Nivel HW: acceso a recursos HW compartidos asegurando uso en exclusin mutua (por ejemplo, memoria y buses). Nivel SW: LOCK/UNLOCK, TEST-AND-SET, SWAP.
Curso 2009/2010
Curso 2009/2010
Los Semforos
Objetivo: solucin al problema de la exclusin mutua evitando la espera activa (Dijkstra, 1965). Un semforo sem consta de tres partes: Una variable entera interna (s) con un valor mximo N (no accesible para los procesos). Una cola de procesos (no accesible para los procesos). Dos funciones bsicas de acceso: wait(sem): si s < 0, el proceso se suspende en la cola asociada al semforo. signal(sem): si hay algn proceso suspendido en la cola asociada al semforo, se despierta al ms prioritario; en caso contrario, se incrementa en una unidad el valor de s (sin superar el valor mximo N ).
Curso 2009/2010
Curso 2009/2010
Curso 2009/2010
Semforos de Paso
Permiten implementar grafos de precedencia. Para cada punto de sincronizacin entre dos procesos: semforo binario con s = 0. El proceso que debe esperar ejecuta wait(sem). Al alcanzar un punto de sincronizacin el otro proceso ejecuta signal(sem).
Curso 2009/2010
Sincronizacin entre procesos en funcin de una variable entera: Semforo cuya variable s est inicializada a N 0 (siendo N el valor mximo). El proceso que debe esperar ejecuta wait(sem). Al alcanzar un punto de sincronizacin el otro proceso ejecuta signal(sem). Ejemplo clsico: problema del productor-consumidor (con bfer limitado e ilimitado).
Curso 2009/2010
Curso 2009/2010
PROGRAM P-C; VAR buffer: ARRAY [N] of datos; s: SEMAFORO //en exclusin mutua vacio: SEMAFORO //de condicin BEGIN s=1; vacio=0; COBEGIN P; C; COEND END
PROGRAM P-C; VAR buffer: ARRAY [N] of datos; s: SEMAFORO //en exclusin mutua vacio, lleno: SEMAFORO //de condicin BEGIN s=1; // exclusin mutua vacio=0; //de condicin lleno=N; //de condicin COBEGIN P; C; COEND END
Arroz
Los lsofos cogen 2 palillos, se echan arroz del plato, comen y dejan los palillos. Suponemos que el arroz no se acaba nunca y que cada lsofo slo puede coger los palillos de los compaeros que tiene a ambos lados. Recurso compartido: los palillos.
Curso 2009/2010
PROGRAM CENA-FILOSOFOS; VAR palillos: ARRAY [0:4] of SEMAFORO; BEGIN for i=0:4 palillos[i]=1; // exclusin mutua COBEGIN for i=0:4 FILOSOFO[i]; COEND END
Un bloque de varios WAIT no es indivisible; un solo WAIT s lo es. Solucin invlida: 5 lsofos pueden bloquear un solo palillo y nadie come! Solucin correcta: comedor virtual con 4 comensales (1 lsofo siempre come). Semforos utilizados: en exclusin mutua (palillos, incializados a 1) y de condicin (comedor, inicializado a 4).
Curso 2009/2010
Conclusiones
Ventajas: Mecanismo seguro de acceso a recurso compartido mediante encapsulamiento de las operaciones sobre la variable que controla el semforo. Consiguen sincronizacin de procesos concurrentes evitando la espera activa. El programa principal debe inicializar el semforo (segn su uso). Inconvenientes: La inicializacin es crtica, as como confundir un wait con un signal u omitir alguno de ellos. Resultan programas muy grandes y complejos, difciles de depurar. Soluciones alternativas: regiones crticas y monitores.
Curso 2009/2010
Curso 2009/2010