Forum: PC-Programmierung easy OS wechsel


von Patrick O. (sir-patrick)


Lesenswert?

Hallo erstmal!

Mir ist da eine Idee gekommen, als ich mich mit der IA-32 Architektur 
näher beschäftigt habe.

Könnte man ein Betriebssystem nicht einfach einfrieren und darauf hin 
ein anderes bzw. eigenes BS ohne Neustart starten, in dem man z.B. den 
Programmable Interupt Controller einfach umkonfiguriert, eigene Interupt 
Service Routinen auszuführen?

Solche paar-Byte Codes zum umkonfigurieren des PIC sollte man doch 
irgendwie ausführen können, wie zum Beispiel unter Windows oder Linux.

Ich freue mich schon mal auf eure Kommentare und Einfälle

von Bernhard M. (boregard)


Lesenswert?

ein Betriebssystem ist einiges mehr als nur die Interrupt Service 
Routinen...

Das Prnzip mit dem "Einfrieren" und "Starten ohne Neustert" nennt sich 
"Suspend" oder "Hibernate" oder ähnlich...

von Sebastian (Gast)


Lesenswert?

Sowas gibts auf dem X86, zb loadlin lädt den Linux kernel aus dem Dos 
heraus :-))

von sohalt (Gast)


Lesenswert?

loadlin tut aber weit mehr, als den PIC umzuprogrammieren. Loadlin nutzt 
(afaik) aus, dass bei DOS alles im ring0 läuft, somit kann es einfach 
den Kernel an die gewünschte Stelle laden (ist Linux btw nicht seit 
neuem auf Wunsch relocateable?), und das EIP-Register da rein setzen.

Linux selbst setzt dann die IDT etc.. Deswegen wird auch ring0 benötigt.

Bei modernen Betriebssystemen, bei denen Usermode im ring3 läuft ist das 
ein bischen anders. Dort wird, um in den ring0 zu kommen ein syscall 
getätigt, damit der Kernel es in seinem ring0 machen kann. Mittels kexec 
kann man so auch von einem Linux-System einen beliebigen Linux oder 
Multiboot-fähigen Kernel laden.

Was also loadlin für DOS ist, ist kexec für Linux, und das ist 
garnichtmal so neu.

Das größte Problem an dem "Betriebssystem einfach einfrieren und neues 
laden" ist also der Scheduler und, wie bereits gesagt wurde, die 
Interrupts, und zwar nicht nur die IRQs.

PS: "Paar-Byte Codes zum Mmkonfigurieren des PIC" lassen ich im ring3 
eben nicht irgendwie ausführen. Dafür benötigt man Port-Zugriffe, welche 
im ring3 grundsätzlich eine General Protection Fault auslösen. Bei 
modernen Betriebssystemen wird der Prozess, der das versucht, getötet.

von Jupp (Gast)


Lesenswert?

Das gab es schon für den C64 als Modul, nannte sich Final Cartridge oder 
so. Knopfdruck, schon war alles eingefroren.

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.