SuperTinyKernel RTOS ( STK ) es un sistema operativo en tiempo real (RTOS) ligero, de alto rendimiento y determinista para sistemas embebidos con recursos limitados . [ 2 ] Está implementado en C++ con un diseño orientado a objetos limpio y se distribuye bajo la licencia MIT . A diferencia de muchos RTOS tradicionales, STK se concentra exclusivamente en un planificador de hilos determinista y con prioridad, en lugar de proporcionar abstracción de periféricos, minimizando el tamaño del kernel y priorizando la precisión y la previsibilidad de la temporización.
STK no impone asignación dinámica de memoria , no depende de la biblioteca estándar de C++ para plantillas y proporciona una interfaz C completa , lo que lo hace adecuado para el desarrollo de aplicaciones críticas para la seguridad. La ausencia de asignación de memoria dinámica cumple con la regla 18-4-1 de MISRA C ++:2008. STK evita el uso agresivo de espacios de nombres, no depende de las características modernas del lenguaje C++ y busca una implementación transparente y legible en todo momento.
Programación
STK opera en dos modos fundamentales. En el modo de tiempo real flexible, las tareas cooperan cediendo voluntariamente tiempo de ejecución, y el núcleo aplica una planificación preventiva para evitar que una tarea acabe con las demás. En el modo de tiempo real estricto (HRT), las tareas son periódicas, con ventanas de ejecución garantizadas y plazos estrictos impuestos por el núcleo; cualquier violación del plazo activa una función de devolución de llamada de fallo determinista.
Las tareas pueden seguir un modelo estático, en el que todas las tareas se crean una sola vez al inicio, o un modelo dinámico, en el que las tareas pueden crearse y finalizarse en tiempo de ejecución.
Modos con y sin temporizador
STK admite dos modelos de temporizador para el cambio de contexto. En el modo predeterminado basado en ticks, un temporizador de hardware se activa a una frecuencia fija y el planificador se evalúa en cada interrupción, lo que proporciona un comportamiento simple y predecible adecuado para sistemas donde la granularidad de temporización es fija y el consumo de energía no es una preocupación principal.
En el modo sin temporizador , el kernel suprime la interrupción periódica y, en su lugar, programa el temporizador de hardware dinámicamente para que la siguiente interrupción se active precisamente en el próximo evento, como el despertar de una tarea o una fecha límite. Esto mantiene la CPU en su estado de reposo el mayor tiempo posible, lo que reduce sustancialmente el consumo de energía en sistemas alimentados por batería o con actividad poco frecuente, a la vez que se conserva la precisión temporal completa. En STK, el modo sin temporizador permite que el sistema embebido logre una planificación de ultrabajo consumo (ULP) [ 3 ] .
Estrategias de programación
STK admite todas las estrategias de planificación principales, incluyendo planificación round-robin (RR), round-robin ponderado suave (SWRR), round-robin de prioridad fija (FPRR), planificación de tasa monótona (RM), planificación de plazo monótono (DM) y planificación de plazo más antiguo primero (EDF). La implementación EDF selecciona la tarea ejecutable con el plazo restante más pequeño y es demostrablemente óptima para sistemas de un solo procesador. Tanto las implementaciones RM como DM incluyen análisis de planificabilidad del tiempo de respuesta en el peor caso (WCRT). Se pueden proporcionar estrategias de planificación personalizadas mediante la implementación de una interfaz C++ dedicada.
STK también ofrece dos estrategias de planificación de criticidad mixta patentadas disponibles bajo una licencia comercial. El planificador adaptativo de criticidad mixta (MCAS) de dos niveles divide las tareas en grupos de baja y alta criticidad, distribuye el tiempo de CPU entre ellos en una proporción configurable mediante un mecanismo de cubo de tokens y suspende automáticamente las tareas de baja criticidad cuando una tarea de alta criticidad excede su presupuesto de ejecución, reanudando el funcionamiento normal después de un período de enfriamiento configurable. La variante de cuatro niveles (MCAS4) generaliza este modelo a cuatro niveles de criticidad independientes con escalada y recuperación en cascada, y agrega un mecanismo de adaptación elástica de la participación de CPU impulsado por un estimador de presión de ejecución de promedio móvil exponencial (EMA) por grupo, también denominado promedio móvil ponderado exponencialmente (EWMA), que permite a los grupos bajo carga sostenida tomar prestada participación de CPU de vecinos de menor criticidad sin alterar las garantías de tiempo de respuesta en el peor de los casos.
Sincronización
STK proporciona una API de sincronización completa que incluye mutexes (incluida una variante recursiva y una variante lector-escritor con una política de preferencia de escritor para evitar la inanición del escritor), semáforos de conteo con una política de señalización de transferencia directa, variables de condición , objetos de eventos binarios que admiten modos de reinicio manual y automático, grupos de indicadores de eventos de 32 bits que permiten a las tareas esperar en cualquiera o en todos los indicadores de un conjunto, secciones críticas , spinlocks , una tubería FIFO tipada segura para subprocesos y una cola de mensajes de capacidad fija adecuada para cargas útiles heterogéneas. Los objetos de sincronización personalizados se pueden integrar directamente con el planificador del kernel. El soporte de sincronización es opcional y se puede omitir en tiempo de compilación, lo que hace que el compilador elimine todo el código relacionado y reduzca el consumo de memoria flash y memoria de acceso aleatorio (RAM).
Memoria
STK incluye un módulo de asignación de memoria determinista y sin fragmentación, diseñado para sistemas donde la asignación dinámica de memoria dinámica es indeseable o está prohibida por estándares de codificación como MISRA C++. Proporciona un asignador de bloques de tamaño fijo que gestiona un pool mediante una estructura de lista libre intrusiva, lo que resulta en una asignación y desasignación O(1) con una sección crítica mínima y sin fragmentación durante cualquier período de ejecución.
Almacenamiento local de subprocesos
STK proporciona almacenamiento local de subprocesos (TLS) por tarea a través de un registro de CPU dedicado. Esto permite que cada tarea mantenga un estado privado sin bloqueos ni asignación dinámica, sin sobrecarga en tiempo de ejecución más allá de la lectura o escritura de un registro.
Separación de privilegios de tarea
En los núcleos ARM Cortex-M que implementan la unidad de protección de memoria (MPU) – Cortex-M3 y posteriores – STK admite la separación de privilegios entre tareas mediante hardware. Las tareas de controlador de confianza se ejecutan en modo de hilo privilegiado con acceso completo a los periféricos, mientras que las tareas de aplicación o no confiables se ejecutan en modo no privilegiado, donde cualquier acceso directo a los registros periféricos provoca un fallo de hardware. Esto aísla las rutas de código potencialmente controladas por atacantes, como las tareas que analizan cargas útiles de red, USB o actualización de firmware, del estado crítico del hardware. Todos los servicios del kernel permanecen accesibles para las tareas no privilegiadas.
Compatibilidad con ARM TrustZone
En los núcleos ARM Cortex-M que implementan TrustZone para ARMv8-M (Cortex-M23, M33, M35P, M55, M85 y otras implementaciones de Armv8-M/Armv8.1-M), STK puede programar tareas en los entornos seguros y no seguros de la arquitectura, añadiendo un límite de aislamiento impuesto por hardware sobre el propio planificador.
STK admite dos configuraciones: un modo solo seguro, en el que el núcleo y todas las tareas programadas residen en el binario seguro, y un modo no seguro + seguro, en el que el núcleo reside en el binario seguro pero programa tareas en ambos entornos. En este último modo, las tareas no seguras solo pueden invocar servicios del núcleo a través de funciones de puerta de enlace invocables no seguras (NSC) implementadas con extensiones de seguridad de Cortex-M (CMSE), de modo que un defecto o vulneración en la aplicación no segura no puede afectar al núcleo ni a ninguna tarea o memoria del lado seguro. [ 4 ]
Compatibilidad con múltiples núcleos
STK admite microcontroladores integrados multinúcleo mediante un modelo de multiprocesamiento asimétrico (AMP), con una instancia de kernel independiente por núcleo físico. Este diseño elimina la sobrecarga de sincronización entre núcleos dentro del kernel, mantiene todas las estructuras de datos del kernel en la caché L1 del núcleo local y permite que cada núcleo opere con su propia política de planificación y dominio de temporización; por ejemplo, un núcleo puede ejecutar tareas de tiempo real estricto mientras otro gestiona la comunicación o el registro en tiempo real flexible. La comunicación entre núcleos se gestiona mediante las primitivas de sincronización descritas anteriormente, diseñadas para ser seguras en múltiples instancias de kernel.
Compatibilidad con CMSIS-RTOS2
STK proporciona una capa de compatibilidad completa con CMSIS-RTOS2 que asigna la API C estándar de ARM CMSIS-RTOS2 al kernel C++ de STK [ 5 ] . Esto permite que STK funcione como un backend RTOS listo para usar en cualquier proyecto que tenga como objetivo la interfaz CMSIS-RTOS2, incluido el código generado por STM32CubeMX, MCUXpresso y otras pilas de middleware compatibles con CMSIS, sin necesidad de modificar el código de la aplicación.
Compatibilidad con FreeRTOS
STK proporciona una capa de compatibilidad completa con FreeRTOS que asigna la API C estándar de FreeRTOS al núcleo C++ de STK. [ 6 ] Esto permite que STK funcione como un backend listo para usar en cualquier proyecto que utilice la interfaz de FreeRTOS, lo que posibilita la migración de bases de código FreeRTOS existentes a STK con cambios mínimos o nulos a nivel de aplicación.
El envoltorio cubre aproximadamente el 99 % de la superficie de la API C de FreeRTOS en todos los grupos principales de API: montón y puerto, control del kernel, gestión de tareas, colas, conjuntos de colas, semáforos y mutexes, temporizadores de software, grupos de eventos, notificaciones de tareas, almacenamiento local de subprocesos, búferes de flujo y búferes de mensajes. Internamente, el envoltorio utiliza la estrategia de planificación round-robin de prioridad fija de STK para replicar con exactitud la semántica de planificación de FreeRTOS.
Más allá de la compatibilidad con la API, el envoltorio proporciona una ruta de migración a las capacidades nativas de STK. Tras la integración, la estrategia de planificación se puede cambiar a EDF, SWRR o una variante de criticidad mixta modificando un único parámetro de plantilla, y la aplicación estricta de plazos en tiempo real, la separación de privilegios de MPU de primera clase y el emulador de desarrollo x86 estarán disponibles sin necesidad de realizar más cambios en el código de la aplicación.
Soporte de hardware
STK está diseñado para procesadores ARM Cortex-M, desde ARMv6-M hasta ARMv8.1-M (Cortex-M0 a M55), y núcleos RISC-V RV32I y RV32E, incluyendo dispositivos RAM muy pequeños que utilizan la arquitectura E base compacta. Admite coma flotante por software y por hardware. Los compiladores compatibles incluyen GCC , Clang /ARMCC 6 y versiones posteriores, e IAR EWARM 8.0 y versiones posteriores. El kernel depende únicamente de CMSIS (para arquitecturas ARM) y de una superficie mínima del BSP del fabricante del microcontrolador. STK solo requiere una arquitectura de CPU compatible y no depende de ninguna placa específica.
Desarrollo y pruebas
STK incluye un emulador de planificación x86 completo para Windows , que permite compilar, depurar y realizar pruebas unitarias del mismo código de aplicación en un PC de escritorio sin hardware físico, incluyendo la posibilidad de simular periféricos. La lógica del planificador cuenta con una cobertura de pruebas unitarias del 100%, y todas las confirmaciones se verifican con respecto a los objetivos de QEMU para cada arquitectura compatible. La actividad de planificación se puede visualizar con SEGGER SystemView.
Licencia
El sistema operativo en tiempo real SuperTinyKernel se distribuye bajo la licencia MIT , lo que permite su uso gratuito en proyectos comerciales, de código cerrado, de código abierto y académicos.
Véase también
Referencias
- ↑ "Lanzamientos de SuperTinyKernel RTOS en GitHub" . GitHub . 14 de julio de 2026.
- ↑ "SuperTinyKernel RTOS" . supertinykernel.org . Consultado el 22 de febrero de 2026 .
- ↑ "SuperTinyKernel RTOS – Planificación de energía ultrabaja" . github.com/SuperTinyKernel-RTOS/stk . Consultado el 5 de mayo de 2026 .
- ↑ "SuperTinyKernel RTOS – Soporte ARM TrustZone" . github.com/SuperTinyKernel-RTOS/stk . Consultado el 6 de julio de 2026 .
- ↑ "SuperTinyKernel RTOS – Envoltorio CMSIS-RTOS2" . github.com/SuperTinyKernel-RTOS/stk . Consultado el 29 de abril de 2026 .
- ↑ "SuperTinyKernel RTOS – Envoltorio FreeRTOS" . github.com/SuperTinyKernel-RTOS/stk . Consultado el 29 de abril de 2026 .
Enlaces externos
- Sitio web oficial
- Sistema operativo en tiempo real SuperTinyKernel en GitHub
- Sistemas operativos en tiempo real
- Sistemas operativos integrados
- Micronúcleos
- Sistemas operativos basados en microkernel
- Sistemas operativos ARM
- Sistemas operativos RISC-V
- Sistemas operativos de software libre