Rodos (Betriebssystem)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Rodos
Logo des Betriebssystems Rodos
Basisdaten
Entwickler Deutsches Zentrum für Luft- und Raumfahrt
Lizenz BSD-Lizenz
Sonstiges Programmiert in C, C++, Assemblersprache
Website dlr.de/rodos, Download

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 ging aus dem Betriebssystem BOSS hervor. Es findet unter anderem im aktuellen Mikro-Satellitenprogramm des DLR Verwendung. Das System läuft auf dem im Orbit befindlichen Satelliten TET-1 und soll auch auf dem Erdbeobachtungssatelliten BIROS eingesetzt werden.

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[Bearbeiten | Quelltext bearbeiten]

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:

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 Thread {
  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[Bearbeiten | Quelltext bearbeiten]

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:

class HighPriorityThread: public Thread{
public:
  HighPriorityThread() : Thread("HiPriority", 25) { 
  }
  void run() {
    while(1) {
      xprintf("*");
      suspendCallerUntil(NOW() + 1*SECONDS);
    }
  }
} highprio;

class LowPriorityThread: public Thread {
public:
  LowPriorityThread() : Thread("LowPriority", 10) { 
  }

  void run() {
    while(1) {
         xprintf("."); 
    }
  }
} lowprio;

Hier gibt der Thread LowPriorityThread konstant das Zeichen "." aus und wird in Sekundenintervallen durch den Thread HighPriorityThread und die Ausgabe von "*" unterbrochen.

Topics[Bearbeiten | Quelltext bearbeiten]

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:

Topic<long>    counter1(-1, "counter1");

class MyPublisher : public Thread {
public:
	MyPublisher() : Thread("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[Bearbeiten | Quelltext bearbeiten]

Unterstützte Prozessor-Architekturen:

Des Weiteren kann Rodos als Gastsystem auf andere Betriebssysteme aufsetzen:

Weblink[Bearbeiten | Quelltext bearbeiten]