Documente Academic
Documente Profesional
Documente Cultură
Daniel Morillo
Jorge Boscn
Gregory Carrasco
Semforos
Conceptos
Operaciones
Bsicas
Inicializador
Operaciones
Bsicas
Wait, Down o Espera
Down (semaforo){
if (semaforo > 0)
semaforo=semaforo -1;
else
bloquear_el_proceso();
}
Signal, Up o Seal
Up (semaforo){
if hay_proceso_bloqueado
despertar_el_proceso();
else
semforo = semforo + 1;
}
Semforos
Semforos
Ejemplos
Cena de los Filsofos
Variables:
Status [1..N] - P (pensando), H (hambriento)
C(comiendo)
Semaforos:
Deadlock
Semforos
Ejemplos
Cena de los Filsofos
Turnos Cclicos
Semforos
Ejemplos
Cena de los Filsofos
Varios Turnos
Filsofos Comensales:
Filosofos(Integer i){
Pensar();
Tomar_Tenedores(i);
Comer();
Deja_Tenedores(i);
Dormir();
}
Dejar_Tenedores(Integer i){
Down(Exc_Mut);
Status[i]=P;
test(Der(i));
test(Izq(i));
Up(Exc_Mut);
}
Tomar_Tenedores(Integer i){
Down(Exc_Mut);
Status[i]=H;
Test=H;
Up(Exc_Mut);
Down(Sema[i]);
}
Test(Integer i){
If(status[izq[i]]<>C and
status[Der(i)]<>C and
Status[i]==H){
Status[i]=C;
Up(Sem[i]);
}
}
Productor y Consumidor
Program Productor_y_consumidor;
var critica,vacios,llenos:Semaforo;
Procedure Productor;
begin
while ejecucion do
begin
obtener_dato;
P(Vacios);
P(Critica);
Introducir_dato_buffer;
V(Critica);
V(Llenos);
end
end;
Procedure Consumidor;
begin
while ejecucion do
begin
P(Llenos);
P(Critica);
Tomar_dato_buffer;
V(Critica);
V(Vacios);
Utilizar_Dato
end
end;
Productor y Consumidor
BEGIN (*principal*)
IniciaSemaforo (critica, 1);
IniciaSemaforo (vacios, n);
IniciaSemaforo (llenos, 0);
COBEGIN
Productor;
Consumidor;
COEND;
END. (*PRODUCTOR_Y_CONSUMIDOR*)
Barbero Dormiln
Program Barbero_Dormilon;
var barbero,cliente,critica:semaforo
Esperando:Integer
Ejecucion:Boolean;
Procedure Barbero;
begin
while ejecucion do
begin
P(clientes);
P(critica);
Esperando=Esperando-1;
V(Barberos);
V(critica);
Cortar_el_pelo;
end
end;
procedure cliente;
begin
P(critica);
If esperando<Cantidad_Sillas;
then begin
Esperando:=Esperando+1;
V(clientes);
V(critica);
P(barbero);
Obtener_corte_de_pelo;
end
else V(critica);
end;
Barbero Dormiln
BEGIN (*principal*)
IniciaSemaforo (clientes,0);
IniciaSemaforo (barbero,0);
IniciaSemaforo (critica,1);
COBEGIN
Barbero;
Clientes;
COEND
END.
Problema
Solucin
Tanto Cenicienta como el Prncipe se pueden asociar con dos procesos de igual
prioridad que hacen peticin de un conjunto de recursos (objetos de exclusin
mutua) que representan el perro, la perrera, el pjaro y su jaula. Las peticiones que
se efectan por carta, son totalmente sincronas, por lo cual no hay forma de
determinar la prioridad de la peticin segn el orden de llegada. Como ambos
procesos piden primero al perro (desean de forma desesperada a Woofer)
Al efectuar ambos la peticin del perro como primera peticin, dicha solicitud ser
cancelada al da siguiente como se acord en un principio. En caso de que se
asigne el perro a cualquiera de los dos entes (procesos), existe la posibilidad de
que el otro proceso se adjudique la casa del mismo. Esta transaccin se anulara
tambin, y se comenzara desde cero puesto que se acord que no ser valida
ninguna particin donde algn animal quede sin su casa. Al reiniciarse el algoritmo,
si no se usa un elemento aleatorio, existe el riesgo de interbloqueo, y por ende de
inanicin.
Una posible solucin es que las peticiones no sean sncronas, o que exista un
manejo de las prioridades de los procesos por parte del abogado (Sistema
Operativo) para la asignacin de los recursos.
GRACIAS POR
SU ATENCIN!