Programación de plazos para sistemas en tiempo real

Rodrigo Ricardo Publicado el 24 enero, 2024 6 minutos y 48 segundos de lectura

Introducción a los Sistemas de Tiempo Real

Los sistemas en tiempo real (RTS) son sistemas cuidadosamente diseñados que consisten en software y hardware que se utilizan para capturar y responder a eventos que ocurren en el mundo real. Como muchos sistemas informáticos, el proceso RTS debe operar correctamente, pero tiene un requisito adicional de que debe actuar de manera oportuna. Si el RTS de un automóvil que controla sus frenos no actúa de manera oportuna, puede causar un evento catastrófico. Para lograr este objetivo, el ingeniero de diseño debe seleccionar cuidadosamente entre una variedad de opciones de programación en tiempo real disponibles. Definamos qué entendemos por proceso y veamos algunas de las propiedades del proceso ilustradas en la Figura 1.

Terminología en tiempo real

El proceso del sistema en tiempo real

El proceso RTS es un código de computadora que se ejecuta como resultado de un evento detectado o programado. Se mantiene pequeño intencionalmente para que pueda ejecutarse muy rápidamente y permitir que se programen y ejecuten otros procesos. Algunas de las características del proceso se muestran y explican en la Figura 1.

Configuraciones, eventos y programación del sistema en tiempo real

Existen múltiples configuraciones, eventos y tipos de programación asociados con el proceso en tiempo real. Un flujo de estas configuraciones y eventos se describe en la Figura 2 y se explica en las siguientes secciones.

Configuraciones del sistema en tiempo real

Duro y suave en tiempo real

Un sistema en tiempo real se puede caracterizar como un sistema suave o duro. Los sistemas suaves en tiempo real pueden no cumplir con algunos plazos, pero el rendimiento puede degradarse si no se cumplen demasiados. Ejemplos de sistemas suaves en tiempo real son los electrodomésticos, los reproductores de MP3 portátiles y los sistemas de entretenimiento. Un sistema de tiempo real estricto nunca debe perder una fecha límite o puede causar un evento catastrófico. Los sistemas duros en tiempo real se pueden usar para controlar aeronaves, centrales eléctricas y su automóvil familiar.

Eventos Periódicos, Aperiódicos y Esporádicos

El hardware de un RTS detecta eventos que ocurren en el mundo real. Estos eventos pueden ser periódicos, aperiódicos o esporádicos. Los eventos periódicos se repiten en intervalos regulares. Un evento aperiódico puede ocurrir solo una vez o puede ocurrir varias veces a lo largo del tiempo. Los eventos esporádicos pueden aparecer con mucha frecuencia, pero no de manera constante o regular.

Programación estática y dinámica

La programación estática es donde el diseñador del sistema ha analizado las características de cada proceso y ha especificado el orden exacto de ejecución del proceso. Durante la ejecución del RTS, el orden de los procesos programados no cambiará.

La programación dinámica es el mecanismo en el que el RTS realiza la programación de subprocesos en función de un algoritmo de programación seleccionado. El orden de ejecución de los hilos está completamente controlado por ese algoritmo. Durante la ejecución del RTS, el orden de los procesos programados cambiará constantemente.

Programación preventiva, no preventiva y mixta

El algoritmo de programación que elija depende de su proyecto. Diferentes algoritmos pueden producir diferentes resultados. Los proyectos pueden diferir en la cantidad de procesos necesarios y el tiempo de respuesta del proceso, las prioridades y los plazos. El algoritmo de programación debe garantizar que se cumplan todas las restricciones de tiempo críticas.

