Zum ersten möchte ich erwähnen, dass ich ein Neuling in der Echtzeit-Systemprogrammierung bin. Deshalb bin ich mir nicht sicher, ob meine Fragen richtig sind. Entschuldigung, aber ich brauche etwas Hilfe
Kurz gesagt: Wie kann man harte Echtzeitsoftware implementieren, um sicherzustellen, dass sie die harten Fristen einhält? Ist es notwendig, einige QNX-Funktionen zu verwenden? Oder reicht es gerade aus, es für Linux zu schreiben, auf QNX zu portieren und es wird standardmäßig in Echtzeit sein?
Vollständige Frage: Wir haben eine komplexe plattformübergreifende Multiprozess-Software mit prozessübergreifender Kommunikation für Linux, Windows, Android und QNX implementiert. Die Programmiersprache ist C ++, wir verwenden Boost und Planty anderer Bibliotheken. Unsere Software erledigt ihre Arbeit gut und schnell, ist aber immer noch ein Prototyp. Für Produktionszwecke müssen wir dies in Echtzeit tun. Einige unserer Funktionen müssen in Echtzeit und sehr robust sein, da sie sehr wichtig sind und die Sicherheit der Benutzer unserer Software davon abhängen kann. Sie arbeiten ziemlich schnell - bis zu Hunderten von Millisekunden. Aber ich bin mir nicht sicher, ob unser System aufgrund dieser Tatsache wirklich in Echtzeit ist (habe ich recht?).
Es gibt also eine Hauptfrage: Wie kann man unsere Software so ändern, dass sie in Echtzeit ist? Ich habe viel gegoogelt, aber ich habe immer noch keine Ahnung, wie ich es machen soll.
Einige zusätzliche Informationen zu unseren Plattformen: Linux und Windows verwenden wir derzeit nur zu Testzwecken. Android - wir haben uns noch nicht entschieden, ob wir es brauchen. QNX - ist unser Zielbetriebssystem für die Produktion. Ich denke, die Antwort auf meine nächste Frage lautet "NEIN" :) Aber ist es überhaupt möglich, plattformübergreifende Echtzeitsoftware (für Echtzeitbetriebssysteme (RTOS) sowie für Allzweckbetriebssysteme (GPOS)) zu implementieren?
Möglicherweise müssen wir uns bemühen, alle Echtzeitfunktionen nur für QNX zu implementieren? Aber ich verstehe immer noch nicht, wie es geht. Könnte jemand ein Licht auf diese Frage werfen?
Antworten:
Schnell bedeutet nicht Echtzeit und Echtzeit bedeutet nicht schnell.
Echtzeit bedeutet, dass das Datum, an dem das Ergebnis geliefert wird, genauso wichtig ist wie sein Wert. Mit anderen Worten, wenn das Ergebnis einen korrekten Wert hat, aber zu früh oder zu spät geliefert wird, ist das Gesamtergebnis falsch.
Stellen Sie sich zum Beispiel einen Videoplayer vor. Wenn Videobilder nicht mit der richtigen Rate angezeigt werden, sind die Benutzer nicht zufrieden. Schlimmer noch, wenn Bild und Ton nicht synchron sind.
Dieses Beispiel zeigt, dass einige Echtzeitanwendungen auf aktuellen Allzweckbetriebssystemen implementiert werden können.
In Bezug auf die Folgen eines Terminfehlers wird jedoch zwischen harter Echtzeit und weicher Echtzeit unterschieden: In weichen Echtzeitsystemen ist dies nur ein Ärger oder ein verschlechterter Dienst (denken Sie an eingefrorene Bilder während einiger Sekunden in Beispiel für einen Videoplayer), während es sich um einen (möglicherweise katastrophalen) Fehler in einem Echtzeitsystem handelt, beispielsweise in einem Kernkraftwerk.
quelle
Wie @mouviciel bereits sagte, sind Echtzeit und Schnell zwei unabhängige Eigenschaften, obwohl viele Echtzeitfristen implizieren, dass eine relativ schnelle Antwort erforderlich ist.
Beim Schreiben von Echtzeitsoftware ist die wichtigste Eigenschaft neben einer korrekten Antwort, dass Sie genau vorhersagen können, wie schnell die Antwort gegeben wird. Für harte Echtzeitfunktionen müssen Sie sogar garantieren können, dass die Frist unter allen möglichen Bedingungen bis zu einem vollständigen Stromausfall eingehalten wird.
Typische Ursachen für Unvorhersehbarkeit finden sich in
Ich sage nicht, dass Sie diese Bereiche meiden müssen (wie Sie es höchstwahrscheinlich nicht können), aber Sie müssen sich darüber im Klaren sein, wie sie sich auf die Leichtigkeit auswirken können, mit der Sie vorhersagen können, dass Sie die Echtzeitfristen für die relevanten Funktionen einhalten werden.
quelle
Ich nehme an, die Erklärung von Echtzeit in zwei Sätzen lautet, dass ein Echtzeitsystem die Reaktionszeit im ungünstigsten Fall von sich ändernden Eingängen zu sich ändernden Ausgängen verstehen und steuern soll .
Dies erfordert eine Analyse, die das gesamte System abdeckt. Angenommen, Sie haben ein triviales System, das aus einer USB-Tastatur und einem Bremsservo besteht. Welche Reaktionsfähigkeit können Sie mit diesem System erreichen? Möglicherweise müssen Sie Folgendes berücksichtigen:
In solchen Umgebungen wird in der Regel auch besonders auf Zuverlässigkeit geachtet, beispielsweise bei den MISRA C-Standards.
quelle
avoiding use of garbage collection
- Das sollte seinavoiding use of non-deterministic memory management
. Die Speicherbereinigung kann in Echtzeit erfolgen, und die manuelle Speicherverwaltung ist nicht unbedingt deterministisch (siehe die typischemalloc
Implementierung für C).