Wie ändere ich Software, um in Echtzeit zu werden? [geschlossen]

9

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?

user172825
quelle
55
Wenn Ihr Projekt sicherheitskritisch ist, brauchen Sie wirklich jemanden, der Echtzeitsysteme auf Ihrer Gehaltsliste versteht.
Blrfl
18
Das Echtzeitsystem gibt an, wie genau Ihr Code in Bezug auf die Ausführungszeit ist, nicht ob er schnell oder langsam ist.
Pagotti
22
Ich habe das Gefühl, dass Sie eine vorhandene Software nicht in Echtzeit ändern, sondern eine neue Software unter Berücksichtigung expliziter Echtzeitbeschränkungen von Grund auf neu entwerfen und schreiben . Und Ihre Frage ist zu weit gefasst: Was genau macht Ihre Software? Auf welcher genauen Art von Echtzeitsystem, für welche konkrete Art von eingebettetem System (welcher Zweck: Infotainment während des Fluges in Verkehrsflugzeugen ist nicht dasselbe wie die Steuerung von Kernreaktoren)? Sie müssen Ihre Frage bearbeiten , um sie konkreter, präziser und motivierter zu gestalten.
Basile Starynkevitch
24
Lesen Sie den Kommentar von @ Blrfl erneut. Und dann lesen Sie es noch einmal und immer wieder, bis Sie eine Person mit der richtigen Erfahrung einstellen. Oder stellen Sie sicher, dass Ihre Haftpflichtversicherung bezahlt ist. Denn wenn Sie sicherheitskritische Software mit Echtzeitanforderungen erstellen und diese Erfahrung nicht haben, sind Sie strafrechtlich fahrlässig.
kdgregory
4
Sie fragten: " Ist es überhaupt möglich, plattformübergreifende Echtzeitsoftware (sowohl für Echtzeitbetriebssysteme (RTOS) als auch für Allzweckbetriebssysteme (GPOS)) zu implementieren? " existieren. "Cross Platform" ist "Holy Grail" ziemlich ähnlich.

Antworten:

38

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.

Mouviciel
quelle
Herr Mouviciel, vielen Dank für die Beantwortung meiner Frage. Wir brauchen einige Funktionen, um in Echtzeit hart zu sein. Andere können in Echtzeit weich sein. Ich verstehe nicht, wie man Software schreibt, um Fristen zu garantieren. Könnten Sie bitte ein Licht auf diese Frage werfen?
user172825
7
@ user172825 - Die Antworten auf diese Frage beziehen sich auf Regale von Bibliotheken. Ausgangspunkte können das Googeln von "Echtzeitprogrammierung", verwandten Wikipedia-Artikeln oder Tutorials von RTOSes wie QNX oder RTEMS sein.
Mouviciel
Es war die komplizierteste Frage für mich. Ich habe viele große Bücher zu diesem Thema gefunden. Aber ich hoffte, dass es möglich ist, es in ein paar Sätzen zu erklären. :)
user172825
5
" In der Informatik gibt es nur zwei schwierige Dinge: Cache-Ungültigmachung und Benennung. " - Phil Karlton OK und Echtzeit. Dort erklärt ein Satz, warum es nicht in zwei Sätzen erklärt werden kann. Wir kehren jetzt zu Ihrer regulären Programmierung zurück.
1
Ich finde, dass die Bezeichnung "harte Echtzeit" als "deterministische Zeit" normalerweise dazu beiträgt, den Menschen den Punkt zu vermitteln.
Whatsisname
15

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

  • Dynamische Speicherzuordnung und Speicherbereinigung
  • (Höhere Priorität) Interrupts
  • Der Scheduler im Betriebssystem
  • Dynamische Erstellung und Zerstörung von Objekten
  • Große Mengen an bedingt ausgeführtem Code

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.

Bart van Ingen Schenau
quelle
4
Achten Sie im bedingt ausgeführten Code auf amortisierte Algorithmen, bei denen die Operation meistens billig ist, aber gelegentlich zu einer viel teureren Operation werden kann, z. B. wenn ein Vektor hinzugefügt wird, wenn eine Neuzuweisung erforderlich ist.
Ratschenfreak
2
In einigen Fällen müssen Sie möglicherweise eine WCET- Analyse durchführen und die Ausführungszeit auf die Millisekunde
Basile Starynkevitch
3
@ user172825: Profilerstellung kann helfen, aber vieles davon hängt davon ab, die Sprache und die Bibliotheken wirklich gut zu kennen und zu kennen.
Bart van Ingen Schenau
3
Die Profilerstellung ist möglicherweise nicht gut genug, wenn Sie hohe Echtzeitanforderungen haben. Wenn die Laufzeit nicht vollständig deterministisch ist, kann die Profilerstellung den Eindruck erwecken, dass sie immer innerhalb der Frist abgeschlossen wird, obwohl sie die Frist nur 99 von 100 Mal einhält. Wenn Sie eine harte Echtzeitanforderung haben, ist dies der Fall muss es 100 mal von 100 erfüllen.
James_pic
2
@ user172825 Echtzeit ist für Software, was Gehirnchirurgie für Medizin ist - Sie benötigen viel Erfahrung und Geschick, um es richtig zu machen, und Sie müssen wirklich, wirklich sicher sein, was Sie tun. Diese Projekte werden besser unter Aufsicht eines Fachmanns der Region durchgeführt. Sie können nicht an einen normalen Entwickler weitergegeben werden und sagen "Lass dieses Ding als Echtzeitsystem funktionieren".
T. Sar
8

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:

  • Geben Sie die Abfragefrequenz ein und wie lange dies dauert
  • Eingangsinterrupt-Latenz
  • Betriebssystemumschaltzeit, sobald Sie ein Eingabeereignis haben
  • Betriebssystem Priorisierung von Aufgaben
  • Vermeiden der Verwendung von dynamischer Zuordnung oder virtuellem Speicher im Programm, um unvorhersehbare Antwortverzögerungen oder OOM-Ereignisse zu vermeiden
  • Vermeidung der Verwendung der Speicherbereinigung
  • Vermeiden Sie die Verwendung von O (n) oder schlechteren Algorithmen mit hohem oder unvorhersehbarem N (verlangsamt das Laden einer sehr großen Wiedergabeliste in das Unterhaltungssystem Ihres Autos die Bremsreaktion?)
  • Berücksichtigen Sie die Festplatten- oder Netzwerklatenz (z. B. Verwendung des CAN-Busses in Autos).
  • Latenz der Ausgangssteuerung

In solchen Umgebungen wird in der Regel auch besonders auf Zuverlässigkeit geachtet, beispielsweise bei den MISRA C-Standards.

pjc50
quelle
Stimmt es auch, dass in Echtzeit berücksichtigt wird, ob eine Operation deterministisch, möglicherweise rekursiv oder in einigen Fällen überhaupt berechenbar ist?
Ja, all das wäre "unbegrenzt". Rekursive Algorithmen können zugelassen werden, sofern für ihre Stapelverwendung eine Obergrenze festgelegt ist.
pjc50
5
avoiding use of garbage collection- Das sollte sein avoiding use of non-deterministic memory management. Die Speicherbereinigung kann in Echtzeit erfolgen, und die manuelle Speicherverwaltung ist nicht unbedingt deterministisch (siehe die typische mallocImplementierung für C).
8bittree