130 likes | 453 Views
Sistemas Concurrentes: Semáforos. I.T. Informática de Sistemas Curso 2002-2003. 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. Semáforos.
E N D
Sistemas Concurrentes:Semáforos I.T. Informática de Sistemas Curso 2002-2003
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
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
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.
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
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
Exclusión mutua con semáforos S: Semaphore := 1 task body P1 is begin loop SNC1; Wait(S); SC1; Signal(S); end loop; end P1; task body P2 is begin loop SNC2; Wait(S); SC2; Signal(S); end loop; end P2;
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
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;
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
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
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