Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Semestre 8
Fascculo No. 5
Tabla de contenido
Problemas clsicos de procesos
El problema de la cena de los filsofos
El problema de lectores escritores
El problema del peluquero dormido
Seales y excepciones
Seales
Servicios POSIX WIN32
Resumen
Bibliografa recomendada
Prrafo nexo
Autoevaluacin formativa
Indicadores de logro
Explica los servicios bsicos que exporta posix y win32, para el manejo de
errores.
Una mejora de este cdigo que no est sujeta a bloqueo ni inanicin, consiste
en proteger las cinco instrucciones que siguen a la llamada think con un
semforo binario. Antes de comenzar a conseguir tenedores, un filsofo
ejecutara DOWN con mutex. Despus de dejar los tenedores en la mesa,
ejecutara UP con mutex. Desde un punto de vista terico, esta solucin es
adecuada. En la prctica, tiene un problema de rendimiento: solo un filsofo
puede estar comiendo en un instante dado. Si hay cinco tenedores disponibles,
deberamos estar en condiciones de permitir que dos filsofos comieran al
mismo tiempo.
Actividad 5.1
Para evitar esta situacin, el programa podra incluir una pequea modificacin,
cuando llega un lector y un escritor est esperando, el lector queda suspendido
detrs del escritor en lugar de ser admitido inmediatamente, As, un escritor
tiene que esperar hasta que terminen los lectores que estaban activos cuando
lleg, pero no a que terminen los lectores que llegaron despus de l. La
Actividad 5.1
Otro problema de IPC clsico ocurre en una peluquera. Esta peluquera tiene
un peluquero, una silla del peluquero y n sillas donde pueden sentarse los
clientes que esperan, si los hay. Si no hay clientes presentes, el peluquero se
sienta en la silla y se duerme, como se ilustra en la figura 5.2. Cuando llega un
cliente, tiene que despertar al peluquero dormido. Si llegan clientes adicionales
mientras el peluquero est cortndole el pelo a un cliente, se sientan (si hay
sillas vacas) o bien salen del establecimiento (si todas las sillas estn
ocupadas). El problema consiste en programar al peluquero y sus clientes sin
entrar en condiciones de competencia.
Una solucin utiliza tres semforos: customers, que cuenta a los clientes en
espera (excluyendo al que est siendo atendido que no est esperando),
barbers, el nmero de peluqueros que estn ociosos, esperando clientes (0 o
1), y mutex, que se usa para la exclusin mutua. Tambin necesitamos una
variable, waiting (esperando), que tambin cuenta los clientes que estn
esperando, y en esencia es una copia de customers. Necesitamos esta variable
porque no es posible leer el valor actual de un semforo. En esta solucin, un
cliente que entra en la peluquera debe contar el nmero de clientes que
esperan. Si este nmero es menor que el nmero de sillas, se queda; si no se
va.
# define CHAIRS 5
typedef int semaphore;
semaphore customer = 0;
semaphore barber = 0;
semaphore mutex = 1;
int wating = 0;
void customer(void)
{
down(mutex);
if ( waiting < CHAIRS)
{
waiting = waiting + 1;
up(customers);
up(mutex);
down(barbers);
get_haircut();
}
else
{
up(mutex);
}
}
procedimiento y de la peluquera.
Observacin
A diferencia de los ejemplos anteriores, no hay un ciclo para el cliente porque
cada uno slo recibe un corte de pelo. El peluquero s opera un ciclo, tratando
de atender al siguiente cliente. Si hay uno presente, el peluquero realiza otro
corte de pelo, si no, se duerme.
Actividad 5.3
Seales y excepciones
Seales
El proceso que recibe una seal se comporta como muestra la figura 5.3, de la
siguiente forma:
Observacin
El origen de una seal puede ser un proceso o el sistema operativo.
Actividad 5.2
Excepciones
Try
Bloque donde puede producirse una excepcion
Except
Bloque se ejecutar en momento de ejecutarse una excepcin en el bloque
anterior.
End;
Actividad 5.4
Resumen
Las seales y las excepciones son un complemento para que las aplicaciones
realizadas por los programadores tengan un tratamiento adecuado en el
momento de ocurrir.
Bibliografa recomendada
M.J. Bach. The Desing of the Unix Operating System. Prentice-Hall, 1986.
Nexo
Autoevaluacin formativa