Volver al temario
Tema 04 · 70 páginas

Comunicación y sincronización

Tema completo Modo estudio
GUÍA DE ESTUDIO · Páginas 524 Ver PDF

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_t con sigemptyset, sigfillset, sigaddset, sigdelset
  • Programación: sigaction con sa_handler, sa_mask, sa_flags
  • Generación: kill(), alarm()
  • Bloqueo: sigprocmask() con SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK
  • Espera atómica: sigsuspend() (resuelve carrera con pause)
  • 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:
    1. Prevenir: ordenar recursos linealmente, pedir en orden creciente
    2. Evitar: control detallado de asignación
    3. 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
Consultar el contenido original