Algunos sistemas en tiempo real utilizan programación preventiva . En este tipo de sistema de programación, se asignan las prioridades de los procesos. El RTS siempre ejecuta primero el proceso con la prioridad más alta. Los procesos de menor prioridad se pueden interrumpir en medio de la ejecución para permitir que se ejecute un proceso de mayor prioridad. Una vez que el proceso de mayor prioridad completa la ejecución, el proceso de menor prioridad puede continuar la ejecución desde el punto donde se interrumpió. En un sistema de programación no preventivo , una vez que un proceso comienza a ejecutarse, nunca es interrumpido por otro proceso. Hay algunos sistemas de programación que utilizan la programación mixta. En este tipo de programación, hay procesos de alta prioridad que no son preventivos y procesos de menor prioridad que son preventivos.

Procesadores únicos y múltiples

Para algunos de los sistemas de tiempo real más pequeños, se utiliza un sistema informático de un solo procesador. En sistemas más complejos, se utilizan múltiples procesadores para que los procesos puedan asignarse a diferentes procesadores para asegurarse de que todos puedan cumplir con sus plazos.

Programación en tiempo real

Los sistemas en tiempo real pueden ser muy simples o pueden ser muy complejos de implementar. Otro factor que puede ser muy importante es la criticidad. ¿La falla de un RTS causará una pérdida similar o una gran pérdida financiera? Estos factores juegan un papel en cómo diseñas un RTS.

La tabla de la Figura 3 describe una matriz de diferentes configuraciones de RTS.

Algoritmos de programación en tiempo real

Veamos ahora los algoritmos de programación disponibles que se encuentran en el corazón de un RTS con más detalle.

Tasa de programación monotónica (RMS)

El algoritmo Rate Monotonic Scheduling (RMS) proporciona una programación estática y prioritaria de procesos periódicos. RMS le permite garantizar que un conjunto de procesos sea programable al proporcionar un conjunto de reglas para realizar un análisis de capacidad de programación. El análisis determina si un conjunto de procesos es programable en las peores condiciones y predice el comportamiento del sistema. RMS requiere una asignación estática de las prioridades del proceso en función de la duración de su período. Cuanto más corto sea el período del proceso, mayor será la prioridad del proceso. Por ejemplo, un proceso con un período de 1 milisegundo tiene mayor prioridad que un proceso con un período de 100 milisegundos.

Programación monotónica de fecha límite (DMS)

El algoritmo de programación monotónica de fecha límite (DMS) es similar a RMS. Aquí, los procesos tienen prioridades asignadas estáticamente de acuerdo con sus plazos. El proceso con los plazos más cortos tiene la máxima prioridad. Al igual que RMS, los procesos también son preventivos.

Menos Laxitud Primero (LLF)

Least Laxity First (LLF) es un algoritmo de programación dinámica para tareas periódicas que asigna una prioridad en función de su urgencia de ejecución. El algoritmo LLF utiliza el tiempo de holgura o laxitud para determinar cuándo programar una tarea. Esta es la cantidad de tiempo entre la hora de inicio de la tarea (si comenzó ahora) y su próxima fecha límite. Cuanto menor sea el valor de laxitud, más rápido se debe programar para evitar plazos. El LLF es el algoritmo de programación más utilizado en los sistemas de múltiples procesadores integrados.

Fecha límite más temprana primero (EDF)

La fecha límite más temprana primero (EDF) es un algoritmo de programación dinámico que coloca los procesos en una cola de prioridad y cuando ocurre un evento de programación, se busca en la cola para encontrar el proceso más cercano a su fecha límite. Luego, el proceso selecciona y programa la tarea para su ejecución. Debido a los problemas para calcular con precisión la granularidad de la fecha límite del proceso, el algoritmo EDF no se usa en la mayoría de los sistemas en tiempo real.

Conclusión

En esta lección, hemos explorado las terminologías de los sistemas en tiempo real y hemos examinado las técnicas comúnmente utilizadas para programar algoritmos para controlar el mundo que nos rodea. La próxima vez que gire la llave de su automóvil o aborde un avión, comprenderá mejor la ingeniería necesaria para controlar estas maravillosas máquinas.

Explora más sobre este tema

Selecciona un tema y sigue aprendiendo...

Rodrigo Ricardo
Rodrigo Ricardo Editor y fundador