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
[Bearbeiten | Quelltext bearbeiten]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. Prominente Anwendungen umfassen die Satelliten TET-1 und BIROS, die beide erfolgreich im Orbit betrieben werden. Zudem wurde Rodos bei den Kleinsatelliten BeeSat 1 und 2 eingesetzt.[1]
Die Weiterentwicklung von Rodos erfolgt aktuell in enger Zusammenarbeit zwischen dem DLR und dem Lehrstuhl Informationstechnik für Luft- und Raumfahrt an der Julius-Maximilians-Universität Würzburg, insbesondere in der Abteilung für Luft- und Raumfahrtinformatik.
Architektur
[Bearbeiten | Quelltext bearbeiten]Rodos ist als Framework mit einer mehrschichtigen Architektur aufgebaut. Die unterste Ebene bildet die Hardware-Schicht, die für die direkte Ansteuerung der Hardware zuständig ist. Darüber liegt die Middleware-Schicht, die die Kommunikation zwischen verschiedenen Anwendungen und Systemkomponenten ermöglicht. Die oberste Schicht ist die Anwendungsschicht, die die Implementierung spezifischer Anwendungen unterstützt. Das Betriebssystem wurde objektorientiert in C++ entwickelt und durch hardwarespezifischen C- und Assembler-Code ergänzt. Ziel der Entwicklung war es, unnötige Komplexität zu vermeiden und ein einfach nutzbares sowie übersichtliches System bereitzustellen.
Das System unterstützt eine Vielzahl von Prozessorarchitekturen, darunter:
- Mikrocontroller mit ARM7-Architektur
- Atmel AVR32
- STM32 mit 32-bit ARM Cortex-M3
- Xilinx PowerPC PPC405
- Raspberry Pi
Darüber hinaus kann Rodos auch als Gastsystem auf andere Betriebssysteme aufsetzen:
- Linux
- FreeRTOS
- RTEMS
- Windows
- TinyOS
Merkmale
[Bearbeiten | Quelltext bearbeiten]Rodos unterstützt die für Echtzeitsysteme typischen Features wie Threads und Semaphoren und bietet darüber hinaus eine Reihe weiterer entscheidender Funktionen. Dazu gehören ein objektorientiertes C++-Interface, das die Entwicklung erleichtert, sowie ein schnelles Booten, das insbesondere für zeitkritische Anwendungen von Bedeutung ist. Das System setzt auf prioritätenbasiertes, präemptives Multitasking und ein umfassendes Zeitmanagement, das als zentraler Aspekt des Betriebssystems dient. Zudem ermöglicht Rodos eine Thread-sichere Kommunikation und Synchronisation sowie eine effiziente Verteilung von Ereignissen. Dank dieser Eigenschaften ist es möglich, mit Rodos plattformunabhängige Echtzeitanwendungen zu entwickeln, die sowohl flexibel als auch zuverlässig sind.
Neben der Raumfahrt wird Rodos auch in der Forschung und Entwicklung für autonome Systeme, Robotik und industrielle Automatisierung verwendet. Das Betriebssystem eignet sich ideal für Anwendungen, bei denen eine hohe Fehlertoleranz und Echtzeitfähigkeit erforderlich sind. Rodos ist als Open-Source-Projekt verfügbar, was es Entwicklern und Forschern ermöglicht, das System flexibel anzupassen und weiterzuentwickeln.
Beispiele
[Bearbeiten | Quelltext bearbeiten]Hallo Welt
[Bearbeiten | Quelltext bearbeiten]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;
Die Klasse Thread wird in Rodos durch eine spezielle run-Methode erweitert. Diese Methode kann die Zeichenkette „Hello World!“ über die Funktion PRINTF ausgeben. Um eine Rodos-Software zu entwickeln, benötigt der Nutzer lediglich die Header-Datei rodos.h, die alle notwendigen Bestandteile einbindet.
Threads
[Bearbeiten | Quelltext bearbeiten]Rodos verwendet ein fair priority controlled preemptive scheduling. Dabei wird stets der Thread mit der höchsten Priorität ausgeführt, während laufende Threads mit niedrigerer Priorität pausiert werden (präemptives Multitasking). Haben mehrere Threads dieselbe Priorität, werden sie nacheinander in festen Zeitscheiben ausgeführt.
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;
Der Thread LowPriorityThread gibt kontinuierlich das Zeichen „.“ aus, wird jedoch in Sekundenintervallen vom Thread HighPriorityThread unterbrochen, der das Zeichen „*“ ausgibt.
Topics
[Bearbeiten | Quelltext bearbeiten]Für die Kommunikation zwischen verschiedenen Threads oder auch zwischen Systemen über Gateways nutzt Rodos sogenannte Topics. Ein Topic stellt eine Nachricht eines bestimmten Typs dar, für deren Empfang sich Threads als Empfänger (Subscriber) registrieren können. Gleichzeitig können Threads auch als Sender (Publisher) solcher Nachrichten fungieren. Dieses System ist nach dem Publisher-Subscriber-Modell aufgebaut und ermöglicht eine effiziente und flexible Nachrichtenverarbeitung. 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 in 3-Sekunden-Intervallen einen ansteigenden Zählerstand als Nachricht, während der Subscriber-Thread den Integer empfängt und den Zählerstand direkt ausgibt.
Weblinks
[Bearbeiten | Quelltext bearbeiten]Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ Our Partners: Working together on one shared vision. In: pts.space. Archiviert vom (nicht mehr online verfügbar) am 18. August 2022; abgerufen am 9. Dezember 2024 (englisch).