Resumen
Material de estudio basado en la edición de 2014. Borrador pendiente de revisión editorial independiente.
Resumen del Tema
Resumen
El tema ha estudiado el problema de la sincronización de procesos concurrentes, los mecanismos de comunicación y los interbloqueos.
Causas de los problemas de sincronización
Variables compartidas: la principal causa de inconsistencias es la existencia de copias temporales por parte de los procesos concurrentes en registros del procesador. Cuando un proceso está modificando una variable y es interrumpido, otro proceso puede leer un valor parcial, produciendo resultados erróneos (race conditions).
Dispositivos compartidos: una sincronización incorrecta puede provocar problemas de interbloqueo.
Solución: semáforos
Los semáforos permiten la sincronización de manera sencilla mediante tres operaciones atómicas: sem_init, sem_wait y sem_signal. Se utilizan para:
- Exclusión mutua en secciones críticas.
- Conteo de recursos disponibles.
- Sincronización entre procesos.
Problema principal: el programador es el responsable de su buen uso. Un uso incorrecto puede provocar deadlocks o inanición.
Comunicación entre procesos
Paso de mensajes: mecanismo que permite sincronización y comunicación simultáneas. En Unix se implementa mediante pipes, named pipes y sockets (colas de bytes FIFO). Las pipes son volátiles y no permiten re-posicionamiento.
Señales de software: permiten a los procesos recibir notificaciones de acontecimientos asíncronos (errores, dispositivos, temporizadores, otros procesos). La interfaz POSIX ofrece un conjunto completo de herramientas para programar, bloquear y gestionar señales.
Interbloqueos (deadlocks)
Los deadlocks aparecen cuando procesos cooperativos esperan recursos que están asignados a otros procesos, formando un bucle de espera. Las cuatro condiciones necesarias son: exclusión mutua, retención y espera, no expropiación y espera circular. Las estrategias incluyen prevención (ordenar recursos), evitación (control de asignación) y detección/recuperación.
Ideas clave
- Las copias temporales son la causa raíz de inconsistencias en variables compartidas.
- Los semáforos resuelven la exclusión mutua pero requieren uso cuidadoso.
- El paso de mensajes combina sincronización e intercambio de información.
- Las señales permiten notificaciones asíncronas entre procesos y el SO.
- Los deadlocks se previenen ordenando los recursos y pidiéndolos en orden creciente.