RTLinux es un microkernel de sistema operativo en tiempo real en tiempo real (RTOS) que ejecuta todo el sistema operativo Linux como un proceso totalmente preventivo . La propiedad dura en tiempo real hace posible controlar robots, sistemas de adquisición de datos, plantas de fabricación y otros instrumentos y máquinas sensibles al tiempo desde aplicaciones RTLinux. A pesar del nombre similar, no está relacionado con el proyecto Real-Time Linux de la Fundación Linux . [1]
Autor (es) original (es) | Víctor Yodaiken, Michael Barabanov |
---|---|
Desarrollador (es) | FSMLabs, Wind River Systems |
Escrito en | C |
Sistema operativo | Linux |
Disponible en | inglés |
Tipo | Núcleo |
Licencia | GPL2 |
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. Wind River Systems adquirió la tecnología integrada FSMLabs en febrero de 2007 y puso a disposición una versión como Wind River Real-Time Core para Wind River Linux . A partir de agosto de 2011, Wind River ha descontinuado la línea de productos Wind River Real-Time Core, terminando efectivamente el soporte comercial para el producto RTLinux.
Fondo
El objetivo clave del diseño de RTLinux era agregar capacidades en tiempo real a un sistema operativo básico para facilitar el desarrollo de programas de control complejos con ambas capacidades. [2] [3] Por ejemplo, uno podría querer desarrollar un controlador de motor en tiempo real que utiliza una base de datos de productos básicos y exporta una interfaz de operador web. En lugar de intentar construir un único sistema operativo que pudiera admitir capacidades en tiempo real y no en tiempo real, RTLinux fue diseñado para compartir un dispositivo informático entre un sistema operativo en tiempo real y en tiempo no real para que (1) el El sistema operativo en tiempo real nunca podría ser bloqueado de la ejecución por el sistema operativo en tiempo no real y (2) los componentes que se ejecutan en los dos entornos diferentes podrían compartir datos fácilmente. Como su nombre lo indica, RTLinux fue diseñado originalmente para usar Linux como sistema en tiempo no real [4] pero eventualmente evolucionó para que el kernel en tiempo real RTCore pudiera ejecutarse con Linux o BSD UNIX .
Multi-Environment Real-Time (MERT) fue el primer ejemplo de un sistema operativo en tiempo real que coexiste con un sistema UNIX. MERT se basó en técnicas de virtualización tradicionales: el kernel en tiempo real era el sistema operativo host (o hipervisor ) y Bell Systems UNIX era el invitado . RTLinux fue un intento de actualizar el concepto MERT a la era de las PC y al hardware básico. También fue un intento de superar los límites de rendimiento de MERT, en particular la sobrecarga introducida por la virtualización.
La técnica solo se utilizó para virtualizar el control de interrupciones del invitado. Este método permitió que el kernel en tiempo real convirtiera el sistema operativo invitado en un sistema que era completamente interrumpible 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 era necesario volver a compilarlos 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 en tiempo no 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 fue originalmente impulsada puramente por prioridades. El sistema operativo invitado se incorporó como la tarea de menor prioridad y esencialmente actuó como la tarea inactiva para el sistema en tiempo real. Las tareas en tiempo real se ejecutaron en modo kernel. El desarrollo posterior de RTLinux adoptó la 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 que se ejecutan dentro de los procesos invitados. En entornos de multiprocesador, los subprocesos estaban bloqueados en los núcleos del procesador y era 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 proporciona la capacidad de ejecutar tareas especiales en tiempo real y manejadores de interrupciones en la misma máquina que Linux estándar. Estas tareas y controladores se ejecutan cuando necesitan ejecutarse sin importar lo que esté haciendo Linux. El peor de los casos entre el momento en que el procesador detecta una interrupción de hardware y el momento en que un controlador de interrupciones comienza a ejecutarse es de menos de 15 microsegundos en RTLinux que se ejecuta en un x86 genérico (alrededor de 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 hardware y, a medida que el hardware mejore, RTLinux también mejorará. Standard Linux tiene un rendimiento promedio excelente e incluso puede proporcionar precisión de programación de nivel de milisegundos para tareas que utilizan las capacidades de POSIX en tiempo real. Sin embargo, Linux estándar no está diseñado para proporcionar una precisión de menos de milisegundos y garantías de tiempo confiables. RTLinux se basó en una máquina virtual liviana donde el "invitado" de Linux recibió un controlador de interrupciones virtualizado y un temporizador, y todo el resto del acceso al hardware fue directo. Desde el punto de vista del "host" en tiempo real, el kernel de Linux es un hilo. Las interrupciones necesarias para el procesamiento determinista son procesadas por el núcleo en tiempo real, mientras que otras interrupciones se reenvían a Linux, que se ejecuta con menor prioridad que los subprocesos en tiempo real. Los controladores Linux manejan casi toda E / S . Las tuberías First-In-First-Out ( FIFO ) o la memoria compartida se pueden usar para compartir datos entre el sistema operativo y RTLinux.
Objetivo
El objetivo clave del diseño de RTLinux es que el sistema sea transparente, modular y extensible. La transparencia significa que no hay cajas negras que no se puedan abrir y el costo de cualquier operación debe ser determinable. La modularidad significa que es posible omitir la funcionalidad y el gasto de esa funcionalidad si no es necesaria. Y la extensibilidad significa que los programadores deberían poder agregar módulos y adaptar el sistema a sus requisitos. El sistema RTLinux básico admite el manejo de interrupciones de alta velocidad y nada más. Tiene un programador de prioridad simple que puede ser reemplazado fácilmente por programadores más adecuados a las necesidades de alguna aplicación específica. Al desarrollar RTLinux, fue diseñado para maximizar la ventaja que obtenemos de tener Linux y sus poderosas capacidades disponibles.
Componentes principales
RTLinux está estructurado como un pequeño componente central y un conjunto de componentes opcionales. El componente central permite la instalación de manejadores de interrupciones de muy baja latencia que no pueden ser retrasados o interrumpidos por Linux mismo y algunas rutinas de control de interrupciones y sincronización de bajo nivel. Este componente principal se ha ampliado para admitir SMP y, al mismo tiempo, se ha simplificado al eliminar algunas funciones que se pueden proporcionar fuera del núcleo.
Funcionalidad
La mayor parte de la funcionalidad de RTLinux se encuentra en una colección de módulos de kernel cargables que brindan servicios opcionales y niveles de abstracción. Estos módulos incluyen:
- rtl sched: un programador de prioridad que admite una interfaz "lite POSIX" que se describe a continuación y la API RTLinux V1 original.
- rtl time - que controla los relojes del procesador y exporta una interfaz abstracta para conectar controladores a relojes.
- rtl posixio: admite la interfaz de lectura / escritura / apertura de estilo POSIX para los controladores de dispositivo.
- rtl FIFo: conecta las tareas de RT y los controladores de interrupciones a los procesos de Linux a través de una capa de dispositivo para que los procesos de Linux puedan leer / escribir en los componentes de RT.
- semáforo: un paquete contribuido por Jerry Epplin que proporciona tareas de RT que bloquean semáforos.
- Se planea que el soporte de mutex POSIX esté disponible en la próxima actualización de la versión menor de RTLinux.
- mbuff es un paquete contribuido escrito por Tomasz Motylewski para proporcionar memoria compartida entre componentes RT y procesos Linux.
Tareas en tiempo real
Las tareas en tiempo real de RTLinux se implementan como módulos del kernel similares al tipo de módulo que usa Linux para controladores, sistemas de archivos, etc. Las tareas en tiempo real tienen acceso directo al hardware y no utilizan memoria virtual. En la inicialización, una tarea (módulo) en tiempo real informa al kernel de RTLinux de su fecha límite, período y restricciones de tiempo de publicación.
Hilos
RT-Linux implementa una API POSIX para la manipulación de un hilo. Un hilo se crea llamando a la pthread_create
función. El tercer parámetro de pthread_create
es una función que contiene el código ejecutado por el hilo.
Es necesario establecer prioridades de hilo en RTLinux. Los subprocesos con prioridades más altas pueden adelantarse a los subprocesos con prioridades más bajas. Por ejemplo, podemos tener un hilo controlando un motor paso a paso. Para mover el motor con fluidez, es necesario iniciar este hilo en intervalos estrictamente regulares. Esto se puede garantizar asignando una alta prioridad a este hilo. El ejemplo threads2.c establece diferentes prioridades de hilo. La configuración de la prioridad del hilo se realiza mediante el código que se muestra a continuación:
int init_module ( vacío ) { pthread_attr_t attr ; struct sched_param param ; pthread_attr_init ( & attr ); param . sched_priority = 1 ; pthread_attr_setschedparam ( & attr , & param ); pthread_create ( & t1 , & attr , & thread_code , "este es el hilo 1" ); rtl_printf ( "Subproceso 1 iniciado \ n " ); ... }
La salida del programa es la siguiente.
Se inició el hilo 1Se inició el hilo 2Se inició el hilo 3Mensaje: este es el hilo 1Mensaje: este es el hilo 2Mensaje: este es el hilo 2Mensaje: este es el hilo 2Mensaje: este es el hilo 1Mensaje: este es el hilo 1Mensaje: este es el hilo 3Mensaje: este es el hilo 3Mensaje: este es el hilo 3
El hilo 2 tiene la prioridad más alta y el hilo 3 tiene la prioridad más baja. El primer mensaje lo imprime el subproceso de prioridad media 1 porque se inicia poco tiempo antes que el subproceso 2.
Ver también
- RTAI . RTAI comenzó como una variante de RTLinux llamada "MyRTlinux" y en versiones posteriores sus autores afirmaron que no usaban la técnica de virtualización patentada RTLinux.
- RMX (sistema operativo)
- SCHED_DEADLINE
- Xenomai
- Prevención (informática)
- Linux en sistemas integrados
- Pruebas en tiempo real
Referencias
- ^ "en tiempo real: iniciar [Linux Foundation Wiki]" . wiki.linuxfoundation.org .
- ^ "El Manifiesto RTLinux", Victor Yodaiken, Actas de la 5ª Conferencia de Linux, 1999, [1]
- ^ "Investigación de sistemas operativos baratos", Victor Yodaiken. Publicado en las actas de la primera conferencia sobre sistemas libremente redistribuibles, Cambridge MA, 1996 [2]
- ^ "Barabanov, Michael (1996)." Un sistema operativo en tiempo real basado en Linux " " (PDF) .
Fuentes
- Yodaiken, Victor (1999). "El Manifiesto RTLinux". Publicado en las actas de la 5a Conferencia de Linux
- Barabanov, Michael (1996). "Un sistema operativo en tiempo real basado en Linux"
- Yodaiken, Victor (1996). "Investigación de sistemas operativos baratos", publicada en las actas de la primera conferencia sobre sistemas libremente redistribuibles, Cambridge MA, 1996
- Dougan, Cort (2004), "Precisión y previsibilidad para Linux y RTLinuxPro", Dr. Dobbs Journal, 1 de febrero de 2004
- Yodaiken, Victor (1997), Patente de Estados Unidos 5.995.745
enlaces externos
- Artículo sobre sincronización RTLinux
- Un Linux en tiempo real . Victor Yodaiken y Michael Barabanov, Instituto de Tecnología de Nuevo México
- Artículo sobre el concepto de RT en archive.today (archivado el 28 de enero de 2013)