Ich bin sehr bemüht, Best Practices im Bereich der Raumhärtung zu studieren. Ich habe zum Beispiel gelesen (obwohl ich den Artikel nicht mehr finde), dass einige Kernteile der Mars-Rover keine dynamische Speicherzuweisung verwendeten, was sogar verboten war. Ich habe auch gelesen, dass altmodischer Kernspeicher im Weltraum vorzuziehen sein könnte.
Ich habe mir einige der Projekte im Zusammenhang mit der Google Lunar Challenge angesehen und mich gefragt, wie es sich anfühlt, Code auf dem Mond oder sogar nur im All zu haben. Ich weiß, dass platzhärtende Boards in einer solch rauen Umgebung ein gewisses Maß an Vernunft bieten. Ich frage mich jedoch (als C-Programmierer), wie ich mein Denken und meinen Code anpassen müsste, wenn ich etwas schreiben würde, das im Weltraum ablaufen würde.
Ich denke, dass in den nächsten Jahren mehr Wachstum in privaten Raumfahrtunternehmen zu verzeichnen sein könnte. Ich würde wirklich gerne zumindest ein wenig über Best Practices Bescheid wissen.
Was passiert mit einem Programm, wenn Strahlung, Kälte oder Hitze eine Platine bombardieren, deren Isolierung beschädigt wurde? Ich denke, das Ziel ist es, Menschen in einem Raumschiff zu halten (was das Reparieren oder Tauschen von Sachen betrifft) und Missionen zu vermeiden, um Dinge zu reparieren.
Wenn das Board ein kritisches System aufrechterhält, scheinen frühe Warnungen von größter Bedeutung zu sein.
Wie kann man durch Testen und Ausprobieren Erfahrungen sammeln (außer beim Start eines eigenen Satelliten)?
Antworten:
Weltraumsoftware ist keine arkane Magie. Sie verwenden immer noch 0en und 1en, nicht 1en und 3en. Es spielt also wahrscheinlich keine Rolle, was in der Softwareentwicklung steckt.
Einige kleine Unterschiede, die im Moment in den Sinn kommen, sind:
quelle
Ich bin nur auf Ihre interessante Frage gestoßen.
Ich war während Apollo im Instrumentation Lab und später, als es während des "Kalten Krieges" Draper Lab hieß.
Für den Apollo-Leitcomputer wurde ein Kern für den RAM und ein spezieller geflochtener Kern für den ROM verwendet. Die Maschine selbst bestand ausschließlich aus NOR-Gattern und wurde aus Gründen der Zuverlässigkeit sehr langsam getaktet.
Ich habe nicht direkt an Minuteman-Raketen gearbeitet, war mir jedoch einiger Probleme bewusst. Wenn ein nuklearer Sprengkopf in der Nähe einer Elektronik abfällt, wird er im Grunde genommen kurzgeschlossen. Der Leitcomputer hatte einen Strahlungssensor, der Vc sofort ausschaltete, damit nichts ausbrannte. Dann würde der Computer neu starten, nachdem seine Register gelöscht worden waren.
Um dies zu handhaben, schnappte der Computer regelmäßig seine Register in den Core und startete beim Neustart von diesem Checkpoint aus. Damit dies funktioniert, musste die Software (alles in ASM) analysiert werden, um festzustellen, dass sie eine beliebige Anzahl solcher Treffer in einer beliebigen Häufigkeit aufnehmen konnte, ohne dass falsche Antworten erhalten wurden. Das wurde als "Neustart geschützt" bezeichnet. Sehr interessantes Problem, da es (Gott sei Dank) nie benutzt werden musste.
quelle
Um die Zuverlässigkeit der Umgebung speziell in C zu verbessern, sind hier einige wirklich konkrete Dinge aufgeführt, die ich gesehen habe.
MISRA-C: Die Automotive C-Untergruppe. Ein bisschen wie Ravenscar ADA / Java.
Wachhunde: Stellen Sie sicher, dass das Programm nicht abstürzt
ecc memory (manchmal)
Prüfsummen: Suche nach flippenden Bits. Ich habe alle drei in einem System gesehen:
1) Prüfsumme des Programms fortlaufend (es befand sich im EPROM, aber es wurden immer noch Bits umgedreht).
2) Bestimmte Datenstrukturen periodisch prüfen.
3) Die CPU-Integrität wird regelmäßig überprüft.
4) überprüfe, ob die IO-Register das haben, was sie haben sollen.
4b) Ausgänge auf unabhängige Eingänge zurücklesen und verifizieren.
quelle
Weitaus wichtiger als die Programmiersprache sind die Anforderungen an das zugrunde liegende System (Betriebssystem und Hardware). Grundsätzlich müssen Sie ein deterministisches und vorhersehbares Verhalten des Gesamtsystems sicherstellen (und nachweisen) . In der Echtzeit-Community wurde viel verwandte Forschung betrieben. Ich empfehle dringend, zwei Bücher zu lesen, wenn Sie dieses Thema wirklich studieren möchten: Echtzeitsysteme von Jane Liu und ein gleichnamiges Buch von Hermann Kopetz . Ersteres behandelt die Planung auf sehr theoretische Weise, während letzteres Ihre Füße wieder auf den Boden bringt und so ziemlich alle damit zusammenhängenden Aspekte des (Echtzeit-) Systemdesigns abdeckt, z. B. Fehlertoleranz.
Darüber hinaus veranschaulichen die folgenden beiden Vorfälle die Qualität der Probleme, mit denen Softwareentwickler konfrontiert sind, wenn sie etwas in den Weltraum senden:
quelle
Ich habe dieses Dokument (circa 2009) für den JPL Institutional Coding Standard für die Programmiersprache C im Labor für zuverlässige Software (LaRS) am Standort des Jet Propulsion Laboratory gefunden .
Hier ist eine Zusammenfassung der Regeln dokumentiert:
Sprachkompatibilität
Vorhersehbare Ausführung
Defensive Codierung
Code-Klarheit
*) Alle Regeln sind sollen Regeln, mit Ausnahme der mit einem Sternchen gekennzeichnet.
quelle
Bei platzsicheren Computersystemen dreht sich alles um Zuverlässigkeit. Eine tiefe Einführung in das Gebiet finden Sie in den grundlegenden Konzepten der Zuverlässigkeit von Algirdas Avižienis, Jean-Claude Laprie und Brian Randell.
Echtzeit ist auch ein Schlüsselkonzept für das Space Computing. Als Pankrat würde ich Real-Time Systems von Hermann Kopetz empfehlen .
Um einen pragmatischen Einblick in die Herausforderungen des Space Computing zu erhalten, denken Sie an:
extreme Bedingungen im Weltraum: sehr heiß bei Ausrichtung auf die Sonne, sehr kalt auf der anderen Seite, viele kosmische Strahlen, die Bits im Gedächtnis umkehren können, enorme Beschleunigungen und Vibrationen beim Starten, ... Hardware für den Weltraum muss weitaus robuster sein als Hardware für das Militär.
Wenn ein Fehler auftritt, außer in der Internationalen Raumstation oder beim Hubble-Weltraumteleskop, kommt niemand und ersetzt das ausgefallene System. Alles muss vom Boden aus durch maximale Beobachtbarkeit und Beherrschbarkeit und durch Ersatzsysteme, auf die umgeschaltet werden kann, repariert werden. Dies ist für Erdsatelliten einfach. Dies ist schwieriger bei Raumsonden, bei denen die Kommunikationsverzögerung eine Stunde betragen kann. In der Tat muss in erster Linie alles so zuverlässig wie möglich sein.
quelle
Was ich aus dem einen Projekt gelernt habe, an dem ich als Praktikant beteiligt war:
Ihre Hardware-Spezifikationen ändern sich normalerweise zum Schlechten!
Zum Beispiel wurde der platzharten CPU, die im Design verwendet wurde, versprochen , wohlgemerkt, dass sie mit 20 MHz laufen würde.
Das Endergebnis lief bei 12 MHz. Der leitende Programmierer des Projekts verbrachte viel Zeit mit der Neugestaltung von Algorithmen, um die harten Echtzeitanforderungen der Steuerungssysteme zu erfüllen, und ein Großteil der Telemetriesoftware wurde auf ein zweites System ausgelagert, anstatt auf der primären CPU zu laufen.
Versuchen Sie daher, einige zusätzliche Ressourcen im ursprünglichen Design verfügbar zu lassen, und versuchen Sie, nicht die gesamte verfügbare CPU und den verfügbaren Speicher zu verwenden.
quelle
Schreiben Sie für eine Software-Perspektive eine privilegierte Aufgabe, die gelegentlich zufällig Bits in Ihrem Code umdreht, und sehen Sie, wie sie damit umgeht. Das ist dein Simulator.
In Bezug auf die Hardware sind die Teile alt, da es sehr lange dauert, bis die Platzbewertung abgeschlossen ist. Außerdem nimmt die Größe neuer Teile ständig ab, und je kleiner ein Merkmal ist (man denke an eine Speicherzelle auf einem IC), desto anfälliger ist es für eine Beschädigung durch ein Strahlungsereignis.
quelle
Ich habe an einem sicherheitskritischen Gerät gearbeitet, und wir mussten einige ähnliche Reifen durchlaufen.
Wir hatten sicherheitskritische Variablen. Es gab eine Kopie der Umkehrung der Variablen. Nach jeder Schleife wurde die Variable gegen ihre Inverse geprüft.
Wir hatten einen Lauftest mit Einsen und Nullen für ALLE Register. Das beinhaltete den Programmzähler!
Wir hatten einen Test aller Opcodes des Micro Instruction Sets. Wir mussten sicherstellen, dass die Register hinzugefügt wurden, wenn Sie 2 Register hinzufügten.
Einiges davon hängt wahrscheinlich nicht mit Programmen im Weltraum zusammen, aber es gibt Ihnen einen Eindruck davon, wie umfangreich die Überprüfung ist, die möglich ist.
quelle
Ich glaube, je schlechter eine Umgebung ist, desto mehr Fehlerkorrekturcodes werden verwendet, und es gibt ECC-Speicher , die bis zu einem gewissen Grad verwendet werden können.
Wenn man die Fehlerquote abschätzen kann, kann man einen Fehlerkorrekturcode erstellen, der die eingeführten Fehler behandelt.
quelle
Ich würde vermuten, dass Software-ECC von Daten und die Verwendung der Informationstheorie und eines benutzerdefinierten Programmiergeräts zum Verteilen der Daten im System zur Verwaltung der Speicherfehler ein Anfang wäre. Aber ich lerne keine rad-hard Software, deshalb kenne ich mich damit nicht aus, das ist nur eine Vermutung.
quelle