Wikipedia · einfach zusammengefasst · Stand
Rodos (Betriebssystem)
Rodos (Realtime Onboard Dependable Operating System) ist ein Echtzeitbetriebssystem für eingebettete Systeme und wurde für Anwendungen entwickelt, die hohe …
Inhalt6 Abschnitte
Grundidee und Einsatz
Rodos steht für „Realtime Onboard Dependable Operating System“ und ist ein Echtzeitbetriebssystem für eingebettete Systeme. Es wurde für Anwendungen entwickelt, die hohe Anforderungen an Zuverlässigkeit, Fehlertoleranz und Echtzeitfähigkeit stellen. Das System wird von der Universität Würzburg – Informatik 8 – weiterentwickelt, steht unter der Apache-Lizenz Version 2.0 und ist als Open-Source-Projekt verfügbar. Rodos ist in C, C++ und Assemblersprache programmiert.
Neben der Raumfahrt wird Rodos in der Forschung und Entwicklung für autonome Systeme, Robotik und industrielle Automatisierung eingesetzt. Durch seine Plattformunabhängigkeit können Echtzeitanwendungen flexibel auf unterschiedlichen Hardwareplattformen entwickelt werden.
Entwicklung und Anwendungen
Rodos wurde am Deutschen Zentrum für Luft- und Raumfahrt (DLR) entwickelt und basiert auf dem Betriebssystem BOSS. Es wird unter anderem im Mikro-Satellitenprogramm des DLR eingesetzt. Zu den bekannten Anwendungen gehören die Satelliten TET-1 und BIROS, die beide erfolgreich im Orbit betrieben werden. Außerdem wurde Rodos bei den Kleinsatelliten BeeSat 1 und BeeSat 2 verwendet.
Die Weiterentwicklung erfolgt aktuell in enger Zusammenarbeit zwischen dem DLR und dem Lehrstuhl Informationstechnik für Luft- und Raumfahrt der Julius-Maximilians-Universität Würzburg, insbesondere in der Abteilung für Luft- und Raumfahrtinformatik.
Mehrschichtige Architektur
Rodos ist als Framework mit einer mehrschichtigen Architektur aufgebaut:
- Die Hardware-Schicht bildet die unterste Ebene. Sie steuert die Hardware direkt an.
- Die Middleware-Schicht ermöglicht die Kommunikation zwischen Anwendungen und Systemkomponenten.
- Die Anwendungsschicht unterstützt die Entwicklung spezifischer Anwendungen.
Das Betriebssystem wurde objektorientiert in C++ entwickelt und durch hardwarespezifischen C- und Assembler-Code ergänzt. Ein wichtiges Entwicklungsziel war, unnötige Komplexität zu vermeiden und ein einfach nutzbares, übersichtliches System bereitzustellen.
Rodos unterstützt unter anderem Mikrocontroller mit ARM7-Architektur, Atmel AVR32, STM32 mit 32-bit ARM Cortex-M3, Xilinx PowerPC PPC405, Raspberry Pi und RISC-V. Es kann außerdem als Gastsystem auf Linux, FreeRTOS, RTEMS, Windows oder TinyOS aufsetzen.
Zentrale Merkmale
Rodos stellt typische Funktionen von Echtzeitsystemen bereit, darunter Threads und Semaphoren. Threads sind ausführbare Programmteile; Semaphore unterstützen die Synchronisation. Weitere wichtige Merkmale sind:
- ein objektorientiertes C++-Interface zur Vereinfachung der Entwicklung,
- schnelles Booten für zeitkritische Anwendungen,
- prioritätenbasiertes, präemptives Multitasking,
- umfassendes Zeitmanagement,
- threadsichere Kommunikation und Synchronisation,
- effiziente Verteilung von Ereignissen.
Beim präemptiven Multitasking kann ein Thread durch einen wichtigeren Thread unterbrochen werden. Zusammen mit dem Zeitmanagement ermöglicht dies plattformunabhängige Echtzeitanwendungen, die flexibel und zuverlässig arbeiten.
Beispiel: Hallo Welt
Ein einfaches Rodos-Programm bindet mit #include "rodos.h" die benötigten Bestandteile ein. Eine Klasse HelloWorld wird von StaticThread<> abgeleitet und definiert eine run()-Methode. In dieser Methode gibt PRINTF("Hello World!\\n") die Zeichenkette „Hello World!“ aus.
Die spezielle run-Methode erweitert die Thread-Klasse um den auszuführenden Programmcode. Für die Entwicklung einer Rodos-Software benötigt der Nutzer lediglich die Header-Datei rodos.h, die alle notwendigen Bestandteile einbindet.
Threads und Topics
Rodos verwendet ein „fair priority controlled preemptive scheduling“. Dabei wird immer der Thread mit der höchsten Priorität ausgeführt. Laufende Threads mit niedrigerer Priorität werden pausiert. Haben mehrere Threads dieselbe Priorität, werden sie nacheinander in festen Zeitscheiben ausgeführt.
Im Beispiel besitzt HighPriorityThread die Priorität 25 und LowPriorityThread die Priorität 10. Der Thread mit der niedrigeren Priorität gibt fortlaufend „.“ aus. Der höher priorisierte Thread gibt in Sekundenintervallen „*“ aus und unterbricht dafür den niedrig priorisierten Thread. Die Wartezeit wird mit suspendCallerUntil(NOW() + 1*SECONDS) festgelegt.
Für die Kommunikation zwischen Threads oder zwischen Systemen über Gateways nutzt Rodos Topics. Ein Topic ist eine Nachricht eines bestimmten Typs. Threads können sich als Empfänger (Subscriber) registrieren oder als Sender (Publisher) auftreten. Dieses Publisher-Subscriber-Modell ermöglicht eine flexible Nachrichtenverarbeitung.
Im Beispiel wird Topic<long> counter1(-1, "counter1") verwendet. Der Publisher erhöht einen Zähler und veröffentlicht ihn mit counter1.publish(cnt) in 3-Sekunden-Intervallen. Der Subscriber empfängt den Long-Integer und gibt den erhaltenen Zählerstand direkt aus.