Hallo,
Jetzt muss ich mal meine letzten x86-Kenntnisse zusammenkratzen:
Gehen wir davon aus (ich hab gleich mal den Compiler laufen lassen):
Ich hoffe mal ich hab mich jetzt nicht zu sehr blamiert.
Grüße
Erik
while(1) asm("hlt") interessiert sich für den Stack herzlich wenig. Du kannst denselben Code also mit demselben Stack auf mehreren CPUs ausführen und es passiert immer noch nichts böses.Sicher?
Jetzt muss ich mal meine letzten x86-Kenntnisse zusammenkratzen:
Gehen wir davon aus (ich hab gleich mal den Compiler laufen lassen):
Code: [Auswählen]
label_loop:
hlt
jmp label_loopund das soll in Ring 0 laufen (wegen dem HLT). Wenn jetzt ein IRQ kommt dann muss doch der aktuelle EIP (und noch einiges mehr) auf den Stack geschrieben werden und da wir bereits im Ring 0 sind kann die CPU nicht einen anderen Stack aus dem TSS nehmen (in den Gates in der IDT sind doch nur CS:EIP enthalten). Oder irre ich da? Wenn also mehrere CPUs auf IRQs reagieren müssen (ich weiß gar nicht ob das bei x86 überhaupt geht aber gehen wir mal davon aus es ginge, zumindest mit allen APICs sollte es gehen) dann würden IMHO die EIPs usw. alle auf dem selben Stack landen. Der kleine Code selber interessiert sich wirklich nicht für den Stack aber der IRQ, der ja nötig ist um HLT zu beenden, interessiert sich schon für den Stack.Ich hoffe mal ich hab mich jetzt nicht zu sehr blamiert.

Grüße
Erik

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert


