Forum: Compiler & IDEs Programm nach reboot fortsetzten


von E. G. (grasshuepf)


Lesenswert?

Hallo,

ich versuche grad ein programm welches ich geschrieben hab, nach dem 
reboot von der stelle fortzusetzten wo der reboot stattgefunden hat.

Allerdings habe ich keinen ansatz dafür.

hab zwar etwas gegooglet, aber nichts gefunden. vielleicht suche ich ja 
falsch.

Kann mir jemand da behilflich sein???

danke im voraus!

von Peter (Gast)


Lesenswert?

Wenn du uns nicht mal die platform sagst, wird es sehr schwer.

von Tobi (Gast)


Lesenswert?

Mit einer entsprechenden Lochkarte geht das auf einer PDP-11

von Klaus W. (mfgkw)


Lesenswert?

Kein Problem auf allen Rechnern, die einen Ringkernspeicher haben 
(core).

von Mark B. (markbrandis)


Lesenswert?

Klaus Wachtler schrieb:
> Kein Problem auf allen Rechnern, die einen Ringkernspeicher haben

Scherzkeks :)

von Klaus W. (mfgkw)


Lesenswert?

Wieso? Vielleicht hat er so einen.
Zumindest habe ich nichts gegenteiliges gelesen!

von Michael B. (mb_)


Lesenswert?

E. Grass schrieb:
> ich versuche grad ein programm welches ich geschrieben hab, nach dem
> reboot von der stelle fortzusetzten wo der reboot stattgefunden hat.

Dieses Problem ist nicht ganz trivial zu lösen.

Die sicherste Lösung wäre suspend-to-disk. Das ist natürlich kein 
richtiger reboot, aber wenn es dir nur ums Ausschalten und nicht um das 
rebooten in einen neuen Kernel oder so geht die einfachste und sicherste 
Lösung.

Eine weitere Lösung ist das laufende Programm zu "checkpointen". Das ist 
allerdings nicht ganz einfach und generell umstritten ob dies überhaupt 
sinnvoll machbar ist, weil da so viele Parameter mit reinspielen. Für 
Linux gibts eine experimentelle Implementierung von "Checkpoint / 
Restart" (einfach mal danach googlen). Ich würde aber davon eher abraten 
und wo es geht suspend-to-disk einsetzen.

Die dritte Lösung ist natürlich das Programm dahingehend zu ändern, dass 
es den Status abspeichern und von der Festplatte laden kann. Das ist im 
Gegensatz zum OS-basierten checkpointing wesentlich einfacher zu 
implementieren.

von Rolf Magnus (Gast)


Lesenswert?

Tobi schrieb:
> Mit einer entsprechenden Lochkarte geht das auf einer PDP-11

Klaus Wachtler schrieb:
> Kein Problem auf allen Rechnern, die einen Ringkernspeicher haben
> (core).


Für was es nicht alles einen GCC gibt... ;-)

von Volker Z. (vza)


Lesenswert?

Du musst den funktionalen Ablauf deines Programmes nicht als folge von 
Befehlen implementieren, sondern als Statemachine. Dessen Zustand kann 
mann relativ einfach abspeichern. z.B. beim Brownout.
Nach dem Restart wieder einlesen und weiter gehts.
Kann je nach Aufgabe sehr komplex werden.

von Detlev T. (detlevt)


Lesenswert?

Mir ist die Frage zu unpräzise. Was ist mit einem "Reboot" gemeint? Es 
ist doch eigentlich die Eigenart eines Reboot-Vorganges, dass das 
Programm eben nicht weiter ausgeführt wird, sondern "von vorn" begonnen 
wird. So gesehen wäre es ein Paradoxon.

Bei einem Mikrocontroller könnte man, wenn er "hängt", statt eines 
Hardware-Resets einen Interrupt nutzen. Der ISR würde diese Information 
ja dann zur Verfügung stehen - solange der Stack noch intakt ist. Die 
ISR könnte die Situation dann analysieren, eventuell das System 
modifizieren und dann die Ausführung an der gleichen Stelle fortsetzen.

von E. G. (grasshuepf)


Lesenswert?

Die ansätze von Michael B. und Volker Z. waren schon in der Richtung die 
ich meinte.

Sorry, dass ich etwas unpräzise war.

Ich möchte die Systemuhr/Hardwareuhr meines Systems Linux testen. Dafür 
wollte ich ein programm schreiben und ein neustart innerhalb des 
Programmes aufrufen und dann den Test von dort fortsetzten so innerhalb 
meines Programmes der neustart(reboot) aufgerufen wurde.

