Un sistema de tiempo real es, por definición, aquel sistema informático cuyo correcto funcionamiento no depende solo de que proporcione la respuesta adecuada a la entrada, sino que también lo haga en un determinado momento.
Los sistemas de tiempo real se suelen clasificar como críticos y acríticos. Ambos tienen requisitos de respuesta temporal, pero en los primeros una respuesta a destiempo se considera un error grave, cosa que no sucede en los segundos.
Por ejemplo, un controlador de una planta nuclear o de un avión es crítico pues no puede permitirse una respuesta fuera de tiempo. Como sistema acrítico podríamos citar un sistema de grabación de vídeo, que en caso de no cumplir las restricciones temporales en algún momento podría causar la pérdida de algún fotograma, lo cual no se considerará grave normalmente.
Existe otra clasificación interesante: sistemas monotarea y multitarea.
Cuando el sistema a controlar puede resolverse mediante un solo algoritmo de control, basta con utilizar un sistema operativo monotarea para garantizar el cumplimiento de los requisitos temporales del mismo.
Estos sistemas son de realización trivial y su dimensionamiento depende exclusivamente de la frecuencia de control y del tiempo de ejecución del algoritmo: si vemos que no se cumple alguna restricción temporal, bastará con aumentar la potencia de la CPU lo necesario.
Estos son los sistemas que nos van a interesar. Cuando hay varias tareas con requisitos temporales a ejecutar a un mismo tiempo con un mismo hardware, no resultará trivial en general el garantizar el cumplimiento de esos requisitos en todas las tareas concurrentes.
Además, el uso de un sistema multitarea normal como Linux no será suficiente, ya que su comportamiento temporal es impredecible (por ejemplo, nos puede llegar una interrupción del disco en un momento crítico en el que la conmutación a la tarea que atiende al disco puede hacer incumplir los requisitos de tiempo a una tarea de tiempo real).
Es decir, es necesario hacer que el sistema operativo que ejecuta el regulador sea predecible, y esto es algo que solo se logra con sistemas especiales o con parches para los sistemas tradicionales como sucede en Linux.
Hay otros motivos por los cuales Linux no puede ser, directamente, utilizado como sistema de tiempo real: en primer lugar, el sistema es de tiempo compartido, es decir, una tarea en ejecución puede ser expulsada por consumir una cantidad de tiempo. Además, los sistemas de memoria virtual utilizados pueden hacer que una tarea crítica tenga páginas en el disco en el momento de entrar a ejecutarse, lo que puede hacer que ocupe un tiempo del orden de miles de veces mayor del esperado (el que tarda en traerse del disco las páginas requeridas).
Esto sucede con los sistemas Unix en general, así como con otros sistemas multitarea, y de ahí la justificación de adaptar éstos o crear sistemas operativos especiales.
Seguidamente vamos a dar un repaso a las distintas maneras de plantearse un sistema de tiempo real multitarea crítico, para después, en otra sección, abordar su realización en Linux.