# TinyOS

TinyOS ist ein Open-Source-Betriebssystem für drahtlose Sensornetze, dessen Großteil unter der BSD-Lizenz steht.

## Entwicklung

TinyOS wurde an der Universität Berkeley (Kalifornien, USA) von David Culler entwickelt und später vor allem durch die Open-Source Community weiterentwickelt. Mittlerweile wurde eine Allianz, ähnlich der ZigBee-Alliance, gebildet, der Privatpersonen, Organisationen und Unternehmen aus Forschung, dem Dienstleistungssektor und der Industrie angehören. TinyOS hat eine große Verbreitung in der Forschungsgemeinde.

## Versionen und Komponenten

Mittlerweile existiert es in zwei stabilen Versionen, TinyOS 1.1.15 und TinyOS 2.0.1, wobei Version 2.x komplett überarbeitet wurde und Nachteile des Vorgängers eliminiert hat. Diese Versionen sind zueinander nicht kompatibel, d. h. bestehende Anwendungen müssen überarbeitet werden.
TinyOS bietet von Haus aus neben einbindbaren Komponenten (Kommunikation über UISP, Timer, Scheduler etc.) und den bereitgestellten nesC-Compiler/-Linker einen Hardware- und Netzwerksimulator (TOSSIM), Hilfsmittel zur Sourcecode-Dokumentation und -Visualisierung (Graphviz), sowie Beispielapplikationen in Java wie etwa „SerialForwarder“ oder das Programm „Surge“ zur Netzwerkverbindungsanalyse.

## Technik

TinyOS nutzt eine komponentenbasierte Architektur (component-based architecture) und ein ereignisbasiertes Ausführungsmodell (event-driven concurrency model). Gleichzeitig stellt es auch eine Entwicklungsumgebung und Programmierplattform speziell für Hardwaresysteme mit knappen Ressourcen in Bezug auf Speicher, Rechenleistung und Energieverwendung dar, welche autonom und sicher über Zeiträume von Monaten oder Jahren zuverlässig funktionieren müssen.
Die „Philosophie“ des Betriebssystems ist es, die anstehenden Arbeiten so schnell wie möglich abzuarbeiten, um danach die Hardware in den Schlafmodus zu schicken. Die Umsetzung dieses Konzepts erreicht TinyOS durch eine ereignisgesteuerte Ausführung der in Komponenten (Components) gegliederten Programmteile, die über zweiphasige Operationen aufgerufen werden und somit keinen zusätzlichen Stack für das Zwischenspeichern benötigen.
Ursprünglich wurde TinyOS in der Programmiersprache C geschrieben. Doch das besondere Anwendungsgebiet machte es notwendig, ein neues Programmierkonzept zu entwerfen, welches das Betriebssystem optimal unterstützen konnte. Zu diesem Zweck wurde die Programmiersprache nesC geschaffen, welche wiederum so maßgeschneidert für die Programmierung von Sensorknoten entwickelt worden ist, dass TinyOS nochmals überarbeitet und komplett in nesC reimplementiert wurde. Somit wird die besondere Betriebssystem-Architektur optimal unterstützt.
Für die Anwendungsentwicklung werden einzelne Komponenten (Components) für das jeweilige Anwendungsgebiet der Sensorknoten miteinander verknüpft und bilden somit im Endeffekt eine komplette Applikation, die über die UISP-Schnittstelle oder mittels Over-the-air-programming (OTAP) auf die Zielhardware aufgespielt wird. Elementare Components kapseln Hardwarekomponenten wie etwa die Funkschnittstelle oder den Timer und bilden somit in einem hierarchischen Komponentenmodell die unterste Ebene, die als Hardware Abstraction Layer (HAL) bezeichnet wird. In TinyOS bzw. nesC gibt es zwei Arten von Components: Modules implementieren die einzelnen Funktionen der Schnittstellen (zwischen den Components) und Configurations beschreiben mit Hilfe der Schnittstellen wie die einzelnen Components miteinander verbunden sind.