Haben Sie sich mit Raumhärten beschäftigt?


62

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)?


3
Ich habe E-Mails an space-x und andere gesendet und sie gebeten, SO beizutreten und dabei zu helfen, dies zu beantworten. Wenn jemand jemanden bei der NASA kennt, ist es jetzt an der Zeit, ihm eine E-Mail zu senden. Vielleicht kennen Sie auch einen pensionierten Egineer? Ich werde das in naher Zukunft nicht schließen.
Tim Post

7
Erwähnenswert ist, dass die "verbotene dynamische Speicherzuweisung" nicht nur für Raumsonden gilt, sondern in der Tat für jede eng begrenzte eingebettete Hardware (auch für Handheld-Videospiele) durchaus üblich ist.
Crashworks


@Mark, reicht der Humor jetzt aus, um Antworten zu löschen?

5
Es kann nicht so schwer sein, es ist keine Raketenwissenschaft. Oh warte ...
Mark Ransom

Antworten:


52

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:

  • Extrem prozessorientiert.
  • Space Software verfügt immer über Software- und Hardware-Watchdog-Timer.
  • Jedes Raumsystem, an dem ich gearbeitet habe, war ein hartes Echtzeitsystem.
  • Sie simulieren (mit großer Genauigkeit) jeden externen Akteur des Systems. Dies beinhaltet normalerweise die Erstellung (manchmal sehr teurer) kundenspezifischer Hardware, die ausschließlich zum Testen verwendet wird.
  • Sie geben enormen Aufwand für formale Tests aus.
  • Der Kunde (in der Regel JPL) ist extrem in den Testprozess involviert.
  • Im Allgemeinen verwenden Sie alte und bekannte Compiler und Entwicklungsumgebungen anstelle der neuen.
  • Code Reviews, Code Reviews und Code Reviews.
  • Es ist besser, wenn Sie bequem zwischen der Hardware- und der Software-Welt wechseln. Sie müssen nicht wissen, wie die Hardware zu entwerfen ist, aber Sie müssen wissen, wie sie funktioniert.
  • Umfangreicher Einsatz von Testgeräten wie Oszilloskopen, Logikanalysatoren, Synthesizern und Spektrumanalysatoren.
  • Mindestens 3 Speicherplätze für das Anwendungsprogramm. Der Standard ist im ROM gebrannt. Das wird sich nie ändern. Die anderen 2 sind für die aktuelle Version und die nächste / letzte Version.
  • Die Fehleranalyse (MTBF) ist wirklich wichtig.
  • Redundante Systeme und Failover-Pläne für die kritischen Komponenten.

Bis jetzt, aber warte, bis der Memristor kommt!
Lsalamon

Sie sagen, dass Code-Reviews dreimal negativ sind.
Kortuk

4
@Kortuk: Das war um zu betonen, dass Sie Code-Reviews WAY öfter durchführen werden als die meisten anderen Arten von Projekten, da die Folge eines Ausfalls nur der Verlust eines mehrere hundert Millionen Dollar teuren Satelliten ist. Und ich persönlich glaube, dass sie definitiv ein negatives, aber notwendiges Übel sind. Ich hasse es, Reviews zu halten, und ich hasse es, Reviews durchzuführen, aber sie haben ihren Wert, da sie Probleme finden, wie es keine andere Methode kann.
Dunk

100% stimmten zu. Notwendiges Übel ist eine akzeptable Beschreibung.
Kortuk

9
"Weltraumsoftware ist keine arkane Magie". Wenn es sich jedoch um eine ausreichend fortgeschrittene Weltraumsoftware handelt, wäre sie nicht von der arkanen Magie zu unterscheiden.
Robert

29

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.


21

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.


Und lassen Sie alle Fehlerreaktionen sorgfältig planen, in der Überzeugung, dass sie benötigt werden.
Mike Dunlavey