@Volker Z.: hast du vielleicht eine link wo man mehr dazu lesen kann, 
insbesondere ein teil mit, wie man zustände speichert ?

@Michael B.: es soll kein neuer Kernel rebootet werden.
Es stellt sich für mich noch die Frage, wie ich das Programm welches ich 
geschrieben habe, nach dem neustart automatisch wieder starte.

Vielleicht habt ihr links wo sowas ähnliches zum lesen gibt.

von Michael B. (mb_)


Lesenswert?

E. Grass schrieb:
> wollte ich ein programm schreiben und ein neustart innerhalb des
> Programmes aufrufen und dann den Test von dort fortsetzten so innerhalb
> meines Programmes der neustart(reboot) aufgerufen wurde.
>
> Es stellt sich für mich noch die Frage, wie ich das Programm welches ich
> geschrieben habe, nach dem neustart automatisch wieder starte.

Das da ist doch ganz einfach lösbar ohne eine einzige Änderung am 
System.
Übergib dem Programm einen Parameter. Wenn der Parameter gesetzt ist, 
machst du halt da weiter wo do weiter machen möchtest.

Für ein automatisches Starten nach dem booten gibt es viele 
Möglichkeiten. Eine Einfache wäre vielleicht ein initscript zu machen.

von Michael B. (mb_)


Lesenswert?

E. Grass schrieb:
> Ich möchte die Systemuhr/Hardwareuhr meines Systems Linux testen.

Ich frag mich was es da zu testen gibt. Und was nimmst du als Referenz 
beim Testen?

von Volker Z. (vza)


Lesenswert?

Suche nach "Endlicher Automat" oder „Finite State Machine“.

Der Zustand wird in einer "gewöhnlichen" Variablen gespeichert.
Wo du sie "Neustart fest" speicherst, hängt von deinem System ab 
(eeprom,Fash,SD-Karten, SSD, Harddisk, etc..

RAM geht auch, wen er nicht beim Neustert überschrieben wird und du nur 
einen Warmstart machst.

Was für eine system hast Du?

von mar IO (Gast)


Lesenswert?

E. Grass schrieb:
> Ich möchte die Systemuhr/Hardwareuhr meines Systems Linux testen. Dafür
> wollte ich ein programm schreiben und ein neustart innerhalb des
> Programmes aufrufen und dann den Test von dort fortsetzten so innerhalb
> meines Programmes der neustart(reboot) aufgerufen wurde.

Mir ist zwar nicht klar für was Du einen Reboot brauchst, aber ja...

Du möchtest ja an einer bestimmten Stelle in deinem Programm einen 
Reboot machen. Also hast Du somit schon zwei Zustände: normaler 
Programmstart, Programmstart nach reboot. Also musst Du dir den Zustand 
irgendwie merken (z.B. auf die Festplatte speichern). Wenn Du eben dein 
Programm startest, fragst Du den letzten Zustand ab. KDE, Gnome, Xfce 
und wie sie noch alle heißen haben doch sicher einen Autostart-Ordner 
oder der gleichen. Dein Programm legt hier einen symbolischen Link auf 
sich selber an.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rolf Magnus schrieb:

> Klaus Wachtler schrieb:
>> Kein Problem auf allen Rechnern, die einen Ringkernspeicher haben
>> (core).

Das war auch mein erster Gedanke. ;-)

> Für was es nicht alles einen GCC gibt... ;-)

PDP-11 steht offenbar nach wie vor in der Liste der unterstützten
Zielarchitekturen. ;)

von E. G. (grasshuepf)


Lesenswert?

Volker Zabe schrieb:
> Suche nach "Endlicher Automat" oder „Finite State Machine“.
>
> Der Zustand wird in einer "gewöhnlichen" Variablen gespeichert.
> Wo du sie "Neustart fest" speicherst, hängt von deinem System ab
> (eeprom,Fash,SD-Karten, SSD, Harddisk, etc..
>
> RAM geht auch, wen er nicht beim Neustert überschrieben wird und du nur
> einen Warmstart machst.
>
> Was für eine system hast Du?

Wenn dann müsste ich auf Flash speichern. Ich dachte mir ich ereuge 
einfach eine Datei, lege sie ab und dann wenn das programm durch ist 
lösch ich die datei wirder

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.