Wie wird die CPU von APIC unterbrochen und wie werden gemeinsame Interrupts behandelt?

442
Karim Manaouil

Jedes PCIGerät hat 4 Interrupt-Pins. Pins von vielen verschiedenen PCIGeräten auf der Hauptplatine (eingebaute oder externe Geräte) werden IO-APICüber einen programmierbaren Interrupt-Router an einen (Advanced programmable Interrupt Controller) geroutet . Das war also die Topologie.

Soweit ich weiß, wann ein Interrupt auftritt, IO-APICwird das signalisiert und es wird ein INT an die CPU angehoben, dann wird Magie ausgelöst und die CPU beginnt, eine ISR (Interrupt Service Routine) auszuführen.

Was war das für ein Zauber?

Was ist die Kommunikation, die zwischen der CPU und IO-APICdem INT erfolgen soll?

Ich meine, wie erhält die CPU den Interrupt-Vektor (ist dies ein spezieller PCIBuszyklus?) Und was passiert, wenn derIRQwurde von vielen Geräten gemeinsam genutzt ( x86 Linuxals Plattformreferenz übernehmen)?

0
Related: https://superuser.com/questions/218179/can-someone-explain-to-me-how-the-cpu-finds-the-source-of-an-interrupt-in-os-the Mokubai vor 7 Jahren 0
@Mokubai dieser Link hat meine Frage nicht beantwortet. Karim Manaouil vor 7 Jahren 0
Daher sagte ich, es sei verwandt und kein Duplikat. Es kann tangential sein und Informationen über das Problem liefern. Mokubai vor 7 Jahren 0

1 Antwort auf die Frage

0
David Schwartz

The interrupt vector is already stored in the interrupt vector table, so the CPU doesn't need to get it from a peripheral. If the interrupt is associated with an IO-APIC or similar device that can raise interrupts for different reasons, the interrupt handler will query that device to find out why it raised the interrupt. There's no special bus cycle for this, it's the same way a CPU would get any information from one of its peripherals.