Inhaltsverzeichnis

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;

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:

  1. Referenz-Hashes: Der Compiler hinterlegt bei der Erstellung drei identische CRC32-Hashes des Codesegments in der ELF-Sektion: .meta_safe ELF-Sektion.
  2. Periodische Prüfung: Die Runtime liest das aktuelle Codesegment im RAM bitweise aus und berechnet einen neuen Prüfsummenwert.
  3. TMR-Vergleich: Der neu berechnete Wert wird gegen die drei Referenz-Hashes in .meta_safe verglichen (Triple Modular Redundancy).
  4. 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.