2016-07-10 96 views
0

Welche Zustände speichert die CPU automatisch, wenn ein Interrupt auftritt? Und in welcher Reihenfolge?Welche Register werden beim Auftreten eines Interrupts auf den Stapel geschoben?

+1

Warum sollte die Bestellung wichtig sein? Um zu sehen, was der Linux-Kernel tut, überprüfen Sie den tatsächlichen Code, der dies behandelt: https://github.com/torvalds/linux/blob/master/arch/x86/entry/entry_64.S –

+0

Welche CPU? Welcher Modus (echt/geschützt/lang)? Welche Art von Unterbrechung? Normalerweise liest man nur die Beschreibung seiner CPU-Architektur und verwendet Befehle, um Software-Interrupts zu generieren, sw/hw-Interrupts zu verarbeiten und von Interrupts zurückzukommen. Die Dokumentation definiert auch, was von hw gespeichert wurde, und wenn Sie einige weitere Register verwenden möchten, müssen Sie diese vor der Verwendung und Wiederherstellung vor dem Beenden von ISR speichern. – osgx

+0

@osgx: Dies ist markiert x86, so dass wir zumindest wissen, welche Architektur. Ich kann nicht glauben, dass dies kein Duplikat von etwas wie http://stackoverflow.com/questions/26024371/where-does-intel-80386-save-registers oder http://stackoverflow.com/questions/6332517 ist/how-do-the-registers-get-gespeichert-wenn-ein-Prozess-wird unterbrochen. Obwohl vielleicht einer von denen als ein duplex markiert werden sollte oder nicht, da der zweite nicht einmal x86-spezifisch ist. –

Antwort

4

Welche Zustände werden von der CPU automatisch gespeichert, wenn ein Interrupt auftritt?

Einige Register werden gespeichert; Dieser Satz ist durch die CPU-Architektur definiert. Es kann gespeichert werden, um zu stapeln, zu festen Adresse im Speicher oder in Shadow-Registern. Normalerweise ist dieser Satz von Registern klein, wenn ISR mehr benötigt, kann er sie durch echten Code speichern, nicht durch automatische CPU-Hardware. (Überprüfen Sie den Link von Cody Gray bei "Interrupt-Eingang/Ausgang.")

Und in welcher Reihenfolge?

Reihenfolge der Registerspeicherung, wenn sie zum Stack geschoben werden, wird durch die Architektur definiert.

für die Standard-Architektur, die x86/x86_64 die Definition wie ist (das erste Glied in meiner Antwort https://stackoverflow.com/a/38031260/196561 in Ihrer vorherigen Frage bereits gelistet, mit "* FLAGS, CS, IP" Reihenfolge):

https://en.wikibooks.org/wiki/X86_Assembly/Advanced_Interrupts & iret Dokumentation http://www.felixcloutier.com/x86/IRET:IRETD.html

  • im Real-Modus, auf Interrupt-Hardware schiebt FLAGS, Push CS, Push IP; iret Anweisung wird sie neu laden, um an den Benutzer zurückzukehren.
  • im geschützten Modus überprüfen VM und NT Flags in EFLAGS zu finden, wie zu starten und von Interrupt zurück. Auf hw-Interrupt (welche Art von Interrupt Sie in Frage stellen) - Überprüfen Sie, dass Stack 10-20 Bytes hat; Laden SS, ESP, CS: EIP/CS: IP; "langen Zeiger auf alten Stapel drücken", eflags drücken, "langen Zeiger drücken, um die Stelle zurück zu geben"
  • Die tatsächliche Logik ist komplexer. Es gibt eine Logik in 386 für die Eingabe in den Interrupt http://intel80386.com/386htm/INT.htm und für den Ire http://intel80386.com/386htm/IRET.htm ("Operation").

    +0

    Schöne Erklärung! –

    +0

    Danke Mann. Gibt es Dokumentation für x86-Architektur? –

    +0

    Es gibt "die Dokumentation" für x86 von Intel, "Intel® 64 und IA-32 Architekturen Software Developer Handbücher" http://www.intel.com/content/www/us/en/processors/architectures-software-developer -Anleitungen.html - aber es ist zu komplex (es beschreibt viele Versionen von x86 von Intel). Sie können von etwas leichterem beginnen, wie MIPS (DLX) oder sogar RISC-V, oder von frühesten Informationen wie 386 ([400 Seiten] (http://css.csail.mit.edu/6.858/2015/readings/i386) .pdf), 1986), 586, Pentium. Oder inoffiziell wie das Buch "Unabridged Pentium 4, The: IA32 Processor Genealogy" (2004). + http://stackoverflow.com/tags/x86/info – osgx