Betriebssysteme: Echtzeit-Performance mit 64-bit-Windows

Die Echtzeiterweiterung RTX64 ergänzt ein 64-bit-Windows um einen Echtzeit-Kernel und macht die enorme Rechenleistung moderner x86-Multicore-Prozessoren damit für viele ­industrielle Anwendungen zugänglich, die ein deterministisches Zeitverhalten erfordern. Mit Virtualisierung funktioniert das zwar ebenfalls, aber da gibt es wichtige Unterschiede.

Grundsätzlich gibt es verschiedene Philosophien und Herangehensweisen, um zu einem leistungsfähigen Echtzeitsystem zu gelangen. Die häufigste ist die Verwendung passender Hardware. Mit der zunehmenden Verbreitung von Systems on Chip werden Rechenkerne aus Universalprozessoren, DSPs, Grafikkernen und FPGAs so zusammengestellt, dass sich das resultierende System für eine bestimmte Gruppe von Anwendungen eignet, beispielsweise für die Automobilelektronik. Allerdings sind für diese Bausteine auch gut abgestimmte Entwicklungswerkzeuge nötig, denn die Kombination verschiedener Cores mit ihren jeweils eigenen Befehlssätzen führt zu entsprechend aufwendigen und evtl. auch unübersichtlichen Entwicklungsumgebungen. Aber die meist hohe Produktionsstückzahl rechtfertigt den Aufwand, weil dieser auf eine entsprechend große Zahl von Geräten umgelegt werden kann.

Schwieriger ist es bei Geräten, die nur in kleiner Zahl hergestellt werden, wie medizinische Geräte, Roboter, Fertigungsanlagen und Spezialmaschinen aller Art. Hierfür können aus Kostengründen keine Spezial-SoCs entwickelt werden. So bleibt nur die Wahl zwischen existierenden Prozessoren, z.B. die große Familie der x86er. Sie mögen zwar nicht hundertprozentig zur Anwendung passen, liefern dafür aber Rechenleistung en masse. Problem ist allerdings, dass Betriebssysteme wie Windows keinen für industrielle Zwecke brauchbaren Echtzeit-Modus kennen.

Die mangelnde Echtzeitfähigkeit von Windows beseitigt z.B. die Echtzeit­erweiterung RTX bzw. RTX64 von Interval Zero. Die 64-bit-Version überwindet die Grenze von 4 GB, die mit 32-bit-Betriebssystemen maximal adressierbar sind, und eröffnet den Zugriff auf 512 GB physikalischen Speicher, wovon 128 im „non-paged“-Modus adressierbar sind.

Mit eigenem Scheduler

RTX nistet sich im System parallel zu Windows ein, mit eigenem Hardware Abstraction Layer und eigenem Scheduler (Bild). Dadurch sind keine Modifikationen an Windows nötig. Ein Windows-Kernel-Treiber sorgt für die Kommunikation zwischen beiden Welten. Zwischen den (nicht echtzeitfähigen) Windows-Programmen und echtzeitfähigen RTX-Prozessen gibt es einen wichtigen Unterschied: RTX-Prozesse laufen im Kernel-Modus, Windows-Programme und -Prozesse im User-Modus. Der Kernel-Modus ist für Anwendungen und Anwendungsprogrammierer in der Regel tabu, aus guten Gründen: Ein Fehler in einem Kernel-Modul kann das gesamte System zum Absturz bringen. Dieser Gefahr sollte man sich beim Einsatz von RTX bewusst sein und entsprechend sorgfältig ans Werk gehen.

Die Kommunikation zwischen Nutzer und Maschine erfolgt bei den echtzeitfähigen RTX-Prozessen über ein RtAPI (Real-time Application Programming Interface). Der Entwickler der Benutzeroberfläche muss sich also auf fast nichts Neues einstellen. Er verwendet wie bisher seine Microsoft Visual Tools, um das Benutzer-Interface zu entwerfen, und muss lediglich anstelle von Win32-API-Befehlen die Befehle des RtAPI einfügen.

AMP versus SMP

Nun lässt sich einwenden, dass sich Echtzeitfähigkeit z.B. auch durch Virtualisierung erreichen lässt. Mit mehrkernigen x86-Prozessoren läuft dann auf einem Core Windows und die Bedienoberfläche, auf weiteren Cores Echtzeitprozesse. Auch Separierungs-Kernels arbeiten nach diesem Prinzip. Der Unterschied zu RTX ist allerdings: Während bei der Virtualisierung Anwendungen und Betriebssysteme strikt voneinander getrennt werden, geht es bei RTX um die Integration von Echtzeit- und Nicht-Echtzeitwelt. Die „Separatisten“ betreiben i.d.R. asymmetrisches Multi-Processing (AMP) – sie weisen jedem Echtzeitprozess einen eigenen Kern zu. RTX trennt zwar auch Echtzeit- und Nicht-Echzeitprozesse, behandelt ansonsten aber die Ressourcen (Rechenkerne, Speicher und I/O) als einen gemeinsamen Pool, was dann symmetrisches Multi-Processing (SMP) bedeutet. Der Vorteil: Jeder Rechenkern hat Zugriff auf den gesamten Speicher, ohne dass irgend etwas umkopiert werden muss. Auch deterministische Kommunikation ist möglich, da RTX64 das EtherCAT-System von Beckhoff unterstützt.

Für welches System man sich entscheidet, hängt vom Anwendungsgebiet ab. Die strenge Trennung bei der Virtualisierung bedeutet mehr Aufwand bei der Kommunikation zwischen echtzeit- und nicht echtzeitfähigen Prozessen. Das symmetrische Multi-Processing von RTX nutzt die Ressourcen bestmöglich. Das geht aber auf Kosten der Sicherheit, denn der Eingriff in den Kernel Mode erfordert sorgfältige Tests, um die nötige Funktionssicherheit zu gewährleisten. Mehrstufige Security-Mechanismen durch gegenseitige Abschottung sind nicht realisierbar, da ja sämtliche Prozesse auf den gesamten Speicher zugreifen können.