← Planificación de la CPU Bloque 9 · Planificación en tiempo real · Tema 32 de 44

Tema 32

Sistemas de tiempo real

Los sistemas de propósito general (Linux, Windows) optimizan el rendimiento promedio. Los sistemas de tiempo real optimizan la predecibilidad: un resultado correcto que llega tarde es un resultado incorrecto. En este tema verás qué es el tiempo real, la diferencia entre tiempo real duro y blando, qué son los plazos (deadlines) y la latencia, y por qué «rápido» no es lo mismo que «predecible».

1. Qué es un sistema de tiempo real

Un sistema de tiempo real es un sistema en el que la corrección del resultado depende no solo de la lógica (qué se calcula) sino también del tiempo (cuándo se entrega). Un resultado correcto que llega tarde es un resultado incorrecto.

En un sistema de propósito general, lo que importa es el rendimiento promedio: cuánto trabajo se hace por segundo. En un sistema de tiempo real, lo que importa es la predecibilidad: se debe garantizar que cada tarea termina antes de su plazo.

Los sistemas de tiempo real se encuentran en todas partes: control de motores, sistemas de frenado (ABS), marcapasos, sistemas de guía de misiles, control de tráfico aéreo, sistemas de negociación de alta frecuencia (HFT). En todos estos casos, un resultado tardío es inútil o peligroso.

Tiempo real no es tiempo rápido

Un sistema de tiempo real no necesita ser rápido; necesita ser predecible. Un sistema que responde en 1 ms el 99 % de las veces pero tarda 100 ms el 1 % no es de tiempo real. Un sistema que responde en 10 ms el 100 % de las veces sí lo es.

2. Tiempo real duro y blando

Los sistemas de tiempo real se clasifican en dos categorías:

AspectoTiempo real duro (hard)Tiempo real blando (soft)
Plazo incumplidoCatastrófico: fallo del sistema, daño físico, pérdida de vidas.Degradación: pérdida de calidad, pero el sistema sigue funcionando.
GarantíaDebe garantizarse al 100 %.Se garantiza con alta probabilidad, pero no al 100 %.
EjemplosMarcapasos, control de vuelo, ABS, airbag.Streaming de video, juegos, telefonía VoIP, audio.
PlanificaciónAlgoritmos con garantías formales (RM, EDF).Algoritmos heurísticos (prioridades, Round Robin).

La diferencia clave es la consecuencia de incumplir un plazo. En tiempo real duro, un plazo incumplido es un fallo del sistema. En tiempo real blando, un plazo incumplido degrada la calidad pero no es catastrófico.

La mayoría de los sistemas de propósito general (Linux, Windows) son de tiempo real blando: intentan cumplir los plazos pero no lo garantizan. Los sistemas de tiempo real duro requieren hardware y software especializados.

3. Plazos (deadlines)

Un plazo (deadline) es el instante antes del cual una tarea debe terminar. Si la tarea termina después del plazo, se ha incumplido el plazo.

Los plazos se clasifican en:

En los sistemas de tiempo real, las tareas suelen ser periódicas: se repiten cada cierto período (por ejemplo, cada 10 ms). Cada instancia tiene su propio plazo: el plazo de la instancia i es i·P + D, donde P es el período y D es el plazo relativo.

El tiempo de respuesta de una tarea es el tiempo desde que llega hasta que termina. El plazo se cumple si el tiempo de respuesta ≤ plazo.

4. Latencia

La latencia es el tiempo que pasa desde que ocurre un evento hasta que el sistema responde. En un sistema de tiempo real, la latencia debe ser acotada y predecible.

La latencia se descompone en:

La latencia total es la suma de las tres. En un sistema de tiempo real, cada una debe ser acotada.

Los sistemas de propósito general tienen latencias variables: la latencia de despacho puede ser de 1 μs a 100 ms, dependiendo de la carga. Los sistemas de tiempo real tienen latencias acotadas: la latencia de despacho es siempre menor que un valor fijo (por ejemplo, 1 ms).

5. Rápido vs predecible

La diferencia entre «rápido» y «predecible» es fundamental:

AspectoRápidoPredecible
ObjetivoMinimizar el tiempo de respuesta promedio.Garantizar que el tiempo de respuesta ≤ plazo, siempre.
MétricaPromedio, percentiles.Peor caso (worst-case).
AlgoritmosSJF, Round Robin, CFS.RM, EDF, SCHED_FIFO.
SistemasLinux, Windows, macOS.RTOS, Linux con PREEMPT_RT.
Trade-offSacrifica predecibilidad por rendimiento.Sacrifica rendimiento por predecibilidad.

Un sistema rápido puede ser impredecible: la mayoría de las veces responde en 1 ms, pero ocasionalmente tarda 100 ms. Un sistema predecible siempre responde en 10 ms. Para un sistema de tiempo real, el segundo es mejor.

