Estados de Ejecución de un Proceso

Semáforos
Mecanismos de sincronismo, implementado como una construcción de un programación concurrente de más alto nivel.
- Tipo de dato compuesto por dos campos:
- un entero no negativo llamado V
- un set de procesos llamado L
- Se inicializa con un valor k ≥ 0 y con el conjunto vació ∅.
- Se definen dos operaciones atómicas sobre un semáforo S:
- wait(S) también llamada p(S)
- signal(S) también llamada v(S)
Un semáforo es un contador:
- Si contador > 0 → recurso disponible.
- Si contador ≤ 0 → recurso no disponible.
- El valor del semáforo representa la cantidad de recursos disponibles.
- Si el valor es cero o uno, se llaman semáforos binarios y se comportan igual que los locks de escritura (Mutex)
p (wait): resta 1 al contador.
v (signal): suma 1 al contador.
Wait(S) y Signal(s)
- Son instrucciones atómicas.
- Un semáforo debe ser inicializado con un valor entero no negativo.
- La instrucción signal() debe despertar a uno de los procesos suspendidos, pero no está definido cuál de todos debe despertarse.
Wait(S)
if S.V > 0
S.V := S.V - 1
else
S.L add p
p.state := blocked
Signal(S)
if S.L is empty
S.V := S.V + 1
else
sea q un elemento arbitrario del conjunto S.L
S.L remove q
q.state := ready
Semáforo binario o Mutex
- El valor V sólo puede tomar los valores 0 o 1