Sie sind auf Seite 1von 5

Programacin Concurrente Curso 02-03 Relacin de ejercicios

SEMFOROS
SEM.1 Supongamos que queremos controlar el acceso a un parking con el siguiente comportamiento: cuando un coche llega al parking ste espera espera a que la barrera de acceso al parking se levante. La barrera slo se levantar cuando el parking no est lleno, el semforo que est detrs est verde y la mquina de tickets ha expendido un ticket. La barrera baja cuando detecta que el coche ha pasado. La mquina de tickets expende un ticket cuando detecta que se ha pulsado el botn de la mquina. Cuando la barrera est levantada entonces el coche pasa. Despus de pasar el coche, la barrera se baja. Pasado un tiempo desde que el coche aparc, ste sale del parking. Se pide resolver este problema utilizando semforos. Se consideran 4 procesos: coche, maquinaTickets, barrera y semaforo. Como ejemplo se proporciona el pseudocdigo del proceso coche:
proceso Coche; (* protocolo de entrada, uso de semforos *) (* coche estaciona *) sleep (1000); (* el coche sale *) (* protocolo de salida, uso de semforos *) finProcesoCoche

Notas: - No olvidar la inicializacin de semforos. - El proceso semforo slo puede estar rojo o verde. Cada cierto tiempo, por ejemplo 10 segundos, cambia de estado por s mismo. - Los procesos slo utilizarn las primitivas de semforos, la instruccin sleep ( ) y comentarios. - Suponed que estn implementados los procedimientos: bajarBarrera, subirBarrera y expenderTicket. - Un coche slo podr pulsar el botn de la mquina cuando la barrera est bajada. - Capacidad inicial del parking: 10 coches. Crear 15 procesos de tipo coche.

TICKETS

SEM.2 Suponer que estamos en una discoteca y resulta que est estropeado el servicio de chicas y todos tienen que compartir el de chicos. Se pretende establecer un protocolo de entrada al servicio usando semforos en el que se cumplan las siguientes restricciones: - chicas slo puede haber una a la vez en el servicio. - chicos puede haber ms de uno, pero con un mximo de cinco.

los chicos tienen preferencia sobre las chicas. Esto quiere decir que si una chica est esperando y llega un chico ste puede pasar. Incluso si no puede entrar en el servicio porque hay ya 5 chicos pasar antes que la chica cuando salga algn chico.

SEM.3 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 para poder coger el suyo. proceso Salvaje repetir servirse_1_misionero; comer; siempre; proceso Cocinero repetir dormir; rellenar_olla; siempre;

Se pide implementar tanto el programa principal como ambos procesos en Pascal-FC usando semforos de tal forma que se respete la sincronizacin requerida y se tenga 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. SEM.4 En una fbrica de bicicletas hay 2 operarios y 1 montador. El primer operario construye ruedas, el segundo operario construye marcos de bicicleta y el montador se encarga de tomar 2 ruedas y 1 marco y de esta forma montar una bicicleta. La actuacin concurrente de estas 3 personas est sujeta a las siguientes restricciones: 1. El montador no podr coger ningn material, si dicho material no ha sido fabricado de antemano por el operario correspondiente. 2. El operario que fabrica marcos no tiene espacio ms que para almacenar 4 de estos objetos; deber esperar si en cualquier momento ha fabricado 4 marcos, sin que ninguno haya sido tomado por el montador. El nmero mximo de objetos que puede almacenar el operario que fabrica ruedas es de 10. Solucionar el problema usando semforos para sincronizar los 3 procesos. SEM. 5 Un conjunto de procesos tiene relaciones de precedencia si existen restricciones en el orden en el que pueden ejecutarse. Consideremos seis procesos. P1 y P2 deben ejecutarse ambos antes que P3; P3 se ejecuta antes que P4 y P5; y P6 se ejecuta despus de todos los dem s. Hacer un programa que usando sem foros, permita todas estas relaciones. Permitir que las ejecuciones de los procesos sean cclicas, esto es, que la primera ejecucin de P6 pueda ser concurrente con la segunda de P1 y P2. SEM.6 Supongamos que tenemos un rea de datos compartida por una serie de procesos. El rea de datos puede ser cualquier cosa: un archivo, una base de datos, etc. Hay algunos procesos que slo pueden leer datos (lectores) y otros que slo escriben datos (escritores). Se deben satisfacer las siguientes condiciones: - cualquier nmero de lectores puede leer el archivo simultneamente - slo puede escribir en el archivo un escritor en cada instante - si un escritor est accediendo al rea de datos, ningn lector puede leerlo. Solucionar el problema usando semforos. SEM. 7 Tenemos una peluquera con dos salas como la de la figura. En esta peluquera tenemos un barbero que afeita a sus clientes segn las siguientes normas:

