Hace unos días hice una introducción sobre ROS, un sistema operativo para robots, aunque no es exactamente un SO como se entiende en la computación, sino más bien un frameworks para los desarrolladores de robótica. Ahora le toca el turno a RTOS, que tampoco es un sistema operativo, sino que es un tipo de sistema operativo muy particular.
Estos sistemas operativos son muy importantes para los dispositivos embebidos o empotrados de pequeña capacidad, ya que suelen estar gestionados por éstos. Además, también son importantes en aplicaciones industriales, para el control de multitud de procesos.
¿Qué es un RTOS?
Un RTOS (Real-Time Operating System) es, como su propio nombre indica, un sistema operativo en tiempo real. Esto difiere de los sistemas operativos de tiempo compartido en que se trabaja en un entorno donde se conocen los resultados de salida en función de las entradas del sistema, y se dan en un tiempo conocido. Por tanto, son más predecibles y estables para controlar tareas específicas, y los procesos suelen residir de forma permanente en memoria (en los de tiempo compartido el planificador va cargando y descargando de la memoria principal según sea necesario).
Por ejemplo, imagina un RTOS empleado para una máquina industrial en una cadena de montaje. Se encargaría de ejecutar un software para taladrar piezas cada cierto tiempo. Si el planificador de tareas del sistema operativo no trabajase en tiempo real, es probable que se ejecutase en tiempos dispares, lo que haría que las perforaciones no se hiciesen a tiempo… Al ser en tiempo real, el RTOS puede terminar la ejecución del programa en X tiempo y volver a repetir su ejecución para realizar todos los taladrados a tiempo.
Por supuesto, al ser un sistema operativo, también comparte los fundamentos de cualquier otro SO, es decir, es un sistema capaz de gestionar el hardware y proveer de una serie de servicios a las apps.
Tipos de RTOS
Existen varios tipos de sistemas operativos en tiempo real o RTOS:
- Hard Real-Time: es un sistema operativo de tiempo real estricto, donde sus procesos se deben ejecutar en un tiempo concreto.
- Soft Real Time: un tiempo real flexible, donde al ejecutar los procesos se pueden perder instantes casi despreciables algunas veces, es decir, no es tan estricto como el anterior. Además, están diseñados para que esos transcursos de tiempo sean cada vez menores.
- Firm Real Time: los SSOO de tiempo real firme son otro tipo en los que se pueden perder tiempos, pero las respuestas tardías no tendrían validez.
Aplicaciones de un RTOS
Un RTOS es un sistema sencillo, ligero, y que se utiliza para sistemas limitados o simples, como los dispositivos empotrados o embebidos. Esto los hace perfectos para aplicaciones como:
- Control industrial.
- Conmutación telefónica.
- Control de vuelo.
- Simulaciones en tiempo real.
- Aplicaciones militares.
- Electrodomésticos.
- Dispositivos de electrónica de consumo básicos.
- Robots.
- Etc.
Características de los RTOS
Los RTOS tienen una serie de particularidades que son los que les dan esas ventajas sobre el resto para esas tareas de gestión sencillas. Para comprenderlos mejor, es necesario conocer una serie de conceptos básicos:
- Proceso o tarea: es un subprograma que se ejecuta en paralelo con el RTOS. Este proceso puede realizar multitud de tareas, desde controlar un periférico, hasta realizar otras acciones.
- Trabajo: se denomina así al tiempo que tarda en ejecutarse un proceso.
- Planificador: el planificador del RTOS permite gestionar las prioridades y los tiempos de los procesos ejecutados. Y existen dos tipos fundamentales:
- Cooperativo: llama primero a los procesos de más prioridad y cuando el proceso termina llama a otro o, si el proceso tarda más de lo previsto, lo elimina y llama al siguiente.
- Expropiativo: cada cierto tiempo llama automáticamente a un proceso, pero eso podría llevar a que se puedan producir errores por una mala prioridad en los procesos o dependencias. Para evitar esos problemas se introduce el concepto de semáforos.
- Semáforos: funcionan de forma similar a los de tráfico, controlando cuándo un proceso está en proceso y paralizando la entrada del resto de procesos y, cuando deja los recursos libres, da «luz verde» para que el siguiente entre. Algunos RTOS tienen varios semáforos, cada uno específico para un recurso compartido.
- Colas: sirven para comunicar entre procesos, como un buffer, por ejemplo para almacenamiento temporal de datos o cuando hay varios elementos que devuelven datos a un solo receptor.
- Interrupciones: funcionan como las de los sistemas operativos de tiempo compartido, pero en un RTOS hay algunas particularidades. Este tipo de interrupciones se usan para gestión del tiempo mediante un controlador.
Ejemplos de RTOS
Si te preguntas qué sistemas operativos RTOS existen, lo cierto es que hay un gran número, tanto propietarios como de código abierto:
- Arm OS: un sistema operativo diseñado para Cortex-M, Cortex-R, Cortex-A, y licenciado bajo licencia Apache 2.0.
- eCos: bajo licencia GNU GPL modificada, es otro sistema operativo de código abierto para ARM-XScale-Cortex-M, CalmRISC, 680×0-ColdFire, fr30, FR-V, H8, IA-32, MIPS, MN10300, OpenRISC, PowerPC, SPARC, SuperH, y V8xx.
- embOS: es un sistema RTOS propietario, para aplicaciones IoT y embebidos con arquitecturas ARM7/9/11, ARM Cortex-A/R/M, AVR, AVR32, C16x, CR16C, ColdFire, H8, HCS12, M16C, M32C, MSP430, NIOS2, PIC18/24/32, R32C, R8C, RISC-V, RL78, RH850, RX100/200/600/700, RZ, SH2A, STM8, ST7, V850, 78K0, y 8051.
- FreeRTOS: bajo licencia open-source MIT, está pensado para embebidos con arquitecturas ARM, AVR, AVR32, ColdFire, ESP32, HCS12, IA-32, Cortex-M3-M4-M7, Infineon XMC4000, MicroBlaze, MSP430, PIC, PIC32, Renesas H8/S, RISC-V, RX100-200-600-700, 8052, STM32, TriCore, y EFM32.
- Fuchsia: es el famoso sistema de código abierto creado por Google y diseñado para funcionar tanto en x86-64 como en ARM64.
- KolibriOS: un sistema RTOS Para x86 bajo licencia GNU GPL libre.
- LynxOS: otro RTOS, pero este propietario, y para arquitecturas tan dispares como Motorola 68010, x86/IA-32, ARM, Freescale PowerPC, PowerPC 970, y LEON. Además, cuenta con certificación POSIX.
- Neutrino: un sistema de tiempo real propietario y para ARM, MIPS, PPC, SH, x86, y XScale.
- Phoenix-RTOS: bajo licencia BSD permisiva, con soporte para arquitecturas ARMv7 Cortex-M, ARMv7 Cortex-A, IA-32, y RISC-V.
- QNX: es propietario, y fue muy popular. Se ha diseñado para dar soporte a x86-64, ARM32, ARM64, y anteriormente a MIPS, PowerPC, SH-4, StrongARM, XScale.
- Linux: aunque generalmente se usa en modo de tiempo compartido, el kernel también puede trabajar como aproximación a un RTOS para embebidos.
- Windows CE y Windows 10 IoT: Microsoft también cuenta con estas versiones en tiempo real de su sistema operativo propietario.
- Zephyr: bajo la licencia Apache 2.0 también está este otro RTOS de código abierto para ARM (Cortex-M, Cortex-R y Cortex-A Series), x86, x86-64, ARC, RISC-V, Nios II, Xtensa, y SPARC.