Sincronización de Procesos 1. Formas de pasaje de información 2. Actividades críticas protejidas (p. ej. actualización de información compartida) 3. Secuenciamiento adecuado en caso de dependencias 2 y 3 aplica también a threads.
Condiciones de Competencia Dos procesos quieren acceder a memoria compartida al mismo tiempo. El resultado final depende de cuando ejecuta cada uno.
Regiones Críticas (1) Parte del programa donde se accede a la memoria compartida. Se deben dar 4 condiciones para proveer una comunicación correcta y eficiente: 1. Exclusión Mutua: ningún par de procesos puede estar e la región crítica en forma simultánea. 2. No se debe hacer ninguna asunción acerca de la velocidad o número de CPUs. 3. Avance: ningún proceso ejecutando fuera de su sección crítica puede ser bloqueado por otro proceso. 4. Fairness: ningún proceso debe esperar por siempre para entrar a su sección crítica.
Exclusión mutua usando regiones críticas.
Exclusión Mutua Usando Espera Activa 1. Desabilitano las interrupciones. (Sólo el kernel) 2. Variables de Lock => race condition 3. Alternancia estricta usando spin locks – viola la condición 3. 4. Solución de Peterson 5. Test-and-set locks (TSL)
Alternancia Estricta Solución propuesta para el problema de la región crítica (a) Proceso 0. (b) Proceso 1.
Solución de Peterson Interested(process)= False => el proceso no ingresó y no quiere ingresar a la sección crítica. Si ambos están interesados, un proceso sólo puede entrar si es el turno del otro.
Test-and-set lock Entrando y saliendo de la sección crítica usando la instrucción TSL. Instrucciones atómicas, implementadas en hardware.
Productor-Consumidor problema de condición de competencia. Sleep y Wakeup Productor-Consumidor problema de condición de competencia.
Semáforos Variable entera con 2 operaciones atómicas: down: if 0, then go to sleep; if >0, then decrementar valor up: incrementar valor y dejar a un proceso dormido ejecutar un down Implementado deshabilitando todas las interrupciones por el kernel.
Problema del productor-consumidor usando semáforos.
Mutexes Implementación de mutex_lock y mutex_unlock para sincronización threads en espacio de usuario
Monitores (1) Ejemplo de monitor – sólo un proceso puede estar dentro del monitor a al vez
Monitors (2) Ejemplo del problema del productor-consumidor con monitores Sólo un procedimiento del monitor puede estar activo a la vez El buffer tiene N entradas Variables de condition con wait and signal
Problema del productor-consumidor con N mensajes Pasaje de Mensajes Problema del productor-consumidor con N mensajes
Barreras Uso de una barrera Procesos acercándose a la barrera Todos los procesos menos uno esperando en la barrera El último proceso llega, se deja pasar a todos
Cena de los Filósofos Filósofos comen/piensan Para comer necesitan 2 tenedores Toman un tenedor a la vez
Problema de los Filósofos
Solución sin Deadlock para los Filósofos (1)
Solución sin Deadlock para los Filósofos (2)
Lectores y Escritores
El Barbero Dormilón
Solución al Barbero Dormilón