Die Lyx-Sprachspezifikation (v0.9.0+) implementiert umfassende Mechanismen zur Triple Modular Redundancy (TMR), um die Anforderungen an die Fehlertoleranz in sicherheitskritischen Umgebungen (z. B. DO-178C DAL A) zu erfüllen. Ziel ist der Schutz gegen hardwarebedingte Bit-Flips (Single Event Upsets) durch Strahlung oder Speicherfehler.
Globale Variablen können mit dem Attribut @redundant markiert werden. Dies veranlasst den Compiler, die Variable redundant im RAM zu verwalten.
@redundant var thrust_vector: int64;
Für den Schutz des ausführbaren Codes generiert Lyx bei Verwendung des @integrity-Pragmas auf Unit-Ebene eine spezielle ELF-Sektion namens .meta_safe.
Die Sektion ist 8232 Bytes groß und enthält drei identische CRC32-Hashes des Code-Segments:
| Offset | Feld | Typ | Beschreibung |
|---|---|---|---|
| 0..15 | code_va | uint64 | Start- und End-Virtual Address des Codes |
| 16..23 | params | uint32 | Modus (lockstep, scrubbed, ecc) und Intervall |
| 32..35 | hash_copy_1 | uint32 | CRC32 IEEE 802.3 des Codes |
| 4128..4131 | hash_copy_2 | uint32 | Identische Kopie 2 (nach 4096B Padding) |
| 8224..8227 | hash_copy_3 | uint32 | Identische Kopie 3 (nach weiteren 4096B Padding) |
Das 4096-Byte-Padding stellt sicher, dass ein lokaler Hardwaredefekt (z.B. eine defekte Speicherzeile) nicht mehrere Hashes gleichzeitig korrumpieren kann.
Das Builtin VerifyIntegrity() dient der aktiven Überprüfung der Programm-Integrität zur Laufzeit.
bool..meta_safe gespeicherten Referenz-Hashes durch.true, wenn die Integrität durch mindestens zwei übereinstimmende Hashes bestätigt wird, andernfalls false.
Das Attribut @integrity unterstützt verschiedene Modi für das Integritäts-Management:
| Modus | Beschreibung |
| — | — |
software_lockstep | Redundante Ausführung mit Ergebnisvergleich. |
scrubbed | Periodischer Hintergrund-CRC-Memory-Sweep (Intervall empfohlen). |
hardware_ecc | Vertrauen auf Hardware-ECC-Speicherkorrektur. |
Dokumentation basierend auf Lyx Sprachspezifikation v0.9.0 (Aerospace-Todo P0/P2)