Title: Sistemas Concurrentes: Semforos
1Sistemas ConcurrentesSemáforos
- I.T. Informática de Sistemas
2BibliografÃ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
3Concepto de semáforo
- Una variable entera con dos operaciones atómicas
- Wait(s). cuando sgt0 ? ss-1 mientras tanto,
espera. - Signal(s). ss1
4Inventor de los semáforos
- Edsger Dijkstra (1965)
- Les dio a las operaciones estos nombres
- P wait
- V signal
5Invariantes del semáforo
- Todo semáforo, al margen de su implementación,
debe cumplir los invariantes - S gt 0
- S Sinicial signals - waits
- signals es la cantidad de signal ejecutados en S
- waits es la cantidad de waits completados en S
6Posibles comportamientos de un semáforo (según su
implementación)
- Conjunto bloqueado. El signal desbloquea a un
proceso en espera (no sabemos cuál). - 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 Sgt0 then SS-1 exit end if
- end loop
7Definiciones basadas en propiedades (Ben-Ari)
- (plugar de la instrucción wait, psiguiente
instrucción después de wait) - Definición fuerte.
- Wait(S) at(p) ? ??Sgt0 ? ?at(p)
- Signal(S) SS1
- Definición débil.
- Wait(S) at(p) ? ??Sgt0 ? ?at(p)
- Signal(S) SS1
8Implementación sin espera activa
type Semáforo is record valor
integer L ListaltProcesogt end
signal(s) if not L.vacÃa then hilo
L.extraer WAKEUP(hilo) else
s.valors.valor1 end if
wait(s) if s.valorgt0 then
s.valors.valor-1 else
L.agregar(hilo_actual) SLEEP end if
9Semáforos binarios
- Un semáforo que pueda tomar cualquier valor no
negativo recibe el nombre de semáforo general - Un semáforo que sólo puede tomar los valores 0 y
1 recibe el nombre de semáforo binario - La definición de las operaciones queda igual
salvo signal(s) - Si hay procesos suspendidos, despierta uno, si
no, s1
10Ejercicios
- a.-) Resolver el problema de la sección crÃtica
para n procesos con semáforos
11Ejercicio
- Empleando la sentencia concurrente (cobegin,
coend) y semáforos, construir un programa
concurrente que se corresponda con el siguiente
grafo de precedencia
A
C
B
D
E
12Ejercicio
- Supongamos tres procesos concurrentes P1, P2 y P3
con el código que se muestra en las figuras. Se
pide - 1.- Introducir las modificaciones necesarias para
que d se ejecute solo si e o a se han ejecutado - 2.- Introducir las modificaciones necesarias para
que d se ejecute solo si e y a se han ejecutado
Task body P1 is begin loop a b end
loop end
Task body P2 is begin loop c d end
loop end
Task body P3 is begin loop e f end
loop end