La predecibilidad requiere:

6. Tareas periódicas y aperiódicas

Las tareas en un sistema de tiempo real se clasifican en:

TipoDescripciónEjemplo
PeriódicasSe repiten cada cierto período. Cada instancia tiene un plazo.Sensor de temperatura que se lee cada 10 ms.
AperiódicasLlegan en momentos arbitrarios. Pueden tener plazo o no.Interrupción de un botón.
EsporádicasAperiódicas con un tiempo mínimo entre llegadas.Alarma de un sensor.

Las tareas periódicas son las más comunes en tiempo real. Se caracterizan por:

La utilización total es la suma de las utilizaciones de todas las tareas. Si la utilización total > 1, el sistema no puede cumplir todos los plazos (no hay suficiente CPU).

7. Ejemplos de sistemas de tiempo real

SistemaTipoPlazo típicoConsecuencia de incumplimiento
MarcapasosDuro10-50 msMuerte del paciente.
Control de vueloDuro1-10 msAccidente aéreo.
ABS (frenos)Duro1-5 msAccidente.
AirbagDuro10-30 msMuerte o lesión grave.
Control de motorDuro1-10 msDaño al motor.
Streaming de videoBlando33 ms (30 fps)Frame drop, degradación de calidad.
VoIPBlando20-50 msDegradación de calidad de voz.
JuegosBlando16 ms (60 fps)Lag, degradación de experiencia.
HFT (trading)Blando/Duro1-10 μsPérdida financiera.

8. Requisitos del sistema

Un sistema de tiempo real (especialmente duro) requiere:

Linux con el parche PREEMPT_RT convierte el núcleo en preemptible, reduciendo la latencia máxima de ~100 ms a ~1 ms. Es la base de los sistemas de tiempo real blando en Linux.

9. Tiempo real en Linux

Linux soporta tiempo real a través de:

Las políticas de tiempo real tienen prioridad sobre la clase normal (SCHED_OTHER). Un proceso de tiempo real siempre se ejecuta antes que uno normal, siempre que esté listo.

Linux no es un RTOS (Real-Time Operating System) puro, pero con PREEMPT_RT y SCHED_DEADLINE proporciona garantías de tiempo real blando adecuadas para la mayoría de las aplicaciones.

10. Simulador interactivo

Este simulador muestra la diferencia entre un sistema predecible y uno rápido. Un conjunto de tareas periódicas se ejecuta con Round Robin (rápido pero no predecible) y con SCHED_FIFO (predecible). Observa los tiempos de respuesta:

Simulador · tiempo real vs propósito general

Round Robin (rápido, no predecible)

SCHED_FIFO (predecible)

TareaPlazoRR: respuestaFIFO: respuestaRR cumple?FIFO cumple?

11. Resumen

12. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué es un sistema de tiempo real?

Un sistema en el que la corrección del resultado depende del tiempo: un resultado correcto que llega tarde es incorrecto.

2. ¿Cuál es la diferencia entre tiempo real duro y blando?

Duro: un plazo incumplido es catastrófico. Blando: un plazo incumplido degrada la calidad pero no es catastrófico.

3. ¿Por qué «rápido» no es lo mismo que «predecible»?

Un sistema rápido puede ser impredecible (la mayoría de las veces rápido, pero ocasionalmente lento). Un sistema predecible siempre responde en el mismo tiempo.

4. ¿Qué es un plazo (deadline)?

El instante antes del cual una tarea debe terminar.

5. ¿Qué es la latencia?

El tiempo desde que ocurre un evento hasta que el sistema responde.

6. ¿Qué es la utilización de una tarea periódica?

C / P, donde C es el tiempo de ejecución y P es el período.

7. ¿Qué ocurre si la utilización total supera 1?

El sistema no puede cumplir todos los plazos: no hay suficiente CPU.

8. ¿Qué políticas de tiempo real soporta Linux?

SCHED_FIFO, SCHED_RR y SCHED_DEADLINE.

9. ¿Qué hace PREEMPT_RT?

Hace el núcleo preemptible, reduciendo la latencia máxima.

10. ¿Por qué los sistemas de tiempo real evitan la paginación?

Porque los fallos de página introducen latencia impredecible.

Para practicar

  1. Calcula la utilización total para 3 tareas con C=2, P=10; C=3, P=15; C=1, P=5.
  2. Explica por qué un sistema que responde en 1 ms el 99 % de las veces no es de tiempo real duro.
  3. Diseña un conjunto de tareas periódicas y calcula si se pueden cumplir todos los plazos.
  4. Investiga cómo SCHED_DEADLINE garantiza los plazos.
  5. Explica por qué los sistemas de tiempo real evitan operaciones no acotadas.
  6. Compara la latencia de Linux con y sin PREEMPT_RT.