09 Semaforos
09 Semaforos
09 Semaforos
Semáforos
Primitiva de Sincronización propuesta por Dijkstra en 1968
Como parte de sistema THE
Usados para exclusión mutua y planificación
De nivel más alto que locks
Variable atómica manipulada por dos operaciones
Wait(semaforo)
• Decrementa semáforo
• Bloquea hebra/proceso si el semáforo es menor que cero, sino
entonces permite a hebra/proceso continuar
• Operacion tambien llamada P(semaforo) o down(semaforo)
Signal(semáforo)
• Incrementa semáforo en uno y si hay algún proceso/hebra
esperando lo despierta
• También llamada V(semaforo) o up(semaforo)
Valor de semáforo puede ser mayor que 1
• Inicializado en 1 es como lock.
• Usado para exclusión mutua
• Inicializado en N
• Usado como contador atómico
Exclusión mutua vs planificación
Exclusión mutua
- Sólo una hebra a
lock
la vez en Sección Sección crítica
Critica. unlock
- Puede ser cualquier
hebra
Planificación
- Requerimiento de
orden en ejecución de
hebras.
tiempo
Ejemplo planificación
tiempo
H1. imprime A
sem S1 = 0, S2 = 0 H2. imprime B
H1: H2: H3:
print A; wait(S1); wait(S2); H3. imprime C
signal(S1); print B; print C;
signal(S2);
Tipos de Semáforos
Binarios (mutex)
Garantizan exclusión mutua a recurso
Sólo una hebra/proceso puede accesar sección crítica a
la vez
Contador de semáforo inicializado en 1
Contadores
Representan recursos con más de una unidad disponible
Permiten accesar recursos de acuerdo al número de
recursos disponibles
Contador es inicializado en N, donde N es la cantidad de
unidades disponibles del recurso
Ejemplos Clásicos de Sincronización
Problema Productor/Consumidor
Un buffer en memoria con N slots disponibles
• Necesita llevar cuenta de ítemes en buffer
Productor produce ítemes a ingresar al buffer
Consumidor consume ítemes del buffer
P C
Productor Consumidor
Agrega item Remueve item
usando puntero in usando puntero
out
out in
Cómo resolver problema?
L
E
Registro BD
L
Cómo resolver problema?
Identificar estado compartido y restricciones de problema
Base de datos compartida
• Mientras haya un lector un escritor no puede accesar base de
datos
• Mientras exista un escritor en base de datos ningún otro escritor
o lector puede accesarla
Identificar condiciones de espera y señalización
Si existe un escritor en BD otro escritor o lector debe esperar
Cuando un escritor termina debe señalizar escritor o lector
que espera
Si podemos tener varios lectores debemos contarlos, para
saber cuando existe uno
• Si hay uno leyendo y llegan otros, otros tambien pueden leer
• Si solo hay uno y sale puede haber un escritor esperando
accesar BD
Qué semáforos necesitamos
Uno inicializado en 1 como mutex para manejar contador de
lectores
Uno tipo mutex para escritor y primer lector
Notas sobre Lectores/Escritores