Während eines x86-Software-Interrupts wird wann genau ein Kontextwechsel durchgeführt?
Ich frage dies, weil ich versuche, Interrupts in meinem Spielzeugkernel zu implementieren. Ich weiß also, dass die CPU beim Auftreten eines Interrupts verschiedene Informationsbits auf den Stapel schiebt. Überall, wo ich online suche, werden unterschiedliche Informationen in unterschiedlicher Reihenfolge angezeigt. Ich weiß auch, dass, wenn der Interrupt im Benutzermodus (Ring 3) aufgetreten ist, die CPU in den Kernelmodus (Ring 0) wechseln muss, bevor sie den ISR ausführen kann. Ich denke, es hat etwas mit dem @ zu tTSS
undss
undesp
, aber ich bin mir nicht sicher. Ich habe im Internet verschiedene Erklärungen gelesen und noch keine einheitliche gefunden.
Someine Frage ist in wasgena order schiebt die (x86) -CPU während eines Interrupts Daten auf den Stack und wann und zu welchem Zeitpunkt führt sie einen Kontextwechsel über das @ durTSS
und wie wirkt sich das auf die Daten aus, die auf den Stack gepusht werden, wenn überhaupt?
Was ich bisher aus der Forschung gelernt habe (korrigiere mich, wenn ich falsch liege): Ich bin mir ziemlich sicher, dass der Prozessor @ drüceflags
, cs
undeip
auf den Stapel sowie einerror code
ggf. während eines Interrupts. Ist dies jedoch alles, was geschoben wird? Ich habe an anderer Stelle gelesen, dassss
undesp
werden gepusht, aber ich weiß nicht, ob dies die ganze Zeit passiert, oderWaru es wird gedrückt.
Außerdem glaube ich, dass die CPU im @ aussehen wiTSS
für den Ring0ss
undesp
undn einem gewissen Punlad sie, aber ich bin mir nicht sicher wann. Vielleicht macht es das gleich nach dem Auftreten des Interrupts? Auch wie istcs
undds
während all dem gehandhabt? Istcs
wird von der CPU aus dem Eintrag im @ geladIDT
? Wie wäre es mitds
? Muss ich das manuell laden?
Tut mir leid, wenn dies der falsche Ort ist, um zu fragen, ich bin nicht sicher, wo ich sonst sollte.