====== 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. |