Sei sulla pagina 1di 8

Ingeniería Informática

Sistemas de Operación
Prof. Mayelin Coba UNIDAD III
Problemas de Comunicación entre procesos

El problema de los filósofos comelones

Cinco filósofos están sentados alrededor de una mesa circular. Cada


filósofo tiene un plato de espagueti. El espagueti es tan resbaloso, que un
filósofo necesita dos tenedores para comerlo. Entre cada par de platos hay
un tenedor.
La vida de un filósofo consiste en periodos alternos de comer y pensar
(esto es algo así como una abstracción, incluso para los filósofos, pero las
otras actividades son irrelevantes aquí). Cuando un filósofo tiene hambre,
trata de adquirir sus tenedores izquierdo y derecho, uno a la vez, en
cualquier orden. Si tiene éxito al adquirir dos tenedores, come por un
momento, después deja los tenedores y continúa pensando.
La pregunta clave es: ¿puede usted escribir un programa para cada
filósofo, que haga lo que se supone debe hacer y nunca se trabe? (Hemos
recalcado que el requerimiento de los dos tenedores es algo artificial; tal vez
deberíamos cambiar de comida italiana a comida china y sustituir el
espagueti por arroz y los tenedores por palillos chinos).
La figura 1 muestra la solución obvia. El procedimiento tomar_tenedor
espera hasta que el tenedor específico esté disponible y luego lo toma. Por
desgracia, la solución obvia está mal. Suponga que los cinco filósofos toman
sus tenedores izquierdos al mismo tiempo. Ninguno podrá tomar sus
tenedores derechos y habrá un bloqueo irreversible.

1
Ingeniería Informática
Sistemas de Operación
Prof. Mayelin Coba UNIDAD III
Problemas de Comunicación entre procesos

Figura 1. Solución incorrecta para la cena de filósofos

Podríamos modificar el programa de manera que después de tomar el


tenedor izquierdo, el programa compruebe para ver si el tenedor derecho
está disponible. Si no lo está, el filósofo regresa el tenedor izquierdo, espera
cierto tiempo y después repite todo el proceso. Esta proposición falla
también, aunque por una razón distinta. Con un poco de mala suerte, todos
los filósofos podrían iniciar el algoritmo en forma simultánea, tomarían sus
tenedores izquierdos, verían que sus tenedores derechos no están
disponibles, regresarían sus tenedores izquierdos, esperarían, volverían a
tomar sus tenedores izquierdos al mismo tiempo y así en lo sucesivo,
eternamente. Una situación como ésta, en la que todos los programas
continúan ejecutándose en forma indefinida pero no progresan se conoce
como inanición.
Ahora podríamos pensar que si los filósofos sólo esperan por un
tiempo aleatorio en vez de esperar durante el mismo tiempo al no poder
adquirir el tenedor derecho, la probabilidad de que todo continúe bloqueado
durante incluso una hora es muy pequeña. Esta observación es verdad y en
casi todas las aplicaciones intentar de nuevo en un tiempo posterior no
representa un problema. Por ejemplo, en la popular red de área local
Ethernet, si dos computadoras envían un paquete al mismo tiempo, cada una

2
Ingeniería Informática
Sistemas de Operación
Prof. Mayelin Coba UNIDAD III
Problemas de Comunicación entre procesos
espera durante un tiempo aleatorio e intenta de nuevo; en la práctica esta
solución funciona bien. Sin embargo, en algunas cuantas aplicaciones sería
preferible una solución que funcione siempre y que no pueda fallar debido a
una serie improbable de números aleatorios. Piense acerca del control de la
seguridad en una planta de energía nuclear.
Una mejora, que no tiene interbloqueo ni inanición es proteger las
cinco instrucciones que siguen de la llamada a pensar mediante un semáforo
binario. Antes de empezar a adquirir tenedores, un filósofo realizaría una
operación down en mutex. Después de regresar los tenedores, realizaría una
operación up en mutex. Desde un punto de vista teórico, esta solución es
adecuada. Desde un punto de vista práctico, tiene un error de rendimiento:
sólo puede haber un filósofo comiendo en cualquier instante. Con cinco
tenedores disponibles, deberíamos poder permitir que dos filósofos coman al
mismo tiempo.
La solución que se presenta en la figura 2 está libre de interbloqueos y
permite el máximo paralelismo para un número arbitrario de filósofos. Utiliza
un arreglo llamado estado para llevar el registro de si un filósofo está
comiendo, pensando o hambriento (tratando de adquirir tenedores). Un
filósofo sólo se puede mover al estado de comer si ningún vecino está
comiendo.
Los i vecinos del filósofo se definen mediante las macros IZQ y DER.
En otras palabras, si i es 2, IZQ es 1 y DER es 3. El programa utiliza un
arreglo de semáforos, uno por cada filósofo, de manera que los filósofos
hambrientos puedan bloquearse si los tenedores que necesitan están
ocupados. Observe que cada proceso ejecuta el procedimiento filosofo como
su código principal, pero los demás procedimientos (tomar_tenedores,
poner_tenedores y probar) son ordinarios y no procesos separados.

3
Ingeniería Informática
Sistemas de Operación
Prof. Mayelin Coba UNIDAD III
Problemas de Comunicación entre procesos

