Los sistemas de computación en tiempo real deben reaccionar dinámicamente a los cambios de estado de un entorno, cuya evolución depende del comportamiento humano, de un fenómeno natural o artificial o de una planta industrial. Las aplicaciones en tiempo real abarcan un amplio espectro de actividades; los ejemplos incluyen automatización de producción, sistemas integrados, sistemas de telecomunicaciones, aplicaciones automotrices, supervisión de plantas nucleares, experimentos científicos, robótica, transporte y acondicionamiento de audio y video multimedia, monitoreo de operaciones quirúrgicas y transacciones bancarias.

En todas estas aplicaciones, el tiempo es la restricción básica a tratar y la principal preocupación para evaluar la calidad del servicio proporcionado por los sistemas informáticos. Los requisitos de la aplicación conducen a la diferenciación entre restricciones de tiempo real duras y blandas. Las aplicaciones tienen fuertes restricciones de tiempo real cuando un solo incumplimiento de las restricciones de tiempo puede resultar en un desastre económico, humano o ecológico. Una falla de tiempo puede provocar que se pierda una fecha límite, que un mensaje llegue demasiado tarde, un período de muestreo irregular, una gran dispersión de tiempo en un conjunto de mediciones «simultáneas», etc. Las restricciones blandas de tiempo real están involucradas en aquellos casos en que las fallas de temporización causan daños cuyo costo se considera tolerable bajo algunas condiciones de frecuencia de fallas o retraso del servicio.

Este libro se refiere a aplicaciones en las que un sistema informático controla (o supervisa) un entorno en tiempo real. Por tanto, es razonable dividir dichas aplicaciones en dos partes: el sistema informático en tiempo real y el entorno controlado. Este último es el proceso físico al que se conecta el sistema informático para controlar su comportamiento. El tiempo real es un desafío serio para los sistemas informáticos y sus dificultades a menudo se malinterpretan. Un sistema informático en tiempo real debe proporcionar una función de gestión del tiempo; esta es una diferencia importante en comparación con los sistemas informáticos convencionales, ya que el valor de los datos producidos por una aplicación en tiempo real depende no solo de la corrección del cálculo sino también del momento en que los datos están disponibles. Una orden que se calcula correctamente pero se envía tarde es una orden incorrecta: es una falla de tiempo. En una aplicación en tiempo real, el sistema informático y el entorno son dos socios que se comportan en diferentes dominios de tiempo.

El entorno se rige por mediciones de duración precisas del tiempo cronométrico. El sistema informático determina una secuencia de instrucciones de máquina y define un tiempo cronológico. La aplicación de tiempo real que es controlada por un sistema informático no se preocupa por la alta o baja fidelidad del tiempo cronométrico o del tiempo cronológico, sino por el correcto control de su sincronía. Como el tiempo cronológico lo fija el proceso físico y es un dato intangible, el sistema informático tiene que adaptar el ritmo de sus acciones al reloj del entorno. En el contexto de las aplicaciones en tiempo real, las acciones son tareas (también denominadas procesos) y la organización de su ejecución por parte de los procesadores de la arquitectura informática (secuenciación, entrelazado, superposición, computación paralela) se denomina programación de tareas en tiempo real.

El cronograma debe cumplir con las limitaciones de tiempo de la aplicación; el procedimiento que rige el orden de ejecución de las tareas se denomina política de programación. Si se requieren algunas propiedades de la política de programación, se debe derivar formalmente su garantía; esto tiene que estar respaldado por un modelo de comportamiento de las tareas. Cada clase de modelo da lugar al estudio de políticas específicas y diversas. Sin embargo, todas estas políticas se basan en la “veracidad” del modelo. En un contexto industrial, los parámetros de temporización de las tareas no se conocen perfectamente y, además, pueden ocurrir algunos eventos inusuales: esto puede conducir a fallas de temporización imprevistas.

Un cronograma robusto debe ser capaz de hacer frente a estas situaciones, lo que significa poder limitar el impacto de una falla de tiempo en la aplicación y desviar sus consecuencias a las tareas menos importantes. Por lo tanto, es fácil comprender que la implementación de una aplicación en tiempo real requiere experiencia en programación y también una comprensión profunda de la aplicación de destino. Este libro es un tratado básico sobre programación en tiempo real. Los objetivos principales son estudiar las políticas de programación en tiempo real más significativas que se utilizan hoy en día en la industria para hacer frente a las limitaciones de tiempo real.

Las bases de la programación en tiempo real y sus principales evoluciones se describen utilizando terminología y notaciones unificadas. Los primeros capítulos se refieren a los sistemas informáticos centralizados. También tratamos el caso de los sistemas distribuidos en el contexto particular donde las tareas son asignadas y administradas permanentemente por programadores locales que comparten un reloj de sistema global; las decisiones siguen siendo locales para cada computadora del sistema. El uso de redes de área local para soportar aplicaciones en tiempo real plantea el problema de la programación de mensajes y también de la programación conjunta de tareas y mensajes.