12.07.2015 Views

Introducción - Departamento de Lenguajes y Sistemas Informáticos

Introducción - Departamento de Lenguajes y Sistemas Informáticos

Introducción - Departamento de Lenguajes y Sistemas Informáticos

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Programación Concurrente. 3º Ingeniería Técnica <strong>de</strong> <strong>Sistemas</strong> yGestión.Dpto. <strong>Lenguajes</strong> y <strong>Sistemas</strong> Informáticos. ETSI InformáticaTema 1. Introducción.Relación <strong>de</strong> problemas1. Consi<strong>de</strong>rar el siguiente fragmento <strong>de</strong> programa para 2 procesos A y B:proceso A: for seqA:= 1 to 10 do x:=x+1;proceso B: for seqB:= 1 to 10 do x:=x+1;Suponer que la variable x está inicializada a 0, que ambos procesos A y B se ejecutan unavez y que seqA y seqB no son variables compartidas. Los dos procesos pue<strong>de</strong>n ejecutarsea cualquier velocidad. ¿Cuáles son los posibles valores resultantes para x?. Suponer que x<strong>de</strong>be ser cargada en un registro para incrementarse.2. ¿Cómo se podría hacer la copia <strong>de</strong>l fichero "f" en otro "g", <strong>de</strong> forma concurrente,utilizando la instrucción concurrente COBEGIN-COEND?.3. Construir, utilizando las instrucciones concurrentes COBEGIN-COEND y fork-join,programas concurrentes que se correspondan con los grafos <strong>de</strong> prece<strong>de</strong>ncia que semuestran a continuación:P0P0P0P1 P2P1P2P1P2P3P4P3P3 P5 P6P4 P5P4P5P6P6a) b) c)4. Dado el siguiente fragmento <strong>de</strong> programa concurrente, obtener su grafo <strong>de</strong> prece<strong>de</strong>nciaasociado:P0;COBEGINP1;P2;COBEGINP3;P4;P5;P6;COENDP7;COENDP8;


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 25. Suponer un sistema <strong>de</strong> tiempo real que dispone <strong>de</strong> un captador <strong>de</strong> impulsosconectado a un contador <strong>de</strong> energía eléctrica. La función <strong>de</strong>l sistema consiste en contar elnúmero <strong>de</strong> impulsos producidos en 1 hora (cada Kwh consumido se cuenta como unimpulso) e imprimir este número en un dispositivo <strong>de</strong> salida. Para ello se ha <strong>de</strong> escribirun programa concurrente con 2 procesos: un proceso acumulador (lleva la cuenta <strong>de</strong> losimpulsos recibidos) y un proceso escritor (escribe en la impresora). En la variable comúna los 2 procesos "n" se lleva la cuenta <strong>de</strong> los impulsos. Suponiendo que el sistema seencuentra en un estado correspondiente al valor <strong>de</strong> la variable n=N y en estascondiciones se presentan simultáneamente un nuevo impulso y el final <strong>de</strong>l periodo <strong>de</strong> 1hora, obtener las posibles secuencias <strong>de</strong> ejecución <strong>de</strong> los procesos y cuáles <strong>de</strong> ellas soncorrectas.6. La inhibición <strong>de</strong> las interrupciones no funciona correctamente cuando hay seccionescríticas anidadas. Escribir 2 rutinas: ProtocoloEntrada (conecta las interrupciones) yProtocoloSalida (las <strong>de</strong>sconecta) para resolver el problema.7. En vez <strong>de</strong> la instrucción TestAndSet, algunos or<strong>de</strong>nadores proveen <strong>de</strong> una instrucciónatómica que incrementa en 1 el valor <strong>de</strong> Lock:FUNCTION {ATOMICA} TestAndInc(VAR Lock:INTEGER):INTEGER;BEGINTestAndInc:=Lock; Lock:=Lock+1END;Escribir protocolos (uno <strong>de</strong> entrada y otro <strong>de</strong> salida) para una sección crítica utilizandodicha instrucción.8. Suponer que el siguiente algoritmo (inserción directa):PROCEDURE sort(inferior,superior:INTEGER);VAR i,j: INTEGER;BEGINFOR i := inferior TO superior-1 DOFOR j := i+1 TO superior DOIF a[j] < a[i] THEN swap(a[i], a[j]);END;quisiese ser utilizado en un programa paralelo <strong>de</strong> la forma siguiente:COBEGIN sort(1,n);sort(n+1,2n) COEND;merge(1,n+1,2n);a) Si el tiempo <strong>de</strong> ejecución secuencial <strong>de</strong>l algoritmo es t(n)=n(n-1)/2 (≈ n 2 /2); ¿Cuálsería el tiempo <strong>de</strong> ejecución <strong>de</strong>l programa paralelo si la mezcla lleva en realizarse noperaciones?b) Compruébese con una tabla que el número <strong>de</strong> operaciones <strong>de</strong>l algoritmo paraleloes significativamente menor.c) Escribir un procedimiento <strong>de</strong> mezcla que permitiese paralelizar las 3 operaciones:COBEGIN sort(1,n);sort(n+1,2n);merge(1,n+1,2n) COEND;9. Escribir un programa concurrente para multiplicar matrices 3x3 con 3 procesosconcurrentes. (Nota: suponer que los elementos <strong>de</strong> las matrices se pue<strong>de</strong>n leersimultáneamente).10. Con el grafo <strong>de</strong> sincronización <strong>de</strong> la figura, escribir 2 protocolos:


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 3EsperarPor (A:actividad) {espera que acabe la actividad A}Acabar (A:actividad) {hace constar, actividad A acabada}A B CD E FG H Ique permitan la sincronización perfecta <strong>de</strong> las activida<strong>de</strong>s <strong>de</strong>l grafo. Prever que el grafo <strong>de</strong>activida<strong>de</strong>s pue<strong>de</strong> ser ejecutado más <strong>de</strong> una vez.11. ¿Qué significa un ciclo en un grafo <strong>de</strong> sincronización?Tema 2. Exclusión Mutua.12. ¿Qué diferencia fundamental existe entre un bucle <strong>de</strong> espera activa y una variableinterruptor que da turnos para la sincronización <strong>de</strong> los procesos?13. ¿Utiliza espera ocupada el Algoritmo <strong>de</strong> Dekker, si el segundo proceso está en susección, Turno= 1 y el proceso 1 está intentando entrar en su sección?14. Demostrar que el A. <strong>de</strong> Dekker hace posible que un proceso espere in<strong>de</strong>finidamente("inanición") a entrar en su sección Crítica, con la suposición <strong>de</strong> que siempre que unproceso entra en la sección Crítica eventualmente la abandonará.15. Generalizar el A. <strong>de</strong> Dekker para 3 procesos.16. ¿Podría pensarse que una posible solución al problema <strong>de</strong> la exclusión mutua, Sería elsiguiente algoritmo que no necesita compartir una variable "Turno" entre los 2 procesos?a) ¿Se satisface la exclusión mutua?b) ¿Se satisfacen las propieda<strong>de</strong>s <strong>de</strong> vivacidad?Compararlo con el Algoritmo <strong>de</strong> Dekker. Imaginar escenarios que <strong>de</strong>muestren lascontestaciones.Proceso ici=0;while cj=0 dobeginci:=1;while cj=0 do;ci=0;end;(*Seccion Critica*)ci:=1;17. ¿No se podría construir una solución más simple al problema <strong>de</strong> la exclusión mutua queel Algoritmo <strong>de</strong> Dekker utilizando la instrucción atómica TestAndSet(l)? ¿Cuál Sería dichasolución?.


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 418. ¿Qué ocurriría si el A. <strong>de</strong> Dekker se hubiera programado así?Proceso Pi;BEGINREPEATTurno:=i;WHILE Turnoi DO ;(*Seccion Critica*)Turno:=j;FOREVEREND;19. Al siguiente algoritmo se le conoce como solución <strong>de</strong> Hyman al problema <strong>de</strong> la exclusiónmutua. ¿Es correcta dicha solución?Proceso i (* inicialmente: c1,c2


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 5procesos. Discutir la corrección <strong>de</strong> esta solución: si es correcta, entonces probarlo. Si nofuese correcta, escribir escenarios que <strong>de</strong>muestren que la solución es incorrecta.PROGRAM intento; (Inicialmente c1,c2


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 6b) ¿Qué ocurriría si la instrucción primitiva EX fuese reemplazada por las 3 asignacionesanteriores?PROGRAM Intercambio; | BEGINVAR c:INTEGER; | c:=1;PROCEDURE P1; PROCEDURE P2; | COBEGINVAR l:INTEGER; VAR l:INTEGER; | P1;P2BEGIN BEGIN | COENDl:=0; l:=0; | END.REPEATREPEATREM1;REM2;REPEATREPEATEX(c,l);EX(c,l);UNTIL l=1;UNTIL l=1;CRIT1;CRIT2;EX(c,l);EX(c,l);FOREVER;FOREVER; END;END;END;


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 724. Consi<strong>de</strong>rar el siguiente algoritmo <strong>de</strong> exclusión mutua para n procesos (algoritmo <strong>de</strong>Knuth):Proceso(i)c: ARRAY[0..n] OF (pasivo, solicitando, enS_C);c:= pasivo;Turno:= 0;. . .REPEATc[i]:= solicitando;j:= Turno;WHILE ji DOIF c[j]pasivo THEN j:=TurnoELSE j:=(j-1) MOD n ;c[i]:= en_SC;k:= 0;WHILE k= n;Turno:= i;(* SECCION CRITICA *)Turno:= (i-1) MOD n ;c[i]:= pasivo;Escribir un escenario en el que 2 procesos consiguen pasar el bucle <strong>de</strong> la instrucción (7),suponiendo que el turno lo tiene inicialmente el proceso P(0).25. Demostrar que en la generalización <strong>de</strong>l algoritmo <strong>de</strong> Peterson para "n" procesos :REPEATFOR j:= 1 TO n-1 DOBEGINq[i]:=j;turno[j]:=i;WHILE (∃ki: q[k]>=j) AND (turno[j]=i) DO;END;.....SECCION CRITICA........q[i]:=0;UNTIL FALSE;cuando un proceso pasa a la etapa siguiente, se verifica una <strong>de</strong> estas dos condiciones:a) prece<strong>de</strong> a todos los <strong>de</strong>másb) no estaba solo en la etapa que ha <strong>de</strong>jado


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 8Tema 3. Monitores.26. Aunque un monitor garantiza la exclusión mútua, los procedimientos tienen que serre-entrantes. Explicar porqué.27. Demostrar que incluso si la implementación <strong>de</strong>l semáforo es FIFO, la simulación <strong>de</strong>lmonitor con semáforos no lo es.28. Se consi<strong>de</strong>ran dos recursos <strong>de</strong>nominados r1 y r2. Del recurso r1 existen N1 ejemplaresy <strong>de</strong>l recurso r2 existen N2 ejemplares. Escribir un monitor que gestione la asignación <strong>de</strong>los recursos a los procesos <strong>de</strong> usuario, suponiendo que cada proceso pue<strong>de</strong> pedir:• ⋅un ejemplar <strong>de</strong>l recurso r1• ⋅un ejemplar <strong>de</strong>l recurso r2• ⋅un ejemplar <strong>de</strong>l recurso r1 y otro <strong>de</strong>l recurso r2La solución <strong>de</strong>berá satisfacer estas dos condiciones:• Un recurso no será asignado a un proceso que <strong>de</strong>man<strong>de</strong> un ejemplar <strong>de</strong> r1 o unejemplar <strong>de</strong> r2 hasta que al menos un ejemplar <strong>de</strong> dicho recurso que<strong>de</strong> libre• Se dará prioridad a los procesos que <strong>de</strong>man<strong>de</strong>n un ejemplar <strong>de</strong> ambos recursos29. Escribir una solución al problema <strong>de</strong> "lectores-escritores" con monitores:a) Con prioridad a los lectores.b) Con prioridad a los escritores:c) Con priorida<strong>de</strong>s iguales30. Coches que vienen <strong>de</strong>l norte y <strong>de</strong>l sur preten<strong>de</strong>n cruzar un puente sobre un río. Sóloexiste un carril sobre dicho puente. Por lo tanto, en un momento dado, sólo pue<strong>de</strong> sercruzado por uno o más coches en la misma dirección (pero no en direcciones opuestas).a) Completar el código <strong>de</strong>l siguiente monitor queresuelve el problema <strong>de</strong>l acceso al puentesuponiendo que llega un coche <strong>de</strong>l norte (sur) ycruza el puente si no hay otro coche <strong>de</strong>l sur (norte)cruzando el puente en ese momento.b) Mejorar el monitor anterior, <strong>de</strong> forma que ladirección <strong>de</strong>l trafico a través <strong>de</strong>l puente cambiecada vez que lo hayan cruzado 10 coches en unadirección, mientras 1 ó más coches estuviesenesperando cruzar el puente en dirección opuesta.MONITORGestionaTraficoVAR ................PROCEDIMIENTO EntrarCocheDelNorte...................PROCEDIMIENTO SalirCocheDelNorte....................PROCEDIMIENTO EntrarCocheDelSur.....................


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 9PROCEDIMIENTO SalirCocheDelSurInicialización.......................31. Una tribu <strong>de</strong> antropófagos comparte una olla en la que caben M misioneros. Cuandoalgún salvaje quiere comer, se sirve directamente <strong>de</strong> la olla, a no ser que ésta esté vacía.Si la olla está vacía, el salvaje <strong>de</strong>spertará al cocinero y esperará a que éste hayarellenado la olla con otros M misioneros.Proceso salvajeProceso cocineroRepetir RepetirServirse_1_misionero; Dormir;Comer; Rellenar_olla;Siempre; Siempre;Implementar un monitor para la sincronización requerida, teniendo en cuenta que:• la solución no <strong>de</strong>be producir interbloqueo,• los salvajes podrán comer siempre que haya comida en la olla,• solamente se <strong>de</strong>spertará al cocinero cuando la olla esté vacía.32. Una cuenta <strong>de</strong> ahorros es compartida por varias personas (procesos). Cada personapue<strong>de</strong> <strong>de</strong>positar o retirar fondos <strong>de</strong> la cuenta. El saldo actual <strong>de</strong> la cuenta es la suma <strong>de</strong>todos los <strong>de</strong>pósitos menos la suma <strong>de</strong> todos los reintegros. El saldo nunca pue<strong>de</strong> sernegativo.a) Programar un monitor para resolver el problema, todo proceso pue<strong>de</strong> retirar fondosmientras la cantidad solicitada c sea menor o igual que el saldo disponible en la cuentaen ese momento. Si un proceso intenta retirar una cantidad c mayor que el saldo,<strong>de</strong>be quedar bloqueado hasta que el saldo se incremente lo suficiente (comoconsecuencia <strong>de</strong> que otros procesos <strong>de</strong>positen fondos en la cuenta) para que se puedaaten<strong>de</strong>r la petición. El monitor <strong>de</strong>be tener 2 procedimientos: <strong>de</strong>positar(c) y retirar(c).Suponer que los argumentos <strong>de</strong> las 2 operaciones son siempre positivos.b) Modificar la respuesta <strong>de</strong>l apartado anterior, <strong>de</strong> tal forma que el reintegro <strong>de</strong> fondos alos clientes sea servido según un or<strong>de</strong>n FIFO. Por ejemplo, suponer que el saldo es 200unida<strong>de</strong>s y un cliente está esperando un reintegro <strong>de</strong> 300 unida<strong>de</strong>s. Si llega otrocliente <strong>de</strong>be esperarse, incluso si quiere retirar 200 unida<strong>de</strong>s. Suponer que existe unafunción <strong>de</strong>nominada cantidad(cond) que <strong>de</strong>vuelve el valor <strong>de</strong> la cantidad (parámetro c<strong>de</strong> los procedimientos retirar y <strong>de</strong>positar) que espera retirar el primer proceso que sebloqueó (tras ejecutar WAIT en la señal cond).33. Los procesos P 1 , P 2 ,...,P n comparten un único recurso R, pero sólo un proceso pue<strong>de</strong>utilizarlo cada vez. Un proceso P i pue<strong>de</strong> comenzar a utilizar R si está libre; en casocontrario, el proceso <strong>de</strong>be esperar a que el recurso sea liberado por otro proceso. Si hayvarios procesos esperando a que que<strong>de</strong> libre R, se conce<strong>de</strong>rá al proceso que tenga mayorprioridad. La regla <strong>de</strong> prioridad <strong>de</strong> los procesos es la siguiente: el proceso P i tieneprioridad i (1


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 10<strong>de</strong> tipo A se bloquea.• Si un proceso <strong>de</strong> tipo B llama a la operación <strong>de</strong> sincronización, y no hay (al menos) 1proceso <strong>de</strong>l tipo A y 9 procesos <strong>de</strong>l tipo B (aparte <strong>de</strong> él mismo) bloqueados en laoperación <strong>de</strong> sincronización, entonces el proceso <strong>de</strong> tipo B se bloquea.• Si un proceso <strong>de</strong> tipo A llama a la operación <strong>de</strong> sincronización y hay (al menos) 10procesos bloqueados en dicha operación, entonces el proceso <strong>de</strong> tipo A no se bloqueay a<strong>de</strong>más <strong>de</strong>berán <strong>de</strong>sbloquearse exactamente 10 procesos <strong>de</strong> tipo B.• Si un proceso <strong>de</strong> tipo B llama a la operación <strong>de</strong> sincronización y hay (al menos) 1 proceso<strong>de</strong> tipo A y 9 procesos <strong>de</strong> tipo B bloqueados en dicha operación, entonces el proceso<strong>de</strong> tipo B no se bloquea y a<strong>de</strong>más <strong>de</strong>berán <strong>de</strong>sbloquearse exactamente 1 proceso <strong>de</strong>ltipo A y 9 procesos <strong>de</strong>l tipo B.• No se requiere que los procesos se <strong>de</strong>sbloqueen en or<strong>de</strong>n FIFO.


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 11Tema 4. <strong>Sistemas</strong> <strong>de</strong> Paso <strong>de</strong> Mensajes35. Consi<strong>de</strong>rar un conjunto <strong>de</strong> n procesos conectados en forma <strong>de</strong> anillo. Cada proceso tieneun valor local almacenado en su variable local mi_valor. Deseamos calcular la suma <strong>de</strong>los valores locales almacenados por los procesos <strong>de</strong> acuerdo con el algoritmo que seexpone a continuación. Los procesos realizan una serie <strong>de</strong> iteraciones para hacer circularsus valores locales por el anillo. En la primera iteración, cada proceso envía su valor localal siguiente proceso <strong>de</strong>l anillo, al mismo tiempo que recibe <strong>de</strong>l proceso anterior el valorlocal <strong>de</strong> éste. A continuación acumula la suma <strong>de</strong> su valor local y el recibido <strong>de</strong>s<strong>de</strong> elproceso anterior. En las siguientes iteraciones, cada proceso envía al siguiente procesosiguiente el valor recibido en la anterior iteración, al mismo tiempo que recibe <strong>de</strong>l procesoanterior un nuevo valor. Después acumula la suma. Tras un total <strong>de</strong> n-1 iteraciones, cadaproceso conocerá la suma <strong>de</strong> todos los valores locales <strong>de</strong> los procesos. Implementar estealgoritmo en MPI.mi_valor=0suma3= 00mi_valor=1suma =113suma = 3 suma = 120mi_valor=3suma =ITERACIÓN 3 12mi_valor=2suma = 2suma = 5 suma = 31ITERACIÓN 22suma = 5 suma = 4suma = 6 suma = 613suma = 6 suma = 30ITERACIÓN 2suma = 6 suma = 6RESULTADO


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 1236. Sean dos conjuntos <strong>de</strong> 4 procesos cada uno: P(i:1..4) y Q(i:1..4). Deseamos que cadaproceso P(j) envie una secuencia <strong>de</strong> valores enteros al proceso correspondiente Q(j). Enlugar <strong>de</strong> realizar esta comunicación directamente, la haremos a través <strong>de</strong> un procesomultiplexor y un proceso <strong>de</strong>multiplexor. Cuando un proceso P(j) quiere enviarle un valor asu Q(j) lo envía directamente al multiplexor, el cual enviará dicho valor junto con el índice(j) <strong>de</strong>l proceso emisor al proceso <strong>de</strong>multiplexor. El proceso <strong>de</strong>multiplexor, enviará el valortransmitido al proceso Q(j) correspondiente, <strong>de</strong> acuerdo con el valor <strong>de</strong> índice recibido.Cuando todos los procesos P terminen, el multiplexor, el <strong>de</strong>multiplexor y los procesos Qterminarán.a) Implementar este sistema en MPI.b) Modificar el sistema implementado para que cada proceso P(j) reciba una señal <strong>de</strong>confirmación cuando su proceso Q(j) reciba el valor enviado.


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 1337. En un sistema distribuido, 6 procesos clientes necesitan sincronizarse <strong>de</strong> formaespecífica para realizar cierta tarea, <strong>de</strong> forma que dicha tarea sólo podrá ser realizadacuando tres procesos estén preparados para realizarla. Para ello, envían peticiones a unproceso controlador <strong>de</strong>l recurso y esperan respuesta para po<strong>de</strong>r realizar la tareaespecífica.El proceso controlador se encarga <strong>de</strong> asegurar la sincronización a<strong>de</strong>cuada. Para ello,recibe y cuenta las peticiones que le llegan <strong>de</strong> los procesos, las dos primeras no sonrespondidas y producen la suspensión <strong>de</strong>l proceso que envía la petición (<strong>de</strong>bido a que sebloquea esperando respuesta) pero la tercera petición produce el <strong>de</strong>sbloqueo <strong>de</strong> los tresprocesos pendientes <strong>de</strong> respuesta. A continuación, una vez <strong>de</strong>sbloqueados los tresprocesos que han pedido (al recibir respuesta), inicializa la cuenta y proce<strong>de</strong> cíclicamente<strong>de</strong> la misma forma sobre otras peticiones.El código <strong>de</strong> los procesos clientes es el siguiente, asumiendo que se usan operacionesbloqueantes no buferizadas.Cliente(i) (i=0, ... , 5)While (true){ send (&peticion,Controlador);receive (&permiso, Controlador);Realiza_tarea_grupal ( ); }Escribir en pseudocódigo, <strong>de</strong>ntro <strong>de</strong>l espacio reservado abajo, el código <strong>de</strong>l procesocontrolador, utilizando una or<strong>de</strong>n <strong>de</strong> espera selectiva que permita implementar lasincronización requerida entre los procesos.While (true){...Controlador}


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 1438. En un sistema distribuido, 3 procesos productores producen continuamente valoresenteros y los envían a un proceso buffer que los almacena temporalmente en un arraylocal <strong>de</strong> 4 celdas enteras para ir enviándoselos a un proceso consumidor. A su vez, elproceso buffer realiza lo siguiente, sirviendo <strong>de</strong> forma equitativa al resto <strong>de</strong> procesos:a) Envía enteros al proceso consumidor siempre que su array local tenga al menos doselementos disponibles.b) Acepta envíos <strong>de</strong> los productores mientras el array no esté lleno, pero no acepta quecualquier productor pueda escribir dos veces consecutivas en el búfer.El código <strong>de</strong> los procesos productor y consumidor es el siguiente, asumiendo que se usanoperaciones bloqueantes no buferizadas.Prod_i (i=0, 1, 2){While (true){Produce (&dato)send(&dato,1,Buffer);}}Consumidor{While (true){receive(&dato,1,Buffer)Consume (dato);}}Escribir en pseudocódigo el código <strong>de</strong>l proceso Buffer, utilizando una or<strong>de</strong>n <strong>de</strong> esperaselectiva que permita implementar la sincronización requerida entre los procesos.Buffer


Programación Concurrente. I.T. <strong>Sistemas</strong> y Gestión. Relación <strong>de</strong> Problemas 1539. Suponer un proceso productor y 3 procesos consumidores que comparten un bufferacotado <strong>de</strong> tamaño B. Cada elemento <strong>de</strong>positado por el proceso productor <strong>de</strong>be serretirado por todos los 3 procesos consumidores para ser eliminado <strong>de</strong>l buffer. Cadaconsumidor retirará los datos <strong>de</strong>l buffer en el mismo or<strong>de</strong>n en el que son <strong>de</strong>positados,aunque los diferentes consumidores pue<strong>de</strong>n ir retirando los elementos a ritmo diferenteunos <strong>de</strong> otros. Por ejemplo, mientras un consumidor ha retirado los elementos 1, 2 y 3,otro consumidor pue<strong>de</strong> haber retirado solamente el elemento 1. De esta forma, elconsumidor más rápido podría retirar hasta B elementos más que el consumidor máslento.Escribir el pseudocódigo <strong>de</strong> un proceso que implemente el buffer <strong>de</strong> acuerdo con elesquema <strong>de</strong> interacción <strong>de</strong>scrito usando una construcción <strong>de</strong> espera selectiva, así comoel pseudocódigo <strong>de</strong>l proceso productor y <strong>de</strong> los procesos consumidores . Comenzari<strong>de</strong>ntificando qué información es necesario representar, para <strong>de</strong>spués resolver lascuestiones <strong>de</strong> sincronización. Una posible implementación <strong>de</strong>l bufffer mantendría, paracada proceso consumidor, el puntero <strong>de</strong> salida y el número <strong>de</strong> elementos que quedanen el buffer por consumir (ver figura).40. Una tribu <strong>de</strong> 3 salvajes comparte una olla en la que caben M misioneros. Cuando algúnsalvaje quiere comer, se sirve directamente <strong>de</strong> la olla, a no ser que ésta esté vacía. Si la ollaestá vacía, el salvaje <strong>de</strong>spertará al cocinero y esperará a que éste haya rellenado la olla conotros M misioneros.Proceso salvaje[i], i=0,1,2 Proceso cocinerowhile(true) While(true)Servirse_1_misionero; Dormir;Comer; Rellenar_olla;Implementar los procesos salvajes y cocinero usando paso <strong>de</strong> mensajes, usando un procesoolla que incluye una construcción <strong>de</strong> espera selectiva que sirve peticiones <strong>de</strong> los salvajes y elcocinero para mantener la sincronización requerida, teniendo en cuenta que:• la solución no <strong>de</strong>be producir interbloqueo,• los salvajes podrán comer siempre que haya comida en la olla,• solamente se <strong>de</strong>spertará al cocinero cuando la olla esté vacía.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!