# RTX: Real Time eXtensions für Windows

RTX (Real Time eXtensions for Windows) ist eine von IntervalZero entwickelte Echtzeit-Erweiterung, die Microsoft Windows in ein Echtzeitbetriebssystem verwandelt. Es war das erste Echtzeit-Windows-Produkt.

## Beschreibung

Beginnend mit Windows-Version NT 3.5 unterstützt die Software seit 1994 stetig die NT-Architektur. Derzeit steht die Version RTX 2016 für die 32-Bit- und die Version RTX64 4.x für die 64-Bit-Version von Windows zur Verfügung.
RTX wird von Embedded-Geräteherstellern verwendet, die Windows als handelsübliches Betriebssystem nutzen, jedoch den Bedarf an einem Echtzeit-Betriebssystem (RTOS) haben. Durch den Software-Einsatz kann auf zusätzliche Echtzeit-Hardware verzichtet werden.
Anwendung findet die Software vor allem in der Automatisierung, beim Militär, in der Luft- und Raumfahrttechnik, bei medizinischen Geräten, digitalen Medien und der Messtechnik, bei Videospielen, aber auch bei zukunftsfähigen, intelligenten Stromnetzanwendungen (z. B. Überwachung bei der Energieproduktion in Kraftwerken und bei der Energieverteilung (Smart Grid)).

## Geschichte

Ursprünglich wurde RTX von der Firma VenturCom entwickelt, die im Jahr 2005 in Ardence umbenannt wurde. Ardence wurde zwei Jahre später von Citrix aufgekauft. Im Jahr 2008 spaltete Citrix den Bereich Embedded Systems unter dem Namen IntervalZero ab. Seitdem werden RTX und seine Folgeversionen von IntervalZero weiterentwickelt und gewartet.

## Technische Details
### HAL Erweiterung (Hardware Abstraction Layer)

RTX64/RTX beruht auf einer Erweiterung des Windows HAL. Die RTX64/RTX-HAL-Erweiterung initialisiert und startet die RTX64/RTX zugeordneten Prozessoren und liefert dem RTX64/RTX-Echtzeit-Subsystem (RTSS) hochauflösende Timer (bis zu 1 Mikrosekunde). Ebenso bietet es auch Isolations-Mechanismen für Interrupts an.

### Symmetrisches Multiprozessorsystem (SMP)

Wie Windows basieren auch RTX64 und RTX auf einer SMP-Architektur. Passend zu den jeweiligen Echtzeit-Anforderungen kann der RTX64/RTX-Nutzer die Anzahl der Prozessoren wählen, die er RTX zuordnet, um seine Echtzeitanwendungen auszuführen (bis zu 63 zugeordnete Prozessoren für RTX64, und bis zu 31 Prozessoren für RTX). Durch Konfigurieren der Threads und der Interrupt-Bindung teilt der Nutzer anschließend seine Echtzeit-Anwendungen unter den RTX/RTX64 zugewiesenen Prozessoren auf.

### Interrupt Management

RTX64/RTX unterstützt sowohl leitungsbasierte (IRQs) wie auch Message-basierte (MSI/MSI-X) Interrupts. Die Latenzzeiten des Interrupt Service Thread (IST) betragen weniger als 10 Mikrosekunden.

### Speicherverwaltung

Der deterministische Speicher, der RTX64/RTX zugeordnet werden kann, wird aus dem „Non-Paged“- Speicherbereichen des Systemspeichers gebildet. Der „Non-Paged“- Speicherbereich, der RTX64/RTX zum Beispiel unter Windows 7 RTX64/RTX zugewiesen werden kann, beträgt:
* bei 32-bit: 75 % des RAM bis zu einem Maximum von 2 GB
* bei 64-bit: 75 % des RAM bis zu einem Maximum von 128 GB

### Scheduling

Über alle Echtzeit-Prozessoren wird ein gemeinsamer Scheduler verwendet. Ein gemeinsamer Scheduler (eine Instanz für alle Echtzeit-Kerne) weist den Echtzeitkernen die entsprechende Aufgabe zu. Ein Symmetric Multiprocessing Scheduler verwendet sowohl prioritätsgesteuerte (128 Prioritätsebenen) als auch präemptive Algorithmen, um zeitkritische Thread-Umschaltungen zu gewährleisten. Um eine Inversion der Prioritäten zu vermeiden, implementiert das Echtzeit Subsystem (RTSS) die klassische Lösung der Prioritäten-Promotion. Dadurch laufen Threads mit hoher Priorität in einem Sub-Mikrosekunden-Bereich ab.

### Windows-Interaktion

Durch die strikte Trennung der Echtzeitanwendungen von Windows und den Windows-Prozessen beeinflusst auch eine Windows-STOP- oder Shutdown-Message nicht den Echtzeitablauf, die bis zu einem Sicherheitsshutdown unabhängig (aber ohne Windowsservices nutzen zu können) weiterlaufen. Die Kommunikation Windows-RTX64/RTX wird standardmäßig durch eine Interprozess-Kommunikation zwischen Windows-Anwendungen (Windows Anwenderprozesse, oder Windows Kernel-Treiber) und Echtzeit-Prozessen durchgeführt. Events, Mutexe und Semaphoren können zur Synchronisierung genutzt werden, Shared Memory und Sockets dienen zur gemeinsamen Nutzung von Daten zur Kommunikation.

### RTX64/RTX Anwendungsentwicklung

Die Anwendungsentwicklung für RTX64/RTX erfolgt mit Microsoft Visual Studio in C/C++ mit Windows-artigen APIs. RTX64/RTX ausführbare Dateien tragen die Namenserweiterungen «.rtss» und DLLs verwenden «.rtdll».

### Netzwerk-Kommunikation

Der RT-TCP/IP-Echtzeit-Stack unterstützt TCP/UDP/IP-Netzwerke für RTX64/RTX-Prozesse; RTX64/RTX gemeinsame NICs-Treiber werden mit den RT-TCP/IP-Echtzeit-Stack bereitgestellt.