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!
Kein Problem auf allen Rechnern, die einen Ringkernspeicher haben (core).
Klaus Wachtler schrieb: > Kein Problem auf allen Rechnern, die einen Ringkernspeicher haben Scherzkeks :)
Wieso? Vielleicht hat er so einen. Zumindest habe ich nichts gegenteiliges gelesen!
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.
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... ;-)
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.
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.
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.
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.
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?
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?
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.
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. ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.