2008-11-19 7 views
21

Ich habe vor kurzem begonnen, in Low-Level-OS-Programmierung einzutauchen. Ich arbeite (sehr langsam) gerade durch zwei ältere Bücher, XINU und Build Your Own 32 Bit OS, sowie einige Ressourcen, die von den feinen SO-Leuten in meiner vorherigen Frage vorgeschlagen wurden, How to get started in operating system development.Wie funktionieren Interrupts in Multicore/Multicomputern?

Es könnte nur sein, dass ich es in keiner dieser Ressourcen noch angetroffen habe, aber es ist wahrscheinlich, weil die meisten dieser Ressourcen vor allgegenwärtigen Multicore-Systemen geschrieben wurden, aber was ich mich frage ist, wie Interrupts in einem Multicore arbeiten/Multiprozessorsystem.

Sagen Sie zum Beispiel, der DMA möchte signalisieren, dass ein Dateilesevorgang abgeschlossen ist. Welcher Prozessor/Kern erkennt an, dass ein Interrupt gemeldet wurde? Ist es der Prozessor/Kern, der die Datei eingelesen hat? Ist es der Prozessor/Kern, der zuerst darauf zugreift?

+0

behandelt werden, weiß ich nicht die Antwort auf Ihre Frage, aber ich würde sehr einen Blick auf den Intel® 64 and IA-32 Architectures Software Developer's Manual, Band 3, Kapitel 5 empfehlen,. Es ist groß und detailliert und enthält mehr als Sie jemals über die x86-Architektur wissen wollten. –

+0

@GiovanniGalbo +1 für die Erwähnung des XINU-Projekts. – smwikipedia

Antwort

6

Mit Blick auf die IoConnectInterrupt Funktion können Sie die ProcessorEnableMask finden, die die CPUs, die die InterruptService Routine (ISR) ausführen können, auswählen wird.
Basierend auf diesen Informationen kann ich davon ausgehen, dass irgendwo auf der unteren Ebene (siehe Adam's Post) angegeben werden kann, wo der Interrupt weitergeleitet werden soll.

Auf der Seite Note Datei Operation ist nicht wirklich auf die Interrupts und/oder dma direkt verwandt. Datei-Betrieb ist Dateisystem-Konzept, das zu etwas niedriger Ebene übersetzt abhängig davon, welchen Bus Sie Dateisystem es könnte IDE oder SATA-Festplatte sein oder es könnte sogar USB-Speicher in diesem Fall Sektor gelesen werden übersetzt zu 3 logische Operation über USB-Bus, dort wird Interrupt von USB-Host-Controller-Treiber bedient werden, aber es ist nicht wirklich mit der ursprünglichen Datei Lesevorgang, der wahrscheinlich auf kleinere Transaktion aufgeteilt wurde.

+0

Vielen Dank. Ich wünschte, es gäbe einen Weg, mehrere Antworten zu akzeptieren, aber die Beispiele aus dem wirklichen Leben haben es für mich geklärt. Danke auch für den Hinweis in der Datei liest. –

+0

@IIya Die IoConnectInterrupt-Verbindung ist unterbrochen. – smwikipedia

2

In den alten Tagen ging der Interrupt an alle Prozessoren. In modernen Zeiten können einige Arten von Hardware von einem OS programmiert werden, um einen Interrupt an einen bestimmten Prozessor zu senden. Natürlich, wenn Sie einen Prozessor dynamisch statt statisch wählen könnten, würden Sie den Interrupt nicht an den Prozessor senden, der die I/O initiierte, sondern an den Prozessor, der zur Zeit am wenigsten belastet ist am effizientesten starten die nächste E/A-Operation und/oder der Prozessor, der zur Zeit am wenigsten belastet ist, und kann den Thread, der auf die Ergebnisse gewartet hat, am effizientesten ausführen.

+0

Danke für die Antwort! Wissen Sie zufällig, ob x86/x86-64 beide Ansätze erlaubt? –