====== Memory Scrubbing (Code-Integrität) ====== **Memory Scrubbing** ist ein präventiver Sicherheitsmechanismus in Lyx (v0.9.0+), der darauf abzielt, "schleichende" Speicherfehler (Single Event Upsets / Bit-Flips) im Programmbereich (Code-Segment) zu erkennen, bevor sie ausgeführt werden. Dies ist besonders kritisch für Systeme, die kosmischer Strahlung ausgesetzt sind (Aerospace), da ein Bit-Flip in einer Instruktion zu unvorhersehbarem Programmverhalten führen kann. ===== 1. Aktivierung via @integrity ===== Das Scrubbing wird durch das Modul- oder Funktions-Attribut ''@integrity'' mit dem Modus ''scrubbed'' konfiguriert. @integrity(mode: scrubbed, interval: 100) unit nav.core; * **mode: scrubbed**: Aktiviert die periodische Überprüfung des Codesegments. * **interval: 100**: Legt fest, dass alle 100 Millisekunden ein vollständiger Prüfdurchlauf (Sweep) stattfinden soll. ===== 2. Funktionsweise: Der Hintergrund-Sweep ===== Im Gegensatz zum [[Software-Lockstep]], der während der Berechnung prüft, arbeitet das Scrubbing als Hintergrundprozess oder periodischer Interrupt: - **Referenz-Hashes**: Der Compiler hinterlegt bei der Erstellung drei identische CRC32-Hashes des Codesegments in der [[.meta_safe]] ELF-Sektion. - **Periodische Prüfung**: Die Runtime liest das aktuelle Codesegment im RAM bitweise aus und berechnet einen neuen Prüfsummenwert. - **TMR-Vergleich**: Der neu berechnete Wert wird gegen die drei Referenz-Hashes in ''.meta_safe'' verglichen (Triple Modular Redundancy). - **Fehlermeldung**: Wird eine Abweichung festgestellt (d. h. der RAM-Inhalt stimmt nicht mehr mit der Mehrheit der Hashes überein), wird ein Integritätsfehler ausgelöst, bevor der korrumpierte Code Schaden anrichten kann. ===== 3. Integration mit VerifyIntegrity() ===== Entwickler können den Scrubbing-Status auch manuell innerhalb der Applikationslogik abfragen, um auf erkannte Fehler zu reagieren: fn main(): int64 { if (!VerifyIntegrity()) { // Notfall-Prozedur: Systemneustart oder Umschalten auf Backup-Computer panic("Code corruption detected via Memory Scrubbing"); } return 0; } ===== 4. Vor- und Nachteile ===== ^ Merkmal ^ Beschreibung ^ | **Vorteil** | Erkennt Fehler in passiven Codeteilen, bevor diese aufgerufen werden. | | **Vorteil** | Geringerer Performance-Impact pro Instruktion im Vergleich zu Lockstep. | | **Nachteil** | Zwischen zwei Sweeps besteht ein kleines Zeitfenster, in dem ein Fehler unentdeckt bleiben kann (abhängig vom Intervall). | | **Einschränkung** | Erfordert die ''.meta_safe'' Sektion im ELF-Header für den TMR-Vergleich. |