Sunteți pe pagina 1din 16

Semforos

Daniel Morillo
Jorge Boscn
Gregory Carrasco

Semforos
Conceptos

Un semforo es una estructura diseada para sincronizar


dos o ms threads o procesos, de modo que su ejecucin
se realice de forma ordenada y sin conflictos entre ellos.
Un semforo nos sirve para poder permitir o restringir a los
procesos o hilos el acceso a algn recurso compartido.
Los semforos son una solucin, de tipo soporte al sistema
operativo para garantizar la exclusin mutua.

Operaciones
Bsicas
Inicializador

Los semforos pueden ser de 2 tipos: Binarios o Generales


(Contadores).
La operacin de inicializador definir si el semforo ser
binario o no, es decir, si se inicializa con 1, el semforo ser
binario ya que solo podr manejar un recurso compartido, en
caso de tener N recursos compartidos se inicializara con
N.
Si tenemos N procesos inicializamos un semforo para que
solo N procesos acceda a un recurso compartido.

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

Problemas Que Pueden Surgir Con Mala Sincronizacion:


DeadLock:
Dos o mas procesos estan esperando por una condicion que solo puede
ser causada por una hebra que tambien esta esperando.
Starvation o Espera Indefinida:
Un proceso en la lista de espera de un semaforo de la cual estan
entrando y saliendo continuamente hebras y listas de espera de semaforo.

Semforos
Ejemplos
Cena de los Filsofos

Los Filosofos Piensan


Los Filosofos Comen
Toman 2 tenedores
Los Filosofos Duermen

Variables:
Status [1..N] - P (pensando), H (hambriento)
C(comiendo)
Semaforos:

Exc_Mut -- Para Proteger a Status


Sem[1..N] -- Control De Filosofos

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

Cenicienta y el Prncipe se quieren divorciar. Para dividir sus propiedades,


han acordado el siguiente algoritmo. Cada maana uno de ellos debe
enviar una carta al abogado del otro para solicitar un elemento de su
propiedad. Puesto que una carta tarda un da en ser entregada, han
acordado que si ambos descubren que han solicitado el mismo artculo el
mismo da, al da siguiente enviarn una carta para cancelar la solicitud.
Entre sus propiedades estn su perro Woofer, su perrera, su canario Pioln
y la jaula del canario. Los animales aman sus casas, por lo cual han
acordado invalidar cualquier divisin de la propiedad que separe a un
animal de su casa, por lo que la divisin deber volver a iniciarse desde
cero. Tanto Cenicienta como el prncipe desean de forma desesperada a
Woofer. Ambos se van de vacaciones (separados) y cada uno de ellos
programa una computadora personal para manejar la negociacin. Al
regresar de sus vacaciones, las computadoras continan negociando. Por
qu? Es posible el bloqueo? Es posible la inanicin? Explique.

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!

S-ar putea să vă placă și