# Echtzeitbetriebssystem

Ein Echtzeitbetriebssystem (englisch real-time operating system, kurz RTOS genannt) ist ein Betriebssystem in der elektronischen Datenverarbeitung, das in der Lage ist, Echtzeit-Anforderungen der Anwendungen zu erfüllen. Dies bedeutet, dass Anfragen eines Anwendungsprogramms oder das Eintreffen von Signalen über Hardware-Schnittstellen innerhalb einer im Voraus bestimmbaren Frist (Timeout $t_{\text{max}}$) gesichert verarbeitet werden. Entscheidend ist hier nicht die Länge der Frist, sondern dass es überhaupt eine Frist gibt, deren Einhaltung zugesichert werden kann.
Das Erfordernis eines Echtzeitbetriebssystems ergibt sich immer dann, wenn Rechner mit der physikalischen Welt messend und/oder steuernd in Verbindung stehen. Das ist das qualitative Erfordernis eines Echtzeitbetriebssystems.
Die quantitative Anforderung an dessen Echtzeitverhalten ergibt sich aus dem Anwendungsfall selbst. So sind zum Beispiel bei einer Heizungssteuerung längere $t_{\text{max}}$-Werte anwendbar als bei der Auslösung eines Airbags. Zusammen mit dem vorher Gesagten ergibt sich, dass nicht jedes Echtzeitbetriebssystem für jede Echtzeitanwendung geeignet ist.

## Theoretische Überlegungen

Da zur Definition keine bestimmten $t_{\text{max}}$-Werte für die Betriebssystemaufrufe gefordert sind, sondern diese nur bestimmbar sein und festliegen müssen, ist theoretisch jedes Betriebssystem ein Echtzeitbetriebssystem, bei dem es eine obere Schranke für die Anzahl der Prozesse gibt und dessen Systemdienste ausschließlich aus LOOP-Programmen, also aus primitiv-rekursiven Funktionen bestehen. Die anwendbaren $t_{\text{max}}$-Werte ließen sich dann errechnen. Allerdings sind die sich so ergebenden Werte für jede praktische Anwendung zu groß. Dies rechtfertigt den Begriff Echtzeitbetriebssystem als eigene Klasse von Betriebssystemen mit eigenen Anforderungen, bei dessen Erstellung die Echtzeit-Eigenschaft besonders berücksichtigt wird. Das sporadische und gemeinhin bekannte Verhalten von Desktop-Betriebssystemen für eine Weile „einzufrieren“ ist für RTOS nicht hinnehmbar.

## Anforderungen an Echtzeitbetriebssysteme
### Präemptives Multitasking

Ein Echtzeitbetriebssystem, das über Multitasking verfügt, muss zwingend mit präemptivem Multitasking arbeiten, da bei kooperativem Multitasking einem Prozess durch einen zweiten bis zum Erreichen des Timeouts die CPU entzogen werden könnte. Mit dieser Anforderung einher geht auch das Erfordernis einer Interrupt-Infrastruktur der CPU.

### Vorhersagbares Zeitverhalten der Systemaufrufe

Echtzeitbetriebssysteme müssen auch im ungünstigsten Fall die Einhaltung definierter Verarbeitungszeiten von Systemaufrufen garantieren. Dies betrifft vor allem das Scheduling und die Speicherverwaltung. Falls die Bearbeitung einer Anforderung zur Zuweisung von Speicher die Durchführung einer Garbage Collection provozieren kann, weil der Freispeicher erschöpft ist, dann verschlechtert sich das zusagbare Echtzeitverhalten dramatisch und mindestens auf die maximale Laufzeit einer Garbage Collection.

### Vorhersagbare Reaktionszeiten auf Ereignisse

Unter Ereignis ist jede von außen her rührende Zustandsänderung gemeint, die für eine Echtzeitanwendung von Bedeutung ist. Das kann das Eintreffen eines Datenpaketes, das Sichändern eines Bits an einem Port und Ähnliches sein. In einer realen Anwendung kann dies etwa die Verfügbarkeit neuer Messdaten, den Druck auf eine Taste oder das Überschreiten eines zulässigen Bereiches durch einen Messwert bedeuten. Ein Echtzeitbetriebssystem muss dann sicherstellen können, dass die hierzu erforderliche Reaktion, die zumeist in der Aktivierung einer zum Ereignis gehörenden Dienstroutine der Anwendung besteht, innerhalb einer im Voraus festliegenden Frist erfolgt.

## Frühe Formen der Echtzeitverarbeitung

In frühen Echtzeitanwendungen wurde die garantierte Antwortzeit auf Ereignisse vor allem durch unmittelbare Nutzung von Hardware-Interrupts durch das Anwendungsprogramm selbst realisiert. Dazu senkt oder hebt (je nach Logik) der Anforderer das Potential auf einem IRQ genannten Pin der CPU. Die CPU stoppt dann sofort die Arbeit am aktuell ausgeführten Programm, legt den aktuellen Programmzähler auf den CPU-Stack, entnimmt einer Interrupt-Vektor-Tabelle die Adresse der zugehörigen Interrupt-Service-Routine und springt diese an. Gleichzeitig wird der Interrupt maskiert, sodass er nicht direkt wieder ausgelöst werden kann. Die Interrupt-Service-Routine behandelt dann das Ereignis, demaskiert den Interrupt und beendet sich dann über einen meistens RETI (Return from Interrupt) genannten Befehl. Die CPU springt dann zurück an die Programmstelle, an der sie die Programmabarbeitung unterbrochen hatte.
Die Nutzung von Hardware-Interrupts seitens der Anwendung selbst wird durch ein Echtzeitbetriebssystem entbehrlich.

## Anwendungsbereiche

Echtzeitbetriebssysteme kommen immer dort zum Einsatz, wo das Überschreiten maximaler Antwortzeiten bei Antwort auf Ereignisse unmittelbare Schäden verursacht. Das sind insbesondere Maschinenbau, Steuerungstechnik und Robotik. Dort, speziell in Anwendungsbereichen, von denen Gefahr für Leib und Leben ausgeht, wie Medizintechnik und Fly-by-Wire, sind Echtzeitbetriebssysteme (beziehungsweise ein Echtzeitverhalten) unabdingbar.

## Implementierungen

* ADwin
* ChibiOS
* ChorusOS
* DRYOS
* eCos
* embOS
* FreeRTOS
* Integrity
* iRMX
* LynxOS
* MicroC/OS-II
* Nucleus
* NuttX
* OS-9
* PDOS
* PEARL Operating System
* PikeOS
* QNX
* Real-Time Executive (RTE)
* RTEMS
* RIOT (Betriebssystem)
* Rodos (Betriebssystem)
* RSX-11
* RT-11
* RTAI
* RTLinux
* RTOS-32
* RTOS-UH
* RTX: Real Time eXtensions für Windows
* T-Engine
* ThreadX
* Transaction Processing Facility
* TRON
* TTP-OS
* VxWorks
* Windows CE
* Zephyr (Betriebssystem)