TinyOS es un sistema operativo integrado basado en componentes y una plataforma para dispositivos inalámbricos de bajo consumo, como los que se utilizan en redes de sensores inalámbricos (WSN), polvo inteligente , computación ubicua , redes de área personal , automatización de edificios y medidores inteligentes . Está escrito en el lenguaje de programación nesC, como un conjunto de tareas y procesos cooperativos. Comenzó como una colaboración entre la Universidad de California, Berkeley , Intel Research y Crossbow Technology , se lanzó como software libre y de código abierto bajo una licencia BSD y desde entonces ha crecido hasta convertirse en un consorcio internacional, la TinyOS Alliance.
TinyOS se ha utilizado en el espacio y se ha implementado en ESTCube-1 .
Las aplicaciones de TinyOS están escritas en el lenguaje de programación nesC , un dialecto del lenguaje C optimizado para los límites de memoria de las redes de sensores. [1] Sus herramientas complementarias se presentan principalmente en forma de interfaces Java y scripts de shell . Las bibliotecas y herramientas asociadas, como el compilador nesC y las cadenas de herramientas binutils de Atmel AVR , están escritas principalmente en C.
Los programas de TinyOS están compuestos por componentes de software , algunos de los cuales presentan abstracciones de hardware. Los componentes están conectados entre sí mediante interfaces . TinyOS proporciona interfaces y componentes para abstracciones comunes como la comunicación de paquetes, el enrutamiento, la detección, la actuación y el almacenamiento.
TinyOS es totalmente no bloqueante : tiene una pila de llamadas . Por lo tanto, todas las operaciones de entrada/salida (E/S) que duran más de unos pocos cientos de microsegundos son asincrónicas y tienen una devolución de llamada . Para permitir que el compilador nativo optimice mejor los límites de las llamadas, TinyOS usa las características de nesC para vincular estas devoluciones de llamadas, llamadas eventos, de forma estática. Si bien el no bloqueo permite a TinyOS mantener una alta concurrencia con una pila, obliga a los programadores a escribir una lógica compleja uniendo muchos controladores de eventos pequeños. Para admitir cálculos más grandes, TinyOS proporciona tareas, que son similares a una llamada a procedimiento diferido y mitades inferiores del controlador de interrupciones . Un componente de TinyOS puede publicar una tarea, que el sistema operativo programará para ejecutarse más tarde. Las tareas no son preemptivas y se ejecutan en orden de primero en entrar, primero en salir . Este modelo de concurrencia simple suele ser suficiente para aplicaciones centradas en E/S, pero su dificultad con aplicaciones con uso intensivo de CPU ha llevado al desarrollo de una biblioteca de subprocesos para el sistema operativo, llamada TOSThreads. Los subprocesos TOSThreads no reciben mantenimiento y han quedado obsoletos. [2]
El código de TinyOS está vinculado estáticamente con el código del programa y se compila en un binario pequeño mediante una cadena de herramientas GNU personalizada . Se proporcionan utilidades asociadas para completar una plataforma de desarrollo para trabajar con TinyOS.
TinyOS comenzó como un proyecto en la Universidad de California en Berkeley como parte del programa NEST de DARPA . Desde entonces, ha crecido hasta involucrar a miles de desarrolladores y usuarios académicos y comerciales de todo el mundo. (lista en orden cronológico inverso)
A partir de 2010, hay tres entornos de desarrollo integrados (IDE) disponibles para TinyOS, como complementos para Eclipse :