Ejercicios Pc

15

Click here to load reader

description

Documento

Transcript of Ejercicios Pc

  • Programacin Concurrente. 3 Ingeniera Tcnica de Sistemas y Gestin.

    Dpto. Lenguajes y Sistemas Informticos. ETSI Informtica

    Relacin de problemasTema 1. Introduccin.

    1. Considerar el siguiente fragmento de 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 una vez y que seqA y seqB no son variables compartidas. Los dos procesos pueden ejecutarse a cualquier velocidad. Cules son los posibles valores resultantes para x?. Suponer que x debe ser cargada en un registro para incrementarse.

    2. Cmo se podra hacer la copia del fichero "f" en otro "g", de forma concurrente, utilizando la instruccin concurrente COBEGIN-COEND?.

    3. Construir, utilizando las instrucciones concurrentes COBEGIN-COEND y fork-join, programas concurrentes que se correspondan con los grafos de precedencia que se muestran a continuacin:

    a) b) c)

    4. Dado el siguiente fragmento de programa concurrente, obtener su grafo de precedencia asociado:

    P0; COBEGIN

    P1;P2;COBEGIN

    P3;P4;P5;P6;COENDP7;

    COENDP8;

    P0

    P1 P2

    P3

    P4 P5

    P6

    P0

    P2

    P3P5

    P6

    P0

    P1 P2

    P3

    P4 P5

    P6

    P1

    P4

  • 5. Suponer un sistema de tiempo real que dispone de un captador de impulsos conectado a un contador de energa elctrica. La funcin del sistema consiste en contar el nmero de impulsos producidos en 1 hora (cada Kwh consumido se cuenta como un impulso) e imprimir este nmero en un dispositivo de salida. Para ello se ha de escribir un programa concurrente con 2 procesos: un proceso acumulador (lleva la cuenta de los impulsos recibidos) y un proceso escritor (escribe en la impresora). En la variable comn a los 2 procesos "n" se lleva la cuenta de los impulsos. Suponiendo que el sistema se encuentra en un estado correspondiente al valor de la variable n=N y en estas condiciones se presentan simultneamente un nuevo impulso y el final del periodo de 1 hora, obtener las posibles secuencias de ejecucin de los procesos y cules de ellas son correctas.

    6. La inhibicin de las interrupciones no funciona correctamente cuando hay secciones crticas anidadas. Escribir 2 rutinas: ProtocoloEntrada (conecta las interrupciones) y ProtocoloSalida (las desconecta) para resolver el problema.

    7. En vez de la instruccin TestAndSet, algunos ordenadores proveen de una instruccin atmica que incrementa en 1 el valor de Lock:

    FUNCTION {ATOMICA} TestAndInc(VAR Lock:INTEGER):INTEGER; BEGIN TestAndInc:=Lock; Lock:=Lock+1END;

    Escribir protocolos (uno de entrada y otro de salida) para una seccin crtica utilizando dicha instruccin.

    8. Suponer que el siguiente algoritmo (insercin directa):PROCEDURE sort(inferior,superior:INTEGER);VAR i,j: INTEGER;BEGIN

    FOR 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 de la forma siguiente:

    COBEGIN sort(1,n);sort(n+1,2n) COEND;merge(1,n+1,2n);

    a) Si el tiempo de ejecucin secuencial del algoritmo es t(n)=n(n-1)/2 ( n2/2); Cul sera el tiempo de ejecucin del programa paralelo si la mezcla lleva en realizarse n operaciones?

    b) Comprubese con una tabla que el nmero de operaciones del algoritmo paralelo es significativamente menor.

    c) Escribir un procedimiento de 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 procesos concurrentes. (Nota: suponer que los elementos de las matrices se pueden leer simultneamente).

    10. Con el grafo de sincronizacin de la figura, escribir 2 protocolos:

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 2

  • EsperarPor (A:actividad) {espera que acabe la actividad A}Acabar (A:actividad) {hace constar, actividad A acabada}

    A B C

    D E F

    G H I

    que permitan la sincronizacin perfecta de las actividades del grafo. Prever que el grafo de actividades puede ser ejecutado ms de una vez.

    11. Qu significa un ciclo en un grafo de sincronizacin?Tema 2. Exclusin Mutua.

    12. Qu diferencia fundamental existe entre un bucle de espera activa y una variable interruptor que da turnos para la sincronizacin de los procesos?

    13. Utiliza espera ocupada el Algoritmo de Dekker, si el segundo proceso est en su seccin, Turno= 1 y el proceso 1 est intentando entrar en su seccin?

    14. Demostrar que el A. de Dekker hace posible que un proceso espere indefinidamente ("inanicin") a entrar en su seccin Crtica, con la suposicin de que siempre que un proceso entra en la seccin Crtica eventualmente la abandonar.

    15. Generalizar el A. de Dekker para 3 procesos.

    16. Podra pensarse que una posible solucin al problema de la exclusin mutua, Sera el siguiente algoritmo que no necesita compartir una variable "Turno" entre los 2 procesos? a) Se satisface la exclusin mutua?b) Se satisfacen las propiedades de vivacidad?

    Compararlo con el Algoritmo de Dekker. Imaginar escenarios que demuestren las contestaciones.

    Proceso i ci=0; while cj=0 do begin ci:=1; while cj=0 do;ci=0; end; (*Seccion Critica*) ci:=1;

    17. No se podra construir una solucin ms simple al problema de la exclusin mutua que el Algoritmo de Dekker utilizando la instruccin atmica TestAndSet(l)? Cul Sera dicha solucin?.

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 3

  • 18. Qu ocurrira si el A. de Dekker se hubiera programado as?Proceso Pi; BEGIN REPEAT Turno:=i; WHILE Turnoi DO ; (*Seccion Critica*) Turno:=j; FOREVER END;

    19. Al siguiente algoritmo se le conoce como solucin de Hyman al problema de la exclusin mutua. Es correcta dicha solucin?

    Proceso i (* inicialmente: c1,c2

  • procesos. Discutir la correccin de esta solucin: si es correcta, entonces probarlo. Si no fuese correcta, escribir escenarios que demuestren que la solucin es incorrecta.

    PROGRAM intento; (Inicialmente c1,c2

  • b) Qu ocurrira si la instruccin primitiva EX fuese reemplazada por las 3 asignaciones anteriores?

    PROGRAM Intercambio; | BEGINVAR c:INTEGER; | c:=1;PROCEDURE P1; PROCEDURE P2; | COBEGIN VAR l:INTEGER; VAR l:INTEGER; | P1;P2 BEGIN BEGIN | COEND l:=0; l:=0; | END. REPEAT REPEAT REM1; REM2; REPEAT REPEAT EX(c,l); EX(c,l); UNTIL l=1; UNTIL l=1; CRIT1; CRIT2; EX(c,l); EX(c,l); FOREVER; FOREVER; END; END; END;

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 6

  • 24. Considerar el siguiente algoritmo de exclusin mutua para n procesos (algoritmo de Knuth):

    Proceso(i) c: ARRAY[0..n] OF (pasivo, solicitando, enS_C);c:= pasivo;Turno:= 0;. . .REPEAT c[i]:= solicitando; j:= Turno; WHILE ji DO IF c[j]pasivo THEN j:=Turno ELSE 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 de la instruccin (7), suponiendo que el turno lo tiene inicialmente el proceso P(0).

    25. Demostrar que en la generalizacin del algoritmo de Peterson para "n" procesos :REPEAT FOR j:= 1 TO n-1 DO BEGIN q[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 de estas dos condiciones:a) precede a todos los demsb) no estaba solo en la etapa que ha dejado

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 7

  • Tema 3. Monitores.

    26. Aunque un monitor garantiza la exclusin mtua, los procedimientos tienen que ser re-entrantes. Explicar porqu.

    27. Demostrar que incluso si la implementacin del semforo es FIFO, la simulacin del monitor con semforos no lo es.

    28. Se consideran dos recursos denominados r1 y r2. Del recurso r1 existen N1 ejemplares y del recurso r2 existen N2 ejemplares. Escribir un monitor que gestione la asignacin de los recursos a los procesos de usuario, suponiendo que cada proceso puede pedir:

    un ejemplar del recurso r1 un ejemplar del recurso r2 un ejemplar del recurso r1 y otro del recurso r2

    La solucin deber satisfacer estas dos condiciones: Un recurso no ser asignado a un proceso que demande un ejemplar de r1 o un

    ejemplar de r2 hasta que al menos un ejemplar de dicho recurso quede libre Se dar prioridad a los procesos que demanden un ejemplar de ambos recursos

    29. Escribir una solucin al problema de "lectores-escritores" con monitores:a) Con prioridad a los lectores.b) Con prioridad a los escritores: c) Con prioridades iguales

    30. Coches que vienen del norte y del sur pretenden cruzar un puente sobre un ro. Slo existe un carril sobre dicho puente. Por lo tanto, en un momento dado, slo puede ser cruzado por uno o ms coches en la misma direccin (pero no en direcciones opuestas).

    a) Completar el cdigo del siguiente monitor que resuelve el problema del acceso al puente suponiendo que llega un coche del norte (sur) y cruza el puente si no hay otro coche del sur (norte) cruzando el puente en ese momento.

    b) Mejorar el monitor anterior, de forma que la direccin del trafico a travs del puente cambie cada vez que lo hayan cruzado 10 coches en una direccin, mientras 1 ms coches estuviesen esperando cruzar el puente en direccin opuesta.

    MONITOR GestionaTrafico VAR ................PROCEDIMIENTO EntrarCocheDelNorte ...................PROCEDIMIENTO SalirCocheDelNorte ....................PROCEDIMIENTO EntrarCocheDelSur .....................

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 8

  • PROCEDIMIENTO SalirCocheDelSur Inicializacin .......................

    31. Una tribu de antropfagos comparte una olla en la que caben M misioneros. Cuando algn salvaje quiere comer, se sirve directamente de la olla, a no ser que sta est vaca. Si la olla est vaca, el salvaje despertar al cocinero y esperar a que ste haya rellenado la olla con otros M misioneros.

    Proceso salvaje Proceso cocinero Repetir Repetir Servirse_1_misionero; Dormir; Comer; Rellenar_olla; Siempre; Siempre;

    Implementar un monitor para la sincronizacin requerida, teniendo en cuenta que: la solucin no debe producir interbloqueo, los salvajes podrn comer siempre que haya comida en la olla, solamente se despertar al cocinero cuando la olla est vaca.

    32. Una cuenta de ahorros es compartida por varias personas (procesos). Cada persona puede depositar o retirar fondos de la cuenta. El saldo actual de la cuenta es la suma de todos los depsitos menos la suma de todos los reintegros. El saldo nunca puede ser negativo.a) Programar un monitor para resolver el problema, todo proceso puede retirar fondos

    mientras la cantidad solicitada c sea menor o igual que el saldo disponible en la cuenta en ese momento. Si un proceso intenta retirar una cantidad c mayor que el saldo, debe quedar bloqueado hasta que el saldo se incremente lo suficiente (como consecuencia de que otros procesos depositen fondos en la cuenta) para que se pueda atender la peticin. El monitor debe tener 2 procedimientos: depositar(c) y retirar(c). Suponer que los argumentos de las 2 operaciones son siempre positivos.

    b) Modificar la respuesta del apartado anterior, de tal forma que el reintegro de fondos a los clientes sea servido segn un orden FIFO. Por ejemplo, suponer que el saldo es 200 unidades y un cliente est esperando un reintegro de 300 unidades. Si llega otro cliente debe esperarse, incluso si quiere retirar 200 unidades. Suponer que existe una funcin denominada cantidad(cond) que devuelve el valor de la cantidad (parmetro c de los procedimientos retirar y depositar) que espera retirar el primer proceso que se bloque (tras ejecutar WAIT en la seal cond).

    33. Los procesos P1, P2,...,Pn comparten un nico recurso R, pero slo un proceso puede utilizarlo cada vez. Un proceso Pi puede comenzar a utilizar R si est libre; en caso contrario, el proceso debe esperar a que el recurso sea liberado por otro proceso. Si hay varios procesos esperando a que quede libre R, se conceder al proceso que tenga mayor prioridad. La regla de prioridad de los procesos es la siguiente: el proceso Pi tiene prioridad i (1

  • de tipo A se bloquea. Si un proceso de tipo B llama a la operacin de sincronizacin, y no hay (al menos) 1

    proceso del tipo A y 9 procesos del tipo B (aparte de l mismo) bloqueados en la operacin de sincronizacin, entonces el proceso de tipo B se bloquea.

    Si un proceso de tipo A llama a la operacin de sincronizacin y hay (al menos) 10 procesos bloqueados en dicha operacin, entonces el proceso de tipo A no se bloquea y adems debern desbloquearse exactamente 10 procesos de tipo B.

    Si un proceso de tipo B llama a la operacin de sincronizacin y hay (al menos) 1 proceso de tipo A y 9 procesos de tipo B bloqueados en dicha operacin, entonces el proceso de tipo B no se bloquea y adems debern desbloquearse exactamente 1 proceso del tipo A y 9 procesos del tipo B.

    No se requiere que los procesos se desbloqueen en orden FIFO.

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 10

  • Tema 4. Sistemas de Paso de Mensajes

    35. Considerar un conjunto de n procesos conectados en forma de anillo. Cada proceso tiene un valor local almacenado en su variable local mi_valor. Deseamos calcular la suma de los valores locales almacenados por los procesos de acuerdo con el algoritmo que se expone a continuacin. Los procesos realizan una serie de iteraciones para hacer circular sus valores locales por el anillo. En la primera iteracin, cada proceso enva su valor local al siguiente proceso del anillo, al mismo tiempo que recibe del proceso anterior el valor local de ste. A continuacin acumula la suma de su valor local y el recibido desde el proceso anterior. En las siguientes iteraciones, cada proceso enva al siguiente proceso siguiente el valor recibido en la anterior iteracin, al mismo tiempo que recibe del proceso anterior un nuevo valor. Despus acumula la suma. Tras un total de n-1 iteraciones, cada proceso conocer la suma de todos los valores locales de los procesos. Implementar este algoritmo en MPI.

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 11

    3

    2

    1

    0mi_valor=0suma = 0

    mi_valor=1suma = 1

    mi_valor=3suma = 3

    mi_valor=2suma = 2

    suma = 6 suma = 6

    suma = 6 suma = 6

    2

    1

    0

    3suma = 3 suma = 1

    suma = 5 suma = 3

    1

    0

    3

    2suma = 5 suma = 4

    suma = 6 suma = 3

    ITERACIN 1

    ITERACIN 2

    ITERACIN 2

    RESULTADO

  • 36. Sean dos conjuntos de 4 procesos cada uno: P(i:1..4) y Q(i:1..4). Deseamos que cada proceso P(j) envie una secuencia de valores enteros al proceso correspondiente Q(j). En lugar de realizar esta comunicacin directamente, la haremos a travs de un proceso multiplexor y un proceso demultiplexor. Cuando un proceso P(j) quiere enviarle un valor a su Q(j) lo enva directamente al multiplexor, el cual enviar dicho valor junto con el ndice (j) del proceso emisor al proceso demultiplexor. El proceso demultiplexor, enviar el valor transmitido al proceso Q(j) correspondiente, de acuerdo con el valor de ndice recibido. Cuando todos los procesos P terminen, el multiplexor, el demultiplexor y los procesos Q terminarn.a) Implementar este sistema en MPI.b) Modificar el sistema implementado para que cada proceso P(j) reciba una seal de

    confirmacin cuando su proceso Q(j) reciba el valor enviado.

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 12

  • 37. En un sistema distribuido, 6 procesos clientes necesitan sincronizarse de forma especfica para realizar cierta tarea, de forma que dicha tarea slo podr ser realizada cuando tres procesos estn preparados para realizarla. Para ello, envan peticiones a un proceso controlador del recurso y esperan respuesta para poder realizar la tarea especfica. El proceso controlador se encarga de asegurar la sincronizacin adecuada. Para ello, recibe y cuenta las peticiones que le llegan de los procesos, las dos primeras no son respondidas y producen la suspensin del proceso que enva la peticin (debido a que se bloquea esperando respuesta) pero la tercera peticin produce el desbloqueo de los tres procesos pendientes de respuesta. A continuacin, una vez desbloqueados los tres procesos que han pedido (al recibir respuesta), inicializa la cuenta y procede cclicamente de la misma forma sobre otras peticiones.El cdigo de los procesos clientes es el siguiente, asumiendo que se usan operaciones bloqueantes no buferizadas.

    Cliente(i) (i=0, ... , 5)While (true) { send (&peticion,Controlador); receive (&permiso, Controlador); Realiza_tarea_grupal ( ); }

    Escribir en pseudocdigo, dentro del espacio reservado abajo, el cdigo del proceso controlador, utilizando una orden de espera selectiva que permita implementar la sincronizacin requerida entre los procesos.

    ControladorWhile (true){...

    }

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 13

  • 38. En un sistema distribuido, 3 procesos productores producen continuamente valores enteros y los envan a un proceso buffer que los almacena temporalmente en un array local de 4 celdas enteras para ir envindoselos a un proceso consumidor. A su vez, el proceso buffer realiza lo siguiente, sirviendo de forma equitativa al resto de procesos:

    a) Enva enteros al proceso consumidor siempre que su array local tenga al menos dos elementos disponibles. b) Acepta envos de los productores mientras el array no est lleno, pero no acepta que cualquier productor pueda escribir dos veces consecutivas en el bfer.

    El cdigo de los procesos productor y consumidor es el siguiente, asumiendo que se usan operaciones bloqueantes no buferizadas.

    Prod_i (i=0, 1, 2) Consumidor{While (true){Produce (&dato)send (&dato,1,Buffer);}}

    {While (true){receive (&dato,1,Buffer)Consume (dato);}}

    Escribir en pseudocdigo el cdigo del proceso Buffer, utilizando una orden de espera selectiva que permita implementar la sincronizacin requerida entre los procesos.

    Buffer

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 14

  • 39. Suponer un proceso productor y 3 procesos consumidores que comparten un buffer acotado de tamao B. Cada elemento depositado por el proceso productor debe ser retirado por todos los 3 procesos consumidores para ser eliminado del buffer. Cada consumidor retirar los datos del buffer en el mismo orden en el que son depositados, aunque los diferentes consumidores pueden ir retirando los elementos a ritmo diferente unos de otros. Por ejemplo, mientras un consumidor ha retirado los elementos 1, 2 y 3, otro consumidor puede haber retirado solamente el elemento 1. De esta forma, el consumidor ms rpido podra retirar hasta B elementos ms que el consumidor ms lento.

    Escribir el pseudocdigo de un proceso que implemente el buffer de acuerdo con el esquema de interaccin descrito usando una construccin de espera selectiva, as como el pseudocdigo del proceso productor y de los procesos consumidores . Comenzar identificando qu informacin es necesario representar, para despus resolver las cuestiones de sincronizacin. Una posible implementacin del bufffer mantendra, para cada proceso consumidor, el puntero de salida y el nmero de elementos que quedan en el buffer por consumir (ver figura).

    40. Una tribu de 3 salvajes comparte una olla en la que caben M misioneros. Cuando algn salvaje quiere comer, se sirve directamente de la olla, a no ser que sta est vaca. Si la olla est vaca, el salvaje despertar al cocinero y esperar a que ste haya rellenado la olla con otros M misioneros.

    Proceso salvaje[i], i=0,1,2 Proceso cocinero while(true) While(true) Servirse_1_misionero; Dormir; Comer; Rellenar_olla;

    Implementar los procesos salvajes y cocinero usando paso de mensajes, usando un proceso olla que incluye una construccin de espera selectiva que sirve peticiones de los salvajes y el cocinero para mantener la sincronizacin requerida, teniendo en cuenta que:

    la solucin no debe producir interbloqueo, los salvajes podrn comer siempre que haya comida en la olla, solamente se despertar al cocinero cuando la olla est vaca.

    Programacin Concurrente. I.T. Sistemas y Gestin. Relacin de Problemas 15