Fehlerreaktionen werden am besten in den Code eingefügt. Der Fehler tritt zu einem Zeitpunkt seiner Wahl auf. Muss Fehler melden, insbesondere wenn diese behoben wurden. Die Maschine muss für sich selbst sorgen, bis die "Computer Fail" -Anzeige erlischt.
Tim Williscroft

9

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:


Mars Polar Lander. (unzureichende Tests)
Tim Williscroft

1
Mars Klima Orbiter: Einheiten Verwirrung. Einfach SI verwenden und fertig.
Tim Williscroft

6

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:

  1. Sprachkompatibilität

    • Verirren Sie sich nicht außerhalb der Sprachdefinition.
    • Kompilieren Sie mit allen aktivierten Warnungen. Verwenden Sie statische Quellcode-Analysatoren.
  2. Vorhersehbare Ausführung

    • Verwenden Sie überprüfbare Schleifengrenzen für alle Schleifen, die terminiert werden sollen.
    • Verwenden Sie keine direkte oder indirekte Rekursion.
    • Verwenden Sie nach der Task-Initialisierung keine dynamische Speicherzuweisung.
    • * Verwenden Sie IPC-Nachrichten für die Aufgabenkommunikation.
    • Verwenden Sie keine Task-Verzögerungen für die Task-Synchronisierung.
    • * Explizite Übertragung der Schreibberechtigung (Eigentumsrechte) für freigegebene Datenobjekte.
    • Beschränken Sie die Verwendung von Semaphoren und Sperren.
    • Verwenden Sie Speicherschutz, Sicherheitsränder und Barrieremuster.
    • Verwenden Sie nicht goto, setjmp oder longjmp.
    • Verwenden Sie keine selektiven Wertzuweisungen für Elemente einer Aufzählungsliste.
  3. Defensive Codierung

    • Deklarieren Sie Datenobjekte auf der kleinstmöglichen Ebene.
    • Überprüfen Sie den Rückgabewert von nicht ungültigen Funktionen oder setzen Sie diesen explizit auf (ungültig).
    • Überprüfen Sie die Gültigkeit der an Funktionen übergebenen Werte.
    • Verwenden Sie statische und dynamische Behauptungen als Sicherheitsprüfungen.
    • * Verwenden Sie U32, I16 usw. anstelle von vordefinierten C-Datentypen wie int, short usw.
    • Machen Sie die Reihenfolge der Auswertung in zusammengesetzten Ausdrücken explizit.
    • Verwenden Sie keine Ausdrücke mit Nebenwirkungen.
  4. Code-Klarheit

    • Setzen Sie den C-Preprozessor nur sehr eingeschränkt ein.
    • Definieren Sie keine Makros innerhalb einer Funktion oder eines Blocks.
    • Definieren Sie Makros nicht zurück oder neu.
    • Platzieren Sie #else, #elif und #endif in derselben Datei wie das entsprechende #if oder #ifdef.
    • * Platzieren Sie nicht mehr als eine Aussage oder Erklärung pro Textzeile.
    • * Verwenden Sie kurze Funktionen mit einer begrenzten Anzahl von Parametern.
    • * Verwenden Sie nicht mehr als zwei Indirektionsebenen pro Deklaration.
    • * Verwenden Sie nicht mehr als zwei Dereferenzierungsstufen pro Objektreferenz.
    • * Verstecken Sie Dereferenzierungsoperationen nicht in Makros oder Typedefs.
    • * Verwenden Sie keine nicht konstanten Funktionszeiger.
    • Umwandeln Sie Funktionszeiger nicht in andere Typen.
    • Stellen Sie keinen Code oder Deklarationen vor eine # include-Direktive.

*) Alle Regeln sind sollen Regeln, mit Ausnahme der mit einem Sternchen gekennzeichnet.


5

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.


3

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.


3

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.


2

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.


1

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.


0
  • Ja, der Hauptspeicher befindet sich auf den Forschungstafeln.
  • Dynamischer Speicher ist für eingebettete Systeme nicht gut. Zuverlässigkeitsprobleme.

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.