Autor Thema: Im Interrupt-Gate können Interrupts ausgeführt werden!!!  (Gelesen 5367 mal)

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
Hallo,

jetzt bin ich einbisschen durcheinander. Ich habe gerade gemerkt das ich in meinem Interrupt-Handler Interrupts ausführen kann, obwohl ich den Interrupt über ein Interrupt-Gate aufruhfe. Ein Interrupt-Gate erlaubt doch aber eigentlich keine Interrupt, dachte ich. Ich dachte fürs erlauben ist ein Trap-Gate zuständig. Auch wenn ich ganz oben im Interrupt ein cli schreibe, lassen sich Interrupts aufrufen. Ich teste das nämlich indem ich das rax Register auf Null setze, ein "int 30h" aufrufe der rax auf 2 setzt. Und unter dem "int 30h" mache ich ein jmp $. Dann schaue ich mir den Wert von rax in Bochs an. Und der Wert ist 2, also muss der "int 30h" ja aufgerufen worden sein. Das soll doch aber ein Interrupt-Gate verhindern!? Kann mir das jemand erklären?

bitmaster
In the Future everyone will need OS-64!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 29. July 2006, 15:18 »
Du scheinst mir ein wenig verwirrt zu sein :lol:

Es gibt Hardware- (irqs) & Sofwareinerrupts ("int 0xXX") und dann noch CPU Exceptions (page fault, division by zero). Nur Hardwareinterrupts sind vom status des interrupt flags betroffen.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #2 am: 29. July 2006, 15:23 »
Zitat von: bluecode
Du scheinst mir ein wenig verwirrt zu sein :lol:

Es gibt Hardware- (irqs) & Sofwareinerrupts ("int 0xXX") und dann noch CPU Exceptions (page fault, division by zero). Nur Hardwareinterrupts sind vom status des interrupt flags betroffen.
Cool, ich programmiere seit ewigkeiten und wusste das bis jetzt echt nicht. Was für eine ...  :oops: Na ja, ich bin ja auch dumm. Wie aktiviert man die Interrupts denn dann wieder?

bitmastr
In the Future everyone will need OS-64!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 29. July 2006, 15:48 »
Mit cli/sti kann man das Interrupt flag verändern. Die Softwareinterrupts und die CPU Exceptions kann man nicht aktivieren/deaktivieren (siehe oben). Gibt ja auch keinen Sinn...
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

billgates

  • Beiträge: 3
    • Profil anzeigen
    • http://www.osm-page.de
Gespeichert
« Antwort #4 am: 29. July 2006, 17:47 »
Zitat
Na ja, ich bin ja auch dumm. Wie aktiviert man die Interrupts denn dann wieder?
Das habe ich nicht geschrieben. Die IRQs kann man im Interrupt Handler soweit ich weiß nicht einfach aktivieren. Dafür ist ja das Trap-Gate da. Also im Interrupt-Gate und Trap-Gate kann man mit cli und sti nicht verändern, soweit ich weiß.

bitmaster

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #5 am: 29. July 2006, 18:17 »
Das stimmt nicht.Innerhalb des Interrupt/Trap-Gates kannst du die Hw-Interrupts aktivieren/deaktivieren wie du willst. Nur wenn du dann wieder mit iret zurückkehrst wird der Zustand des Interruptflags wieder auf den Zustand vor dem Interrupt/Trap-Gate gesetzt, da ja die eflags von int/iret gesichert/wiederhergestellt werden. Evtl hast du es damit verwechselt.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

billgates

  • Beiträge: 3
    • Profil anzeigen
    • http://www.osm-page.de
Gespeichert
« Antwort #6 am: 29. July 2006, 18:27 »
Zitat von: bluecode
Das stimmt nicht.Innerhalb des Interrupt/Trap-Gates kannst du die Hw-Interrupts aktivieren/deaktivieren wie du willst.
Ah so, jo das wusste ich jetzt nicht genau. danke

Zitat von: bluecode
Nur wenn du dann wieder mit iret zurückkehrst wird der Zustand des Interruptflags wieder auf den Zustand vor dem Interrupt/Trap-Gate gesetzt, da ja die eflags von int/iret gesichert/wiederhergestellt werden. Evtl hast du es damit verwechselt.
Ja das weiß ich, Nein das habe ich damit nicht verwechselt.

bitmaster

 

Einloggen