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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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!