Figura 2. Una solución al problema de los filósofos comelones

4
Ingeniería Informática
Sistemas de Operación
Prof. Mayelin Coba UNIDAD III
Problemas de Comunicación entre procesos
El problema de los lectores y escritores

El problema de los filósofos comelones es útil para modelar procesos


que compiten por el acceso exclusivo a un número limitado de recursos,
como los dispositivos de E/S. Otro problema famoso es el de los lectores y
escritores (Courtois y colaboradores, 1971), que modela el acceso a una
base de datos. Por ejemplo, imagine un sistema de reservación de
aerolíneas, con muchos procesos en competencia que desean leer y escribir
en él.
Es aceptable tener varios procesos que lean la base de datos al
mismo tiempo, pero si un proceso está actualizando (escribiendo) la base de
datos, ningún otro proceso puede tener acceso a la base de datos, ni
siquiera los lectores. La pregunta es, ¿cómo se programan los lectores y
escritores? Una solución se muestra en la figura 3.
En esta solución, el primer lector en obtener acceso a la base de datos
realiza una operación down en el semáforo bd. Los siguientes lectores
simplemente incrementan un contador llamado rc. A medida que los lectores
van saliendo, decrementan el contador y el último realiza una operación up
en el semáforo, para permitir que un escritor bloqueado (si lo hay) entre.
La solución que se presenta aquí contiene en forma implícita una
decisión sutil que vale la pena observar. Suponga que mientras un lector
utiliza la base de datos, llega otro lector. Como no es un problema tener dos
lectores al mismo tiempo, el segundo lector es admitido. También se pueden
admitir más lectores, si es que llegan.
Ahora suponga que aparece un escritor. Tal vez éste no sea admitido
a la base de datos, ya que los escritores deben tener acceso exclusivo y por
ende, el escritor se suspende. Más adelante aparecen lectores adicionales.
Mientras que haya un lector activo, se admitirán los siguientes lectores.
Como consecuencia de esta estrategia, mientras que haya un suministro
continuo de lectores, todos entrarán tan pronto lleguen. El escritor estará

5
Ingeniería Informática
Sistemas de Operación
Prof. Mayelin Coba UNIDAD III
Problemas de Comunicación entre procesos
suspendido hasta que no haya un lector presente. Si llega un nuevo lector,
por decir cada 2 segundos y cada lector requiere 5 segundos para hacer su
trabajo, el escritor nunca entrará.

Figura 3. Una solución al problema de los lectores y escritores.

6
Ingeniería Informática
Sistemas de Operación
Prof. Mayelin Coba UNIDAD III
Problemas de Comunicación entre procesos

El problema del barbero dormilón

El establecimiento tiene un barbero, una silla de barbero y N sillas de


espera para los clientes. Si no hay clientes presentes, el barbero se sienta en
su silla y se duerme. Cuando llega un cliente, debe despertar al barbero. Si
llegan más clientes mientas el barbero está atendiendo a un cliente, se
sientan (Si hay sillas vacías), o bien, salen del establecimiento (si todas las
sillas están ocupadas).
El problema consiste en programar al barbero y a los clientes sin caer
en condiciones de carrera. La solución planteada utiliza tres semáforos:
clientes, que cuenta los clientes que están esperando (el cliente que está
sentado en la silla no está esperando); barberos, el número de barberos
(0, 1) que están inactivos esperando clientes y mutex, que controla la
exclusión mutua.
También necesitamos una variable, espera, que cuenta los clientes en
espera y básicamente es una copia de clientes. La solución plantea que un
cliente que entra a la peluquería debe contar el número de clientes que
esperan. Si es menor que el número de sillas, se queda, de lo contrario, se
va. En la figura 4 se muestra la solución, cuando el barbero entra a su
trabajo, ejecuta barbero, que lo obliga a bloquearse con el semáforo clientes
porque al principio este es cero. Entonces el barbero se duerme (desactiva),
y permanece así hasta que aparece el primer cliente.
Cuando un cliente llega, ejecuta cliente, que inicia por obtener mutex
para entrar a la región crítica. Si otro cliente entra poco después, no podrá
hacer nada hasta que el primero haya liberado mutex. Entonces el cliente
verificara si el número de clientes en espera es menor que el número de
sillas. De lo contrario, libera mutex y saldrá sin que le corten el pelo.
Si hay una silla desocupada, el cliente incrementa la variable entera espera y
luego ejecuta up con el semáforo clientes, lo cual activa el barbero. En este

7
Ingeniería Informática
Sistemas de Operación
Prof. Mayelin Coba UNIDAD III
Problemas de Comunicación entre procesos
punto tanto el cliente como el barbero están activos. Cuando el cliente libera
mutex, el barbero lo toma, efectúa sus labores y realiza el corte de pelo. Una
vez terminado el corte el cliente sale del procedimiento y deja la peluquería.
El barbero eta en un ciclo y trata de atender al siguiente cliente. Si hay uno
presente, realiza otro corte, de lo contrario se desactiva. Mientras el cliente
no está en un ciclo porque cada cliente recibe solo un corte.

Figura 4. Una solución al problema del barbero dormilón.

Potrebbero piacerti anche