Volver al temario
Tema 04 · 70 páginas

Comunicación y sincronización

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

2.2. Semáforos

Material de estudio basado en la edición de 2014. Borrador pendiente de revisión editorial independiente.

Semáforos — Definición

Resumen

Los semáforos son una herramienta de sincronización que permite garantizar la exclusión mutua de una sección crítica entre un número arbitrario de procesos de manera limpia y sencilla.

Definición formal

Un semáforo es una variable de tipo semaphore con un contador asociado. Se manipula con tres operaciones:

OperaciónFuncionamiento
sem_init(semaphore s, unsigned int valor)Inicializa el contador con el valor indicado (≥ 0)
sem_wait(semaphore s)Atómicamente: espera a que el contador sea > 0, luego lo decrementa
sem_signal(semaphore s)Atómicamente: incrementa el contador

Pseudo-código

sem_wait(semaphore s) {
    while (s <= 0)  /* atómicamente */
        espera();
    s = s - 1;
}

sem_signal(semaphore s) {
    s = s + 1;  /* atómicamente */
}

Tipos de semáforos

  • Binarios: el contador sólo puede valer 0 o 1. Implementan de modo más natural la exclusión mutua.
  • N-arios: el contador puede tomar cualquier valor ≥ 0.

Observaciones importantes

  1. Las operaciones son atómicas: si dos procesos esperan con sem_wait y un tercero ejecuta sem_signal, sólo uno de los dos procesos en espera verá el incremento y lo decrementará.

  2. Problema de elección: cuando varios procesos esperan, la implementación debe elegir uno. Inicialmente se considera la elección aleatoria.

  3. Las operaciones básicas no devuelven el valor actual del contador.

  4. Nombres alternativos:

    • sem_wait: P, down, signal, acquire, pend
    • sem_signal: V, up, wait, release, post
    • No confundir con las llamadas al sistema UNIX wait y signal.

Ideas clave

  • El semáforo es una variable con contador y tres operaciones atómicas: init, wait y signal.
  • Los semáforos binarios implementan exclusión mutua; los n-arios permiten contar recursos.
  • La atomicidad de las operaciones es la propiedad fundamental que garantiza la corrección.
  • La elección del proceso en espera puede causar inanición si no se gestiona adecuadamente.
Consultar el contenido original