RTLinux es un microkernel de sistema operativo en tiempo real (RTOS) de tiempo real estricto que ejecuta todo el sistema operativo Linux como un proceso totalmente preventivo . La propiedad de tiempo real estricto permite controlar robots, sistemas de adquisición de datos, plantas de fabricación y otros instrumentos y máquinas sensibles al tiempo desde aplicaciones RTLinux. El diseño fue patentado. [1] A pesar del nombre similar, no está relacionado con el proyecto Real-Time Linux de la Linux Foundation . [2]
Rtlinux fue desarrollado por Victor Yodaiken, Michael Barabanov, Cort Dougan y otros en el Instituto de Minería y Tecnología de Nuevo México y luego como un producto comercial en FSMLABS en FSMLABS adquirido FSMLABS en febrero de 2007 e hizo una versión de Wind River River River River River River River River River River River River River River River River Core River Core para River River Linux . .
Fondo
El objetivo de diseño de RTLinux [3] era agregar capacidades en tiempo real a un sistema operativo de productos básicos para facilitar el desarrollo de programas de control complejos con ambas capacidades. Sistema operativo en tiempo real y en tiempo real de modo que ( 1 ) el sistema operativo en tiempo real nunca podría ser bloqueado de la ejecución por el sistema operativo que no es de tiempo real y (2) componentes que se ejecutan en los dos entornos diferentes podrían compartir fácilmente los datos como el nombre implica que Rtlinux estaba diseñado originalmente para usar Linux como el sistema de tiempo no real [ 6] pero finalmente evolucionó que el nombre de Rtcore se ejecuta originalmente con Boerkely .
El primer ejemplo de un sistema operativo en tiempo real coexistió con un sistema UNIX . Uced por virtualización .
En lugar de encapsular el SO invitado en una máquina virtual, RTLinux virtualizó únicamente el control de interrupciones del invitado. Este método permitió que el núcleo de tiempo real convirtiera el sistema operativo invitado en un sistema que era completamente preemptible pero que aún podía controlar directamente, por ejemplo, los dispositivos de almacenamiento. En particular, los controladores estándar para el invitado funcionaban sin modificación de la fuente, aunque necesitaban ser recompilados para usar los "ganchos" de virtualización. Véase también paravirtualización . La tubería de Unix se adaptó para permitir que los programas en tiempo real y no en tiempo real se comunicaran, aunque también se agregaron otros métodos como la memoria compartida.
Desde el punto de vista del programador, RTLinux originalmente parecía un pequeño entorno de subprocesos para tareas en tiempo real más el entorno estándar de Linux para todo lo demás. El sistema operativo en tiempo real se implementó como un módulo de kernel cargable que comenzó virtualizando el control de interrupciones del invitado y luego inició un programador en tiempo real. A las tareas se les asignaron prioridades estáticas y la programación originalmente estaba puramente impulsada por prioridades. El sistema operativo invitado se incorporó como la tarea de menor prioridad y esencialmente actuó como la tarea inactiva para el sistema de tiempo real. Las tareas en tiempo real se ejecutaban en modo kernel. El desarrollo posterior de RTLinux adoptó la Interfaz de sistema operativo portátil ( POSIX ) Interfaz de programación de aplicaciones ( API ) de subprocesos POSIX y luego permitió la creación de subprocesos en modo de usuario con subprocesos en tiempo real ejecutándose dentro de los procesos invitados. En entornos multiprocesador, los subprocesos se bloquearon en los núcleos del procesador y fue posible evitar que el subproceso invitado se ejecutara en el núcleo designado (reservando efectivamente los núcleos solo para el procesamiento en tiempo real).
Implementación
RTLinux ofrece la posibilidad de ejecutar tareas especiales en tiempo real y controladores de interrupciones en la misma máquina que Linux estándar. Estas tareas y controladores se ejecutan cuando es necesario hacerlo, sin importar lo que esté haciendo Linux. El peor tiempo posible entre el momento en que el procesador detecta una interrupción de hardware y el momento en que comienza a ejecutarse un controlador de interrupciones es inferior a 15 microsegundos en RTLinux que se ejecuta en un x86 genérico (circa 2000). Una tarea periódica de RTLinux se ejecuta dentro de los 35 microsegundos de su tiempo programado en el mismo hardware. Estos tiempos están limitados por el hardware y, a medida que el hardware mejore, RTLinux también mejorará. Linux estándar tiene un rendimiento promedio excelente e incluso puede proporcionar una precisión de programación de nivel de milisegundos para tareas que utilizan las capacidades de tiempo real suaves de POSIX. Sin embargo, Linux estándar no está diseñado para proporcionar precisión de submilisegundos y garantías de tiempo confiables. RTLinux se basaba en una máquina virtual liviana donde al "invitado" Linux se le proporcionaba un controlador de interrupciones y un temporizador virtualizados, y el resto del acceso al hardware era directo. Desde el punto de vista del "host" en tiempo real, el núcleo de Linux es un subproceso. Las interrupciones necesarias para el procesamiento determinista son procesadas por el núcleo en tiempo real, mientras que otras interrupciones se envían a Linux, que se ejecuta con una prioridad menor que los subprocesos en tiempo real. Los controladores de Linux manejan casi toda la E/S . Se pueden usar canales FIFO (First-In-First-Out ) o memoria compartida para compartir datos entre el sistema operativo y RTLinux.
Objetivo
El objetivo de diseño de RTLinux es que el sistema debe ser transparente, modular y extensible [ Cita necesaria ] . El manejo de la interrupción de la velocidad y no más.
Componentes principales
Rtlinux está estructurado como un componente central pequeño y un conjunto de componentes opcionales.
Funciones
La mayoría de las funciones de RTLinux se encuentran en un conjunto de módulos de kernel cargables que proporcionan servicios opcionales y niveles de abstracción. Estos módulos incluyen:
- rtl sched: un programador de prioridades que admite tanto una interfaz "POSIX liviana" descrita a continuación como la API RTLinux V1 original.
- tiempo rtl: que controla los relojes del procesador y exporta una interfaz abstracta para conectar controladores a los relojes.
- RTL POSIXIO - Admite la interfaz de lectura/escritura/escritura de POSIX a los controladores de dispositivos.
- RTL FIFO: conecta tareas RT e interrumpe los manejadores a los procesos de Linux a través de una capa de dispositivo para que los procesos de Linux puedan leer/escribir en componentes RT.
- semáforo: un paquete contribuido por Jerry Epplin que proporciona a las tareas RT semáforos de bloqueo.
- Se planea que el soporte de mutex POSIX esté disponible en la próxima actualización de versión menor de RTLinux.
- MBuff es un paquete contribuido escrito por Tomasz Motylewski para proporcionar memoria compartida entre los componentes RT y los procesos de Linux.
Tareas en tiempo real
Las tareas en tiempo real de RTLinux se implementan como módulos del núcleo similares al tipo de módulo que Linux utiliza para controladores, sistemas de archivos, etc. Las tareas en tiempo real tienen acceso directo al hardware y no utilizan memoria virtual. Al inicializarse, una tarea (módulo) en tiempo real informa al núcleo de RTLinux sobre su fecha límite, período y restricciones de tiempo de lanzamiento.
Trapos
RT-Linux implementa una API POSIX para la manipulación de un subproceso. Un subproceso se crea llamando a la pthread_createfunción. El tercer parámetro pthread_createes una función que contiene el código ejecutado por el subproceso.
Es necesario establecer prioridades de hilo en Rtlinux.
int init_module ( void ) { pthread_attr_t atributo ; struct sched_param parámetro ; pthread_attr_init ( & atributo); parámetro.sched_priority = 1; pthread_attr_setschedparam(& atributo , & parámetro ) ; pthread_create ( & t1 , & atributo , & thread_code , " este es el hilo 1 " ) ; rtl_printf ( " El hilo 1 se inició \n " ); /* ... */ }
La salida del programa es la siguiente.
Hilo 1 iniciado Hilo 2 iniciado Hilo 3 iniciado Mensaje: este es el hilo 1 Mensaje: este es el hilo 2 Mensaje: este es el hilo 2 Mensaje: este es el hilo 2 Mensaje: este es el hilo 1 Mensaje: este es el hilo 1 Mensaje: este es el hilo 3 Mensaje: este es el hilo 3 Mensaje: este es el hilo 3
El hilo 2 tiene la máxima prioridad y el hilo 3 tiene la mínima. El primer mensaje lo imprime el hilo 1 de prioridad media porque se inicia poco tiempo antes que el hilo 2.
Véase también
- RTAI .
- RMX (sistema operativo)
- FECHA LÍMITE PROGRAMADA
- Xenomai
- Prelación (informática)
- Linux en sistemas integrados
- Pruebas en tiempo real
Referencias
- ^ Yodaiken, Victor. "Añadir soporte en tiempo real a sistemas operativos de propósito general". USPTO . Consultado el 19 de enero de 2022 .
- ^ "tiempo real:start [Wiki de la Fundación Linux]". wiki.linuxfoundation.org .
- ^ Barabanov, Michael. Presentación de RTLinux (informe). Linux Journal. CiteSeerX 10.1.1.302.3221 .
- ^ Yodaiken , Victor (1999) .
- ^ Yodaiken , Victor ( 1996) .
- ^ Barabanov, Michael (1996). Un sistema operativo en tiempo real basado en Linux (PDF) (MS).
Fuentes
- Dougan, Cort (2004), "Precisión y previsibilidad para Linux y RTLinuxPro", Dr. Dobbs Journal, 1 de febrero de 2004
- Yodaiken, Victor (1997), Patente de EE.UU. 5.995.745
Enlaces externos
- Artículo sobre la sincronización con RTLinux
- Un Linux en tiempo real Archivado el 18 de marzo de 2007 en Wayback Machine . Victor Yodaiken y Michael Barabanov, Instituto Tecnológico de Nuevo México
- Artículo sobre el concepto RT en Archive.Today (archivado 2013-01-28)