2012-04-04 18 views
1

Wir haben eine eingebettete Anwendung, jetzt muss der Status gespeichert und neu geladen werden. Genau wie in PC-Spielen, wo Sie es speichern, bevor Sie etwas frische Luft einatmen müssen. Das Produkt ist ruhig evolutionär in der Natur, kein richtiges Design, so dass die Identifizierung von Daten, die gespeichert werden sollen, keine Option ist.Embedded Linux, Anwendungszustand Freeze, Relaunch

Die Software ist in C, also haben alle Daten feste Adressen (.data Segment), es ist auch deterministisch, a und keine dynamischen Speicherzuordnungen. Also nehme ich theoretisch dieses Datensegment in einer Datei auf und aktualisiere es beim Neustart der Anwendung wieder von der Datei. Dieser Ansatz wird wahrscheinlich viel mehr Daten speichern als erforderlich, aber ich bin damit einverstanden.

Wie kann ich dies in kurzer Ausführungszeit tun?
Wie kann ich auch den Anfang und das Ende des .data-Segments in der Laufzeit identifizieren?

Antwort

2

Sie möchten application checkpointing, also vielleicht die Berkley Lab Checkpoint Restart Bibliothek könnte Ihnen helfen.

Sie vielleicht könnte das mmap(2) Systemaufruf verwenden, wenn Sie sicher sind, die alle Daten feste Adressen, etc ...

über Ihre aktuelle Speichersegmente und Zuordnungen wissen, lesen (aus Ihrer Anwendung) die /proc/self/maps Datei. Es gibt auch /proc/self/smaps usw. Erfahren Sie mehr über proc(5), dh /proc/