Ist es in eingebetteten Bare-Metal- oder Minimal-RTOS-Systemen mit mehreren Prozessoren möglich, auf jedem Prozessor ein identisches Programm auszuführen, das Message Passing Interface (MPI) verwendet, um bei Prozessorausfall einen Lastausgleich und auch Redundanz bereitzustellen? B. eine Zustandsmaschine, die ändert, welche Aktionen andere CPUs basierend auf übergebenen Nachrichten ausführen, z. B. einen anderen Prozessor auffordert, einen Teil der Systemschleife für den Lastausgleich zu übernehmen oder periodisch lebendige Nachrichten zu senden, und sich merkt, wofür jede CPU verantwortlich ist CPU-Redundanz.
In diesem Beispieldiagramm können die tatsächlichen Teile der vollständigen Systemschleife, die "offen" sind, unterschiedliche Systeme sein. Es könnte keine Kooperation geben, nur die Möglichkeit, Teile der vollständigen Systemschleife, die auf jeder CPU ausgeführt wird, in einer Art sehr primitiven asymmetrischen Multiprozessors zu öffnen und / oder zu schließen. "Prozessmigration" zu einer anderen CPU würde durch eine Anforderung an eine andere CPU ausgelöst, den Teil der Systemschleife zu öffnen, nach dem die anfordernde CPU ihren Teil schließt, oder durch eine fehlende Antwort von einer anderen CPU, wenn sie abgefragt wird, wenn sie für einige Zeit am Leben ist .
Es wurde als Lösung für potenzielle Prozessorausfälle und als Lösung für den Lastausgleich vorgeschlagen, da wir ein eingebettetes Betriebssystem nicht portieren können, um wirklich symmetrische oder asymmetrische Mehrfachverarbeitung auf der benutzerdefinierten Karte durchzuführen, und es scheint theoretisch möglich zu sein, aber ein unglaublich schlechtes Design Idee. Außerdem konnte ich keine Entwurfsmuster oder Algorithmen für die Verwendung der Nachrichtenübermittlung auf diese Weise finden.
Einige Hintergrundinformationen, die für die Softwareentwicklungsentscheidungen wichtig sind: Als CubeSat-Projekt für Studenten (nicht benotet oder für eine Klasse) haben wir ein kleines Softwareentwicklungsteam mit hauptsächlich jungen Studenten, die nur wenig oder gar keine Kenntnisse über das Design von Betriebssystemen haben. Aus verschiedenen Gründen können wir keine der vielen realen Lösungen durchführen, über die ich gelesen habe. Dies klingt zwar so, als ob es möglich wäre, dass es zu viel Komplexität für das Team mit sich bringt, und selbst wenn dies möglich ist, führt dies zu einem schrecklichen Design, das zu einem Problem führt, das den CubeSat in einen umlaufenden Stein verwandelt.
Ich bin mir nicht einmal sicher, ob wir die Nachrichtenübermittlung auf eine Weise implementieren können, die für die Raumfahrt zuverlässig genug ist. Ich konnte noch nicht einmal produktionsbereite Kommunikationsprotokolle finden, mit denen Nachrichten auf einem Bus mit einem winzigen Betriebssystem oder nackt übertragen werden können Metall wie wir es brauchen. Ich bin aber auch gespannt, ob diese vorgeschlagene Lösung für Prozessmigration, CPU-Redundanz und Lastausgleich für ein sicherheitskritisches System überhaupt realisierbar ist. Es scheint, als könnte dies zu einem Zustand führen, in dem zwei CPUs denselben "Prozess" oder Teil der Programmschleife ausführen, wenn einer aufwacht, der schwer zu erkennen wäre.
quelle
Antworten:
Ausgezeichnete Fragen, weil ich Mitte der 90er Jahre tatsächlich einiges davon herausgearbeitet habe. Raumfahrzeuge sind teuer und es ist schwierig, Software im Orbit zu modifizieren. Ich dachte über eine Variante dieses Problems nach, als ich darüber nachdachte, wie Softwareressourcen von Raumfahrzeugen aufgrund sich ändernder Missionsanforderungen neu zugewiesen werden könnten. Soweit wir es im Labor (VxWorks) aufgenommen haben:
On Station Programmaktualisierungen unter einem RTOS. Schließen Sie im Grunde einen neuen Task-Set an, schließen Sie das Warteschlangennetzwerk an und starten Sie den Datenfluss erneut.
In dieser einfachen Implementierung haben wir einige Aufgaben angehalten oder entfernt und andere ausgeführt. Wir haben es in der sogenannten "Herztransplantation" etwas weiter gebracht. Dies war für On-Station-Software-Updates. Wir könnten die Warteschlangennetzwerke innerhalb des Tasking-Modells trennen und umleiten. Trennen Sie die Aufgabe grundsätzlich und beseitigen Sie sie, falls gewünscht, beenden Sie die Warteschlangen und verbinden Sie die neue Aufgabe (Herz) und die Arterien (Warteschlangennetzwerk) erneut. Wir haben diese Spielzeit 1995/96 gemacht. Ich wollte nicht nur die Möglichkeit haben, Funktionen hinzuzufügen, sondern diese auch nicht zu entfernen, da der Speicher eine sehr begrenzte Ressource ist. Ich weiß nicht viel über MPI, ich habe es nie benutzt. Ist es deterministisch? Mit der Informationstheorie brauchen Sie nicht viel, um ein Keep-Alive-Signal zu senden. Verwenden Sie minimale Bits. Die gängigsten Informationen wie "Keep Alive" benötigen nur ein Bit. richtig oder falsch. Ereignisse, die mit einer viel geringeren Wahrscheinlichkeit auftreten, benötigen mehr Bits zur Darstellung. Beseitigen Sie jeglichen Software-Overhead, den Sie können. Folgen Sie dem KISS-Prinzip (Keep It Simple..Stupid!).
Jetzt irgendein Strahlenschutz. Studentenprojekt bedeutet wahrscheinlich CMOS fliegen. Ich würde zumindest CRC-Checks in den Speicher stellen und einen Watchdog ausführen, um Fehler zu erkennen, wie z. B. Aufhängestrahlung seltsame Dinge für die Elektronik bewirkt. Einzelereignis-Störungseffekte können mithilfe von CRC im Speicher verringert werden. Das Einrasten erfordert einen Power-Reset.
Ich würde vorschlagen, etwas wie FreeRTOS auszuprobieren und zu sehen, welche Funktionen Sie Ihrem Willen anpassen können. Der Weltraum ist eine sehr herausfordernde Umgebung. Habe Spaß.
quelle