Volver al temario
Tema 04 · 70 páginas

Comunicación y sincronización

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

2.1.1. ¿Por qué es necesaria la sincronización?

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

¿Por qué es necesaria la sincronización?

Resumen

Ejemplo: variable contador trabajo_pendiente

Se presenta un caso concreto para demostrar la necesidad de sincronización. Una variable compartida trabajo_pendiente indica cuántos trabajos de impresión están pendientes.

  • Proceso usuario: incrementa trabajo_pendiente cada vez que envía un trabajo a la impresora.
  • Proceso gestor de la impresora: decrementa trabajo_pendiente cada vez que finaliza un trabajo.

Si la actualización se realiza sin restricciones, se generan inconsistencias (resultados erróneos).

El problema de las copias temporales

Una instrucción de alto nivel se traduce en múltiples instrucciones de máquina:

; Proceso usuario (RISC):
LOAD R0, trabajo_pendiente   ; Copiar variable a registro
INC R0                       ; Incrementar registro
STORE trabajo_pendiente, R0  ; Almacenar registro en variable

; Proceso gestor:
LOAD R1, trabajo_pendiente   ; Copiar variable a registro
DEC R1                       ; Decrementar registro
STORE trabajo_pendiente, R1  ; Almacenar registro en variable

Durante la ejecución, se realizan copias temporales en registros. Estas copias pueden ser inconsistentes con el valor real de la variable en memoria.

Dos situaciones erróneas

1. No impresión de un trabajo (pérdida)

Secuencia de fallo:

  1. Gestor carga trabajo_pendiente (=3) en R1.
  2. Gestor decrementa R1 (=2) → inconsistencia con memoria (=3).
  3. Cambio de contexto: gestor se interrumpe antes de STORE.
  4. Usuario carga trabajo_pendiente (=3) en R0, incrementa (=4) y almacena.
  5. Cuando el gestor reanuda, ejecuta STORE con R1=2 → trabajo_pendiente = 2.

Resultado: se partió de 3, hubo un decremento y un incremento → debería ser 3, pero vale 2. Un trabajo no se imprimirá.

2. Intento de impresión de trabajo inexistente

Caso simétrico: el usuario es interrumpido antes de completar su incremento, y el gestor decrementa. El valor final queda en 4 (debería ser 3), provocando que el gestor intente imprimir un trabajo que no existe.

Solución: indivisibilidad

Si las operaciones de incremento/decremento se ejecutaran de manera atómica (indivisible), no habría inconsistencias. Una vez iniciada la actualización de una variable compartida, ningún proceso podría iniciar otra hasta que la primera finalice.

Race conditions (condiciones de carrera)

La ejecución concurrente no sincronizada de procesos con variables compartidas produce errores que dependen del planificador de procesos. Estas situaciones se denominan race conditions y deben erradicarse de los programas.

Ideas clave

  • Las copias temporales en registros son la causa raíz de las inconsistencias.
  • Una race condition genera resultados erróneos cuyo depende del orden de planificación.
  • La indivisibilidad (atomicidad) de las operaciones sobre variables compartidas es la solución fundamental.
  • Un cambio de contexto durante una actualización parcial produce datos inconsistentes.
Consultar el contenido original