2009-03-01 7 views
18

Ich habe eine Idee, wie Interrupts von einer Dual-Core-CPU behandelt werden. Ich habe mich gefragt, wie Interrupt-Handling auf einer Platine mit mehr als einem physischen Prozessor implementiert wird.Wie werden Interrupts von Dual-Prozessor-Maschinen gehandhabt?

Wird eine der Interrupt-Verantwortlichkeiten durch die Konfiguration der physischen Karte festgelegt? Jeder Prozessor muss in der Lage sein, einige Arten von Interrupts, wie z. B. Festplatten-E/A, zu verarbeiten. Es sei denn, es gibt eine Schaltung zum Verwalten und Verteilen von Interrupts an den geeigneten Prozessor? Meine Vermutung ist, dass das Schema prozessorneutral sein muss, damit jeder Prozessor und Kern den Interrupt-Handler ausführen kann.

Wenn ein Kern auf einem Datenträger gelesen wird, wird dieser Kern derjenige sein, der den Interrupt-Handler ausführt, wenn der Datenträger bereit ist?

+1

ich jetzt sehen, dass ein Kern nie auf einem Lese wartet, ein Thread wartet. Wenn der Lesevorgang abgeschlossen ist, scheint es jedoch wahrscheinlich besser zu sein, den neugewonnenen Thread auf dem gleichen Prozessor wie zuvor auszuführen, da die Möglichkeit besteht, dass Daten noch auf diesem Prozessor zwischengespeichert werden. – jeffD

Antwort

8

Auf x86-Systemen jeder CPU erhält seinen eigenen lokalen APIC (Advanced Programmable Interrupt Controller), die miteinander verdrahtet sind, auch und mit einem I/O APIC, das Routing-Gerät behandelt unterbricht den lokalen APIC.

Das Betriebssystem kann die APICs programmieren, um festzustellen, welche Interrupts zu welchen CPUs geroutet werden (oder die APICs diese Entscheidung treffen lassen).

Ich stelle mir vor, dass eine Multi-Core-CPU einen lokalen APIC für jeden Kern haben würde, aber ich bin mir ehrlich gesagt nicht sicher.

Sehen Sie diese Links für weitere Informationen:

0

Ich würde sagen, dass es auf den Hardware-Herstellern ...

jedoch

this link macht mich am meisten werden wahrscheinlich durch den primären Prozessor und/oder ersten Kern behandelt glaube abhängen würde.

Another link

3

Was Sie interessiert sind in ist SMP Prozessoraffinität. Here ist ein ausgezeichneter Artikel darüber, wie es in Linux gehandhabt wird. Die Advanced Programmable Interrupt Controller (APIC) ist, wie Sie dies in einem modernen System verwalten. Im Grunde genommen wäre der Standard, alle zu Prozessor 0 zu gehen, es sei denn, Sie hatten ein Betriebssystem, das diese Schnittstelle verwendet, um Dinge richtig einzurichten. Außerdem möchten Sie nicht unbedingt, dass der Kern, der einen Befehl abgesetzt hat, auf einen bestimmten Interrupt wartet. Sie möchten, dass die weniger geladenen Cores es empfangen.

+0

Danke, der Link auf SMP in Linux war interessant. Es ist gut zu wissen, dass es möglich ist, Server auf diese Weise zu modifizieren. – jeffD

1

Diese Frage habe ich schon vor einiger Zeit gestellt. Vielleicht kann es Ihnen einen kleinen Einblick bieten :)

how do interrupts in multicore/multicpu machines work

+0

Nützliche Informationen darüber, wie die programmatische Platten-E/A in Sektor-E/A-Operationen und den zugehörigen Interrupt unterteilt wird. – jeffD