Bei Steuerungen für Maschinen gerade mit sicherheitskritischen Funktionen, hört man hin und wieder den Begriff Echtzeitfähigkeit oder Echtzeitsystem. Aber was ist Echtzeitfähigkeit überhaupt? Dieser Blogbeitrag soll Leser:innen ein hinreichend klares Verständnis dafür ermöglichen was man darunter versteht und wann man so etwas wie Echtzeitfähigkeit braucht.
Was Echtzeit ist und was nicht
Der Begriff Echtzeitfähigkeit wird oft missverstanden. Mit Echtzeitfähigkeit ist keine Fähigkeit gemeint, etwas in einer „echten“ Zeit, wie immer man diese definieren wollte, zu erledigen. Es bedeutet nicht, dass etwas „schnell“ oder „mit hoher Geschwindigkeit“ geschieht.
Wenn ein Computer irgendetwas berechnet und durch das Ergebnis eine Aktion folgt, dauert das immer eine gewisse Zeit. Mit Echtzeitfähigkeit ist gemeint, dass ein Computer ein erforderliches Ergebnis für eine Aktion nicht nur richtig berechnet, sondern dass es für die Zeit, die der Computer dafür benötigt, auch eine genau bekannte obere Zeitschranke gibt.
Echtzeitfähig ist ein System dann, wenn es in der Lage ist, das gewünschte Ergebnis garantiert innerhalb einer vorgegebenen Zeitspanne richtig zu ermitteln. Die Zeitspanne kann dabei in Millisekunden, Tage oder Wochen definiert sein. Man sagt auch, dass ein System dann echtzeitfähig ist, wenn es ein gewünschtes Ergebnis korrekt innerhalb der vorgegebenen Zeitspanne ermittelt.Damit muss ein Echtzeitsystem nicht zwingend besonders „schnell“ sein, sondern nur „schnell genug“.
Ein einfaches Beispiel für ein Echtzeitsystem ganz ohne Computer wäre die Abgabe eines Papers bei einer Konferenz. Der Autor muss sein Paper bis zur vorgegebenen Deadline fertigstellen und einreichen. Ein anderes Beispiel mit einem Computer wäre ein Chatprogramm: die eingegebenen Zeichen müssen alle beim Chatpartner nach einer gewissen Zeit (und in der richtigen Reihenfolge) ankommen, damit ein Gespräch sinnvoll möglich ist.
Info: Wir entwickeln Hardware und Software für kundenspezifische Elektronik.
Warum müssen manche Systeme echtzeitfähig sein?
Echtzeitfähigkeit ist beispielsweise bei sicherheitskritischen Funktionen, in der Regelungstechnik oder bei der Datenkommunikation erforderlich. So muss das Bremssystem eines Fahrzeugs, das durch ein Computerprogramm gesteuert wird, auf das Signal „jetzt bremsen“ mit einer maximalen oberen Zeitschranke aktiv werden, um einen Aufprall zu verhindern. Die Regelung von Systemgrößen in technischen Prozessen per Software muss in einem genau begrenzten Zeitfenster den nächsten Regelparameter berechnen und einstellen. Bei einer (verlustfreien) Datenkommunikation muss ein Datum rechtzeitig verarbeitet worden sein, bevor es durch das nachfolgende Datum überschrieben wird und verloren geht.
Wenn etwas berechnet werden kann, ist es dann nicht immer echtzeitfähig? Die Antwort ist: nein.
Wir wissen zwar spätestens seit Alan Turing, dass das Ergebnis von etwas, was berechnet werden kann, nach einer endlichen Zeit vorliegt. Jedoch weiß man nicht bei allen Abläufen und Berechnungen im Voraus, wie lange diese konkret dauern werden.
Eine konkrete Berechnung kann bedingt durch das Verfahren, das verwendet wird, unterschiedlich lang dauern. Oder die Berechnung dauert unterschiedlich lange durch nicht deterministische Unterbrechungen. Für ein Bremssystem eines Fahrzeuges wird die maximal zulässige Zeitdauer für die erforderliche Aktion im Millisekundenbereich liegen, für ein Chatprogramm sind es wenige Sekunden, für das Paper bei der Konferenz hat man vielleicht Wochen Zeit.
Kann nicht garantiert werden, dass die korrekten Berechnungen für das Bremsen, die korrekte Datenübertragung im Chatprogramm oder das Schreiben des geplanten Papers in der geforderten Zeit abgeschlossen ist, ist das System nicht echtzeitfähig und der ganze Aufwand möglicherweise umsonst gewesen.
Harte versus weiche Echtzeit
Echtzeitfähige Systeme werden oft noch unterschieden in harte und weiche Echtzeit.
Harte Echtzeit
Von harter Echtzeitfähigkeit wird gesprochen, wenn die Hard- und Software die zeitlichen Anforderungen unter allen möglichen Bedingungen immer erfüllen. So muss das Bremssystem eines Fahrzeuges die Bremse immer rechtzeitig aktivieren, egal ob das gleiche System zusätzlich noch die Klimaanlage im Fahrzeug steuert oder das Entertainmentsystem für die Mitfahrenden betreibt.
Weiche Echtzeit
Bei weicher Echtzeit hingegen wird bis zu einem gewissen Grad toleriert, dass die gegebene Zeitschranke nicht eingehalten wird. So sollte die Datenübertragung von einem Audio- oder Video-Stream möglichst in Echtzeit erfolgen, aber es ist für diesen Anwendungszweck möglicherweise akzeptabel, wenn hin und wieder ein Audiofragment oder ein Videobild nicht rechtzeitig verarbeitet wird und verloren geht. Für den Benutzer macht sich das z. B. in einem kurzen Knacksen im Ton oder einem einzelnen kurzen Bildartefakt bemerkbar, beeinträchtigt aber die Funktion insgesamt nicht nachhaltig.
Welche Vorraussetzung gelten für echtzeitfähige Systeme?
Betriebssysteme für Echtzeitfähigkeit
In echtzeitfähigen Computersystemen werden oft Echtzeitbetriebssysteme eingesetzt, die die spezielle Anwendungssoftware so zu Ausführung bringen, dass die Echtzeitbedingung eingehalten wird. Genutzte Echtzeitbetriebssysteme im Embedded Bereich heißen z. B. VxWorks, QNX, RTOS oder Zepyhr.
Diese Betriebssysteme sind für Echtzeitanwendungen konzipiert und bieten spezielle Funktionen an, die für eine Berechnung von Ergebnissen mit einer zeitlichen Bedingung notwendig sind. Insbesondere enthalten diese Systeme oft für Multithreading einen Scheduler, der in der Lage ist eine Berechnung mit einer garantierten Latenz anzustoßen und Prioritäten bei der Ausführung von einzelnen Aufgaben unbedingt einhält (Stichwort: Prioritäten und Vermeidung von Prioritätsumkehr).
Bare-Metal-Systeme für Echtzeitfähigkeit
Echtzeitfähigkeit kann aber auch ganz ohne Betriebssystem erreicht werden. Häufig werden Mikrocontroller aufgrund der begrenzten Ressourcen ohne ein Betriebssystem verwendet. Dabei wird auf Mikrocontrollern dann oft eine periodisch aufgerufene, weitgehend synchron laufende Schleife verwendet, die alle Berechnungen und Aktionen nacheinander ausführt. Die Echtzeitfähigkeit kann dadurch erfüllt werden, dass ein Schleifendurchlauf immer schnell genug erfolgt, sodass die gegebene zeitliche Oberschranke für irgendeine Reaktion des Systems stets eingehalten wird.
Kann ich nicht immer echtzeitfähige Systeme entwickeln?
Ein Nicht-Echtzeitbetriebssystem kann die gleiche Anwendungssoftware zwar ebenfalls ausführen, aber durch Multithreading und interne Betriebssystemfunktionen, wie beispielsweise die virtuelle Speicherverwaltung, können diese Systeme eine rechtzeitige Ausführung einer Funktion nicht garantieren.
Andererseits ist es auch nicht sinnvoll für jede Anwendung zu einem Echtzeitbetriebssystem zu greifen, denn bei Echtzeitbetriebssystemen existieren z. B. folgende Einschränkungen
- Keinen virtuellen Speicher
- Keine dynamische Speicherallokation zur Laufzeit
- Begrenzte Bibliotheksnutzung (wegen nicht-deterministischer Funktionen)
Neben dem Betriebssystem muss auch die Anwendung bei der Entwicklung so konzipiert sein, dass sie echtzeitfähig ist. Entwickler:innen müssen die Software so gestalten, dass alle Abläufe deterministisch genug sind und kein Softwareteil das System „kapert“, z. B. in den Programmunterbrechungen durch die Hardware (Interrupts) oder den Scheduler unterbunden werden.
In einer Softwareanwendung können echtzeitfähige und nicht echtzeitfähige Teile parallel existieren. Jedoch muss das zugrundeliegende Betriebssystem und auch Anwendungsentwickler:innen Interaktionen zwischen diesen Teilen besonders beachten, um zu verhindern, dass nicht echtzeitfähige Anwendungsteile die echtzeitfähigen bzgl. ihrem zeitlichen Verhalten negativ beeinflussen können.
Fazit zur Echtzeitfähigkeit
Echtzeitfähigkeit bedeutet nicht, dass ein System besonders „schnell“ ist. Es bedeutet, dass das System zeitlich deterministisch genug bzgl. einer vorgegebenen oberen Zeitschranke unter allen Bedingungen ausgeführt werden kann.
Diese Zeitschranke ist dabei je nach Anwendung unterschiedlich, um die geforderte Funktion noch zu erfüllen. Je nach Usecase kann harte Echtzeitfähigkeit erforderlich oder weiche Echtzeit ausreichend sein. Für echtzeitfähige Systeme werden oft spezielle Betriebssysteme eingesetzt und Softwareentwickler:innen müssen echtzeitfähige Anwendungen entsprechend konzipieren und umsetzen.