Computer Neustarten und Runterfahren



  • Ein Neustarten des Computers und des Betriebssystems durch einen Reboot als sinnfrei zu bezeichnen ist, naja, amüsant. Zudem kenne ich kein Betriebssystem, was auf die Weise, wie du sie schlidest +gjm+ rebooted (wenn man von Techniken wie Supsend-to-RAM und Suspend-to-Disk einmal absieht).



  • DerHartmut schrieb:

    Zudem kenne ich kein Betriebssystem, was auf die Weise, wie du sie schlidest +gjm+ rebooted

    Es wird wohl nicht auf die beschriebene Weise funktionieren, aber ich kann hier bei Linux (openSUSE 11.1/KDE 3.5) einen Reboot durchführen, nach dem ein vorher festgelegtes Betriebssystem (aus dem GRUB-Menü) gestartet wird.

    +gjm+ schrieb:

    Wenn ein OS-Wechsel via reboot funktioniert, dann ist das eher ein glücklicher Zufall.

    Nein, ist es nicht. Sieh dir den Code an. Der schickt 0xFE zum I/O-Port 0x64, dies resultiert in einem CPU-Reset. Das ist kein glücklicher Zufall, das ist das, was der Code will.



  • XanClic schrieb:

    +gjm+ schrieb:

    Wenn ein OS-Wechsel via reboot funktioniert, dann ist das eher ein glücklicher Zufall.

    Nein, ist es nicht. Sieh dir den Code an. Der schickt 0xFE zum I/O-Port 0x64, dies resultiert in einem CPU-Reset.

    Aber was passiert dann?

    Die CPU ist im Realmode und fängt an, Code (das BIOS) an Adresse F000:FFF0 auszuführen. Genau wie beim Einschalten des Rechners. Nur eben, daß das BIOS erst den CMOS Shutdown Status prüft, bevor dann der Code des "Bootdevice" eventuell geladen und ausgeführt wird. Beim Einschalten des Rechners ist der Shutdown Status immer 0. Das ist so (hardwareverdrahtet) definiert. Aber beim Reboot ist er das, was das Betriebssystem reingeschrieben hat. Was heißt, bei Windows z.B. ==undokumentiert==. 😞



  • OK, da muss ich dir Recht geben.

    Ich bezweifle aber, dass heutige Betriebssysteme das wirklich nutzen. Und so wie ich das sehe, sollte folgender Code reichen, um ein normales Reset durchzuführen:

    outb(0x70, (inb(0x70) & 0x80) | 0x0F);
    outb(0x71, 0);
    

    Und danach dann eben outb(0x64, 0xFE); oder was auch immer.

    Aber ich muss dir trotzdem widersprechen, dass ein Reboot nicht dazu gedacht ist, andere Betriebssysteme zu starten. Nur, weil es bei der Windowsoption "Neu Starten" im Tooltip "Den Computer herunterfahren und Windows neu starten" heißt, ist das eher ein Verweis auf die Monopolstellung von Windows als auf die Möglichkeit, andere Betriebssysteme zu starten.

    btw: Es wäre wohl trotzdem nicht reine Glückssache. So wie ich dich verstanden habe, werden die Shutdowncodes > 3 nur für den direkten Start in das eigene Betriebssystem verwendet. Damit kann PrettyOS also nicht gestartet werden. Und nach einem kompletten Reset (also mit POST, etc.) oder einem normalen Start (nachdem der Computer aus war) steht ja 0 bis 3 drin, was wieder zu einem kompletten Reset führt. 😃



  • Ich hoffe ehenkes lässt sich durch solche unsinnigen Diskussionen nicht in seinem Ziel (Weltherrschaft oder so) beirren.


  • Mod

    ..



  • Erhard Henkes schrieb:

    Weltherrschaft oder so

    Das war Bill Gates, und selbst der hat nun Linux und Sonstiges am Hals. 😃

    Welche OS haben denn überhaupt einen reboot-Befehl? Sollte es keine namhaften geben, dann verschwindet dieses "utility" eben aus der Datei util.c.

    Windows hat shutdown -r
    Linux hat reboot
    Windows hat ExitWindowsEx(EWX_REBOOT,
    Linux hat reboot(LINUX_REBOOT_CMD_RESTART)


  • Mod

    Danke für den Hinweis!
    http://msdn.microsoft.com/en-us/library/bb416523.aspx

    EWX_REBOOT - Shuts down the system and reboots the device.

    siehe auch: http://www.c-plusplus.net/forum/viewtopic-var-t-is-39051.html



  • +gjm+ schrieb:

    Nur eben, daß das BIOS erst den CMOS Shutdown Status prüft, bevor dann der Code des "Bootdevice" eventuell geladen und ausgeführt wird. Beim Einschalten des Rechners ist der Shutdown Status immer 0. Das ist so (hardwareverdrahtet) definiert. Aber beim Reboot ist er das, was das Betriebssystem reingeschrieben hat. Was heißt, bei Windows z.B. ==undokumentiert==. 😞

    Aber wenn der PrettyOS-Reboot-Code läuft, ist ja zum Glück kein Windows, sondern ein PrettyOS aktiv und hat es selbst in der Hand. 🙂


  • Mod

    Man könnte den Reboot versuchsweise auf Strg + Alt + Entf oder innovativ auf Shift + AltGr + r legen. 😉

    XanClic hat ja erwähnt, wie man zur Sicherheit eine 0 ins entsprechende CMOS-Register schreibt.


Anmelden zum Antworten