Barbero: cuando termina con un cliente le muestra la salida. Luego comprueba la habitacin de espera. Si hay clientes, lleva uno a la sala de afeitar; si no, se duerme en la sala de afeitar. Cliente: entra en la sala de espera. Si hay otros clientes, espera con ellos; si no, abre la puerta de la sala de afeitar para ver si el barbero est ocupado. Si el barbero est ocupado, cierra la puerta y espera en la sala de espera; si no lo est, entra y despierta al barbero. Se pide: programa un proceso barbero y un proceso cliente que se comporten segn las normas descritas.

Sala de afeitar

Sala de espera
SEM.8 Cinco filsofos estn sentados alrededor de una mesa circular. Cada filsofo slo tiene 2 actividades: pensar y comer. Para comer necesita dos tenedores, el que est a su derecha y el que est a su izquierda. Slo cuando tiene los dos entonces podr comer. Consecuentemente: - dos filsofos vecinos nunca podrn estar comiendo al mismo tiempo. - slo 2 filsofos podrn estar comiendo al mismo tiempo. Proporcionar una solucin con semforos que permita este protocolo, evitando interbloqueos.

MONITORES
MON.1 Un nmero de procesos clientes hacen llamadas a un monitor usando el procedimiento bloquea (n), donde n es un entero entre 1 y 10. Todos los llamadores se bloquean hasta que otro proceso cliente hace una llamada al procedimiento desbloquea. Entonces los procesos bloqueados deben ser desbloqueados de uno en uno en el orden dictado por el parmetro n, es decir, primero los procesos donde n=1, luego donde n=2, etc. Cuando todos los procesos han sido desbloqueados, el proceso desbloqueador puede continuar. MON.2 Consideremos un sistema compuesto por tres procesos fumadores y un proceso agente. Cada fumador continuamente hace un cigarro y se lo fuma. Pero para poder fumarse un cigarro se necesitan tres ingredientes: papel, tabaco y cerillas. Uno de los fumadores tiene papel, el otro tabaco y el otro cerillas. El agente tiene una cantidad infinita de los tres ingredientes. El agente pone dos de los ingredientes en la mesa. El fumador que tiene el ingrediente que falta puede hacer un cigarro y fumrselo, indicando al agente cuando termine que se lo ha fumado. El agente entonces pone otros dos ingredientes y el ciclo se repite. Se pide construir un programa que sincronice convenientemente al agente y los fumadores. MON.3 Consideremos una estructura de productor/consumidor donde se tiene un buffer con una capacidad mxima de 16 enteros. El consumidor lee un entero cada vez mientras que el productor puede producir cualquier nmero de elementos en el rango 1..16 de una sola vez. Si no hay espacio suficiente ser bloqueado. MON.4

Escribe un monitor que implemente la instruccin hardware test-and-set. Hacer tambin: Sem.1, Sem.2, Sem.3, Sem.6 y Sem.8

CANALES
CAN.1 Escribir un programa en el que un nmero de procesos realizan operaciones de lectura y escritura sobre un array de enteros. El array es visible a todos los procesos, pero otro proceso u otros procesos deben regular el acceso al array de tal forma que son posibles lecturas concurrentes sobre las posiciones del array, pero la operacin de escritura sobre una posicin excluye otras operaciones de escritura o lectura. Nota: Un proceso lector ser de la forma: Permiso[i]!any (* leer del array *) Fin[i]!any CAN.2 Construir un programa que genere los n primeros nmeros aleatorios. La estructura de procesos ser la siguiente:

nmeros

filtro 1

filtro 2

...

filtro n

consumidor

salida

