Rodos (Betriebssystem)
Rodos | |
---|---|
Entwickler | Universität Würzburg - Informatik 8 |
Lizenz(en) | Apache-Lizenz Version 2.0 |
Sonstiges | Programmiert in C, C++, Assemblersprache |
Information & Download (Gitlab) |
Rodos (Realtime Onboard Dependable Operating System) ist ein Echtzeitbetriebssystem für eingebettete Systeme und wurde für Anwendungen entwickelt, die hohe Anforderungen an die Zuverlässigkeit haben.
Geschichte
Rodos wurde am Deutschen Zentrum für Luft- und Raumfahrt (DLR) entwickelt und ging aus dem Betriebssystem BOSS hervor. Es findet unter anderem im aktuellen Mikro-Satellitenprogramm des DLR Verwendung. Das System läuft auf den im Orbit befindlichen Satelliten TET-1 und BIROS, es wurde außerdem für BeeSat 1 und 2 verwendet.[1]
Weiterentwickelt wird Rodos aktuell sowohl vom DLR als auch vom Lehrstuhl Informationstechnik für Luft- und Raumfahrt der Julius-Maximilians-Universität Würzburg.
Merkmale
Rodos ist als Framework mit einem mehrschichtigen Aufbau realisiert. Die unterste Schicht bildet die direkte Ansteuerung der Hardware, auf der als zweite Schicht die Middleware aufsetzt. Aufgabe der Middleware ist es, die Kommunikation zwischen verschiedenen Anwendungen und Komponenten der höchsten Schicht zu ermöglichen. Geschrieben wurde Rodos objektorientiert in C++, ergänzt durch hardwarespezifischen C- und Assembler-Code.
Rodos ermöglicht es, auf einfache Art Echtzeitanwendungen für verschiedene, variable Plattformen zu schreiben. Ein besonderes Augenmerk wurde bei der Entwicklung auf die möglichst einfache Umsetzung der Komponenten des Betriebssystems gesetzt. Unnötige Komplexität sollte vermieden und dem Anwender ein unkompliziertes, übersichtliches System zur Verfügung gestellt werden. Rodos unterstützt für Echtzeitbetriebssysteme typische Features, wie Threads und Semaphoren.
Zu den Besonderheiten gehören:
- objektorientiertes C++-Interface
- schnelles Booten
- Prioritäten-basiertes, präemptives Multitasking
- Zeitmanagement (als zentraler Punkt)
- Thread-sichere Kommunikation und Synchronisation
- Ereignisverteilung
Beispiele
Hallo Welt
Das Standard-Beispiel-Programm Hallo Welt sieht in Rodos wie folgt aus:
#include "rodos.h"
class HelloWorld : public StaticThread<> {
void run(){
PRINTF("Hello World!\n");
}
} helloworld;
Wie man sehen kann, ist die Umsetzung sehr unkompliziert. Die Klasse Thread wird durch eine spezielle run-Methode erweitert, die ihrerseits die Zeichenkette "Hello World!" mittels der Funktion PRINTF ausgibt. Alle Bestandteile, die der Nutzer zur Entwicklung von Rodos-Software benötigt, werden durch die Header-Datei rodos.h eingebunden.
Threads
Rodos nutzt fair priority controlled preemptive scheduling. Der Thread mit der höchsten Priorität kommt zur Ausführung, eventuell bereits laufende Threads werden pausiert (präemptives Multitasking). Besitzen mehrere Threads dieselbe Priorität und sollen ausgeführt werden, erhalten diese abwechselnd ein festes Rechenzeitintervall.
Beispiel:
#include <rodos.h>
class HighPriorityThread: public StaticThread<> {
public:
HighPriorityThread() : StaticThread("HiPriority", 25) {
}
void run() {
while(1) {
PRINTF("*");
suspendCallerUntil(NOW() + 1*SECONDS);
}
}
} highprio;
class LowPriorityThread: public StaticThread<> {
public:
LowPriorityThread() : StaticThread("LowPriority", 10) {
}
void run() {
while(1) {
PRINTF(".");
}
}
} lowprio;
Hier gibt der Thread LowPriorityThread konstant das Zeichen "." aus und wird in Sekundenintervallen durch den Thread HighPriorityThread und die Ausgabe von "*" unterbrochen.
Topics
Zur Kommunikation zwischen verschiedenen Threads, aber auch über Gateways zwischen verschiedenen Systemen benutzt Rodos Topics. Ein Topic stellt eine Nachricht einer bestimmten Art dar, für deren Typ sich ein Thread als Empfänger (Subscriber) registrieren kann. Ein Thread kann auch als Sender (Publisher) einer solchen Nachricht fungieren. Das Nachrichtensystem ist also nach dem Publisher-Subscriber-Aufbau realisiert. Hier ein einfaches Beispiel mit einem Publisher und einem Subscriber, die beide das Topic counter1, welches nur einen Long-Integer enthält, verwenden.
Beispiel:
#include <rodos.h>
Topic<long> counter1(-1, "counter1");
class MyPublisher : public StaticThread<> {
public:
MyPublisher() : StaticThread("SenderSimple") { }
void run () {
long cnt = 0;
TIME_LOOP(3*SECONDS, 3*SECONDS) {
PRINTF("Publish: %ld\n", ++cnt);
counter1.publish(cnt);
}
}
} publisher;
class MySubscriber : public SubscriberReceiver<long> {
public:
MySubscriber() : SubscriberReceiver<long>(counter1) { }
void put(long &data) {
PRINTF("Received: %ld\n", data);
}
}subscriber;
Der Publisher-Thread sendet hier in 3-Sekunden-Intervallen einen ansteigenden Zählerstand, während der Subscriber den so empfangenen Integer einfach ausgibt.
Unterstützte Architekturen
Unterstützte Prozessor-Architekturen:
- Mikrocontroller mit ARM7-Architektur
- Atmel AVR32
- STM32 32-bit Arm Cortex-M3
- Xilinx PowerPC PPC405
- Raspberry Pi
Des Weiteren kann Rodos als Gastsystem auf andere Betriebssysteme aufsetzen:
Weblinks
Einzelnachweise
- ↑ Partner: University of Wuerzburg Planetary Transportation Systems GmbH