Esquema de repaso
Material de estudio basado en la edición de 2014. Borrador pendiente de revisión editorial independiente.
Esquema Global: Comunicación y Sincronización
1. Introducción
- Concepto de IPC (inter-process communication)
- Dos escenarios: procesos con memoria compartida y sin memoria compartida
- Problemática de los deadlocks
2. Objetivos
- Conciencia de la necesidad de sincronización
- Compartición de recursos lógicos y exclusión mutua
- Ventajas/desventajas de los mecanismos de sincronización
- Dificultad de uso de las herramientas de acceso exclusivo
- Características del paso de mensajes
- Uso práctico en un SO concreto
3. Comunicación y Sincronización (Marco conceptual)
- Sincronización: acceso secuencial a objetos concurrentes, integridad del sistema
- Comunicación: intercambio de información entre procesos
- Mecanismos: memoria compartida, paso de mensajes, señales
4. Primer Escenario: Compartición de Recursos
4.1 Sincronización de Procesos
4.1.1 ¿Por qué es necesaria?
- Ejemplo: variable
trabajo_pendiente(contador de impresiones) - Código de alto nivel → múltiples instrucciones de máquina
- Copias temporales en registros → inconsistencias
- Escenario 1: no impresión de un trabajo (valor queda en 2, debería ser 3)
- Escenario 2: impresión de trabajo inexistente (valor queda en 4)
- Solución: indivisibilidad de operaciones
- Race conditions (condiciones de carrera)
4.1.2 La sección crítica
- Definición: secuencia de instrucciones que modifican variables compartidas
- Exclusión mutua: sólo un proceso a la vez
- Requisitos: exclusión mutua, sin suposiciones de velocidad, independencia, evitar inanición
- Protocolo: petición → acceso → liberación
- Espera bloqueada (no activa) para mejor utilización del procesador
4.2 Semáforos
4.2.1 Definición
- Variable con contador asociado
- Tres operaciones atómicas:
sem_init,sem_wait,sem_signal - Tipos: binarios (0/1) y n-arios (≥ 0)
- Nombres alternativos: P/V, down/up, acquire/release
4.2.2 Utilización
- Exclusión mutua: semáforo en 1, wait antes, signal después
- Contador de recursos: semáforo en N, wait para consumir, signal para liberar
- Sincronización: semáforo en 0, un espera, otro autoriza
- Granularidad: baja (más concurrencia) vs. alta (menos concurrencia)
- Posible inanición con selección no equitativa
4.2.3 Implementación
- Espera activa (sencilla, ineficiente) vs. bloqueo (mejor utilización)
- Selección FIFO para evitar inanición
- Soporte de hardware necesario para indivisibilidad
4.3 Semáforos en Linux (POSIX)
- Tipo
sem_t, llamadas:sem_init,sem_wait,sem_post - Ejemplo: motor de 4 tiempos (sincronización cíclica)
- Semáforos sin nombre (mismo proceso) vs. con nombre (distintos procesos)
5. Segundo Escenario: Memoria No Compartida
5.1 Paso de Mensajes
5.1.1 Características generales
- Cabecera (fija) + cuerpo (variable)
- Mensajes directos (emisor→receptor explícito) vs. indirectos (buzones)
- Comunicación síncrona (blocante) vs. asíncrona (no blocante)
- Longitud fija vs. variable
5.1.2 Ejemplo: exclusión mutua con mensajes
- Buzón con un mensaje → equivalente a semáforo binario
- Buzón con n mensajes → semáforo n-ario
5.1.3 Paso de mensajes en Unix
- Pipes: procesos con parentesco,
pipe()+fork() - Named pipes: procesos con acceso al mismo directorio,
mknod()+open() - Sockets: procesos en máquinas diferentes,
socket()+bind()/connect() - Colas de bytes FIFO:
read(),write(),close() - Comportamiento especial: cola vacía (bloquea o devuelve 0), cola llena (bloquea), sin consumidor (señal deSoftware)
- Pipes volátiles, sin
lseek - Ejemplo:
ps aux | grep getty
5.2 Señales de Software
5.2.1 Descripción
- Analogía con interrupciones de hardware
- Procedencia: dispositivos E/S, excepciones, llamadas explícitas, reloj, efectos laterales
- Tratamiento: usuario, ignorar, por defecto del SO (destrucción)
- Almacenamiento en PCB
5.2.2 Señales POSIX en Linux
- Terminología: generación, tratamiento, depósito, pendiente, programación, captura, bloqueada, ignorada
- Lista de señales principales (SIGHUP, SIGINT, SIGKILL, SIGSEGV, etc.)
- Conjuntos de señales:
sigset_tconsigemptyset,sigfillset,sigaddset,sigdelset - Programación:
sigactionconsa_handler,sa_mask,sa_flags - Generación:
kill(),alarm() - Bloqueo:
sigprocmask()conSIG_BLOCK,SIG_UNBLOCK,SIG_SETMASK - Espera atómica:
sigsuspend()(resuelve carrera conpause) - Depósito sobre procesos bloqueados: aborta o reinicia la llamada al sistema
6. Deadlocks
- Definición: bloqueo indefinido por espera circular de recursos
- Ejemplo clásico: P0 (disco→impresora), P1 (impresora→disco)
- Cuatro condiciones necesarias: exclusión mutua, retención y espera, no expropiación, espera circular
- Estrategias:
- Prevenir: ordenar recursos linealmente, pedir en orden creciente
- Evitar: control detallado de asignación
- Detectar y recuperar: ciclos en grafo de recursos, reiniciar procesos
7. Resumen Global
- Copias temporales → race conditions → semáforos
- Paso de mensajes → pipes/named pipes/sockets
- Señales → notificaciones asíncronas
- Deadlocks → prevención/evitación/detección