donde: nmeros es un proceso que genera una secuencia de nmeros infinitos y se los va pasando mediante un canal al filtro 1. filtro i: va recibiendo nmeros por el canal de la izquierda. El primero que le llega es primo y lo manda a la salida. Los siguientes nmeros los divide por el primer nmero que le lleg y si la divisin no es exacta entonces lo manda al canal de la derecha para que sea recogido por el siguiente filtro. Si la divisin es entera ignora el nmero. salida: simplemente imprime el nmero que le llega por algn canal. Ese nmero es primo. consumidor: simplemente muestra los nmeros que le llegan. Son candidatos a ser primos, pero no tienen por qu serlo. CAN.3 Supongamos que tenemos un cajero automtico con diversos clientes. Existirn clientes de dos tipos: los que slo tratan de sacar dinero y los que slo tratan de ingresar dinero tal y como muestra el pseudocdigo de abajo. El cajero slo dejar sacar dinero si la cantidad a reintegrar es menor que la cantidad de dinero de la que dispone el cajero (inicialmente 10.000 euros). Por simplicidad se supone que todos los clientes comparten la misma cuenta. La cantidad a reintegrar e ingresar por parte de los clientes es una cifra aleatoria entre 1 y 10.000 euros. Se pide implementar con canales los dos tipos de proceso cliente adems del proceso cajero. Habr 5 clientes de cada tipo. Proceso ClienteUno begin repeat ok:= puedoSacar (cantidad); if ok then writeln (xito) else writeln (fracaso); until OK end;

Proceso ClienteDos Hacer tambin Sem.6, Sem.8, Mon. y Can.2

begin ingresar (cantidad) end;

INVOCACIN REMOTA
INR.1 Consideremos una coleccin de n procesos. Cada uno de ellos tiene un nico identificador y un valor arbitrario en el rango de 1 a 5. Comunicndose con el resto de procesos, cada proceso es capaz de encontrar cuntos de los otros procesos tienen el mismo valor. Cuidado con los deadlock que se puedan producir. INR.2 Escribir un programa en el que hay un nmero de procesos cliente que interactan con un proceso cajero. Un cliente puede consultar su saldo as como sacar dinero. Sin embargo la cuenta del cliente nunca debe ser negativa. Considerad un saldo inicial para cada cliente de 50.000 ptas. INR.3 Modificar el ejercicio anterior de tal forma que ahora haya 3 cajeros disponibles que puedan trabajar simultneamente. Un cliente puede ir a cualquier cajero. Considerad que puede haber clientes que compartan una misma cuenta. Hacer tambin: Sem.1, Sem.3, Sem.4 Sem.6, Sem.8, Mon.

RECURSOS
REC.1 Dos procesos interactan mediante un buffer. Un proceso productor escribe 1, 2 o 3 enteros en el buffer. Si no hay sitio se bloquear. El proceso consumidor debe bloquearse a menos que haya 7 enteros disponibles en el buffer, entonces lee los 7 enteros de una vez. Escribir un programa que simule este comportamiento. Considerar un buffer de longitud mxima 16. REC.2 Consideremos un programa que contiene dos procesos y una bolsa. La bolsa contiene un conjunto arbitrario de bolas rojas y verdes. Un proceso saca una bola de la bolsa; si es verde la tira, pero si es roja la devuelve a la bolsa. El otro proceso saca 2 bolas a la vez; si ambas son verdes, devuelve una bola a la bolsa, si ambas son rojas, las tira y devuelve una bola verde a la bolsa y si las bolas son de ambos colores se devuelve a la bolsa la roja. Implementar este programa. Cul es el estado actual de la bolsa? Se poda predecir a priori? REC.3 Un mtodo para encontrar el mximo de un conjunto de enteros es mantener el conjunto en un recurso y tener un nmero de procesos que hacen llamadas al recurso. Cada vez que un proceso llama, extrae dos enteros y retorna el mayor. Programar este algoritmo usando 5 procesos trabajadores. Cuando se alcance el valor final se debe escribir el valor. REC.4 Consideremos un recurso que almacena un determinado nmero de elementos de cualquier tipo y que proporciona dos operaciones: pedir y devolver. Pedir recibe como parmetro el nmero de elementos que se le piden al recurso por parte del cliente y devolver recibe como parmetro el nmero de elementos devueltos por el cliente. Cuando algn cliente pida ms elementos de los que dispone el recurso, habr que bloquearlo. Se desbloquear cuando algn otro proceso cliente devuelva algn elemento.

Das könnte Ihnen auch gefallen