Sistemas Concurrentes:Sistemas Concurrentes:SemáforosSemáforos
I.T. Informática de SistemasCurso 2002-2003
SistemasConcurrentes
Bibliografía
• Principles of Concurrent and Distributed Programming M. Ben-Ari. Prentice Hall, 1990 Capítulo 4
• Sistemas Operativos A. Silberschatz, P. Galvin. Addison Wesley
Longman, 1999 Capítulo 6
SistemasConcurrentes
Semáforos
• Hasta ahora hemos trabajado con instrucciones de máquina
• Podemos solucionar problemas de concurrencia con ellas, como p.ej. la exclusión mutua, vista en el tema anterior
• Pero ahora usaremos instrucciones de mayor nivel, lo cual nos facilitará el trabajo en programación concurrente
• El semáforo es una de estas instrucciones
SistemasConcurrentes
Concepto de semáforo
• Una variable entera con dos operaciones atómicas:
• Wait(s). si s>0 s:=s-1; si no, suspende al proceso.
• Signal(s). si hay procesos suspendidos, despierta uno; si no, s:=s+1.
SistemasConcurrentes
Propiedades del semáforo
• Wait(s) y Signal(s) son atómicas• Todo semáforo debe tener un valor inicial
no negativo• La operación Signal(s) debe despertar un
proceso suspendido. La definición no especifica cuál de los procesos suspendidos se despierta
• A un semáforo que solo toma los valores 0 y 1 se le llama semáforo binario
SistemasConcurrentes
Invariantes del semáforo
• Todo semáforo, al margen de su implementación, debe cumplir los invariantes:
• S >= 0• S = Sinicial + #signals - #waits
#signals es la cantidad de signal ejecutados en S
#waits es la cantidad de waits completados en S
SistemasConcurrentes
Exclusión mutua con semáforos
task body P1 isbegin
loop SNC1;
Wait(S);SC1;Signal(S);
end loop;end P1;
S: Semaphore := 1
task body P2 isbegin
loop SNC2;
Wait(S);SC2;Signal(S);
end loop;end P2;
SistemasConcurrentes
Definiciones de semáforos
• Semáforo de conjunto bloqueado• Semáforo FIFO• Semáforo de espera activa• Semáforo fuertemente justo• Semáforo débilmente justo
SistemasConcurrentes
Definiciones basadas en implementación
• Semáforo de Conjunto bloqueado. El signal desbloquea a un proceso en espera (no sabemos cuál).
• Semáforo con FIFO. El signal siempre desbloquea al proceso más viejo.
• Espera activa. La operación wait es un bucle en el que se testea constantemente S:
loop if S>0 then S:=S-1; exit; end if;end loop;
SistemasConcurrentes
Definiciones basadas en propiedades
(p=lugar de la instrucción wait, p’=siguiente instrucción después de wait)
• Definición fuerte. Wait(S) : at(p) ◊S>0 ◊ at(p’) Signal(S) : S:=S+1
• Definición débil. Wait(S) : at(p) ◊ S>0 ◊ at(p’) Signal(S) : S:=S+1
SistemasConcurrentes
Propiedades según tipo de semáforo
• La exclusión mutua y la ausencia de interbloqueo se mantienen independientemente del tipo de semáforo
• Pero no la inanición. P.ej. para uno de espera activa, considerar la secuencia: P1 hace un Wait(S) y entra en su sección crítica P2 encuentra que S=0 e itera en el bucle P1 completa el post-protocolo, sección no crítica,
pre-protocolo y vuelve a entrar en su sección crítica
P2 encuentra que S=0 e itera en el bucle
SistemasConcurrentes
El problema del productor-consumidor con semáforos
• Tenemos: Productores: crean un dato Consumidores: consumen un dato
• Tipos: Síncrono Asíncrono
Buffer infinito Buffer finito
• Cola circular• Pool
Top Related