2009-03-01 52 views
18

我有一個雙核CPU如何處理中斷的想法。我想知道如何在具有多個物理處理器的電路板上執行中斷處理。雙處理器機器如何處理中斷?

由物理板的配置決定是否有任何中斷責任?每個處理器必須能夠處理某些類型的中斷,例如磁盤I/O。除非有一些電路來管理和派遣中斷到適當的處理器?我的猜測是該方案必須是處理器中立的,以便任何處理器和內核都可以運行中斷處理程序。

如果一個內核正在等待磁盤讀取,那麼當該磁盤準備就緒時,該內核是否會運行中斷處理程序?

+1

我現在是一個核心永遠等待在讀,一個線程等待看看。當讀取完成後,似乎可能會更好地在同一個處理器上運行新喚醒的線程,因爲數據仍然在該處理器上緩存。 – jeffD 2009-03-01 05:20:03

回答

8

在x86系統的每個CPU得到其自己的本地APIC(高級可編程中斷控制器),其也被連接到彼此和到處理路由設備中斷到本地APICS一個I/O APIC。

操作系統可以對APIC進行編程,以確定哪些中斷被路由到哪個CPU(或讓APIC做出該決定)。

我想象一下,多核CPU對於每個核心都會有一個本地APIC,但我實在不確定這一點。

請參見以下鏈接瞭解詳情:

0

我會說,這將取決於硬件製造商...

然而this link使我相信大部分是由主處理器和/或第一核心可能處理。

Another link

3

你所感興趣的是SMP處理器關係。 Here是一篇關於在Linux中如何處理它的優秀文章。 Advanced Programmable Interrupt Controller (APIC)是您在現代系統中如何管理這一點的。基本上,默認情況下,將全部轉到處理器0,除非您有一個操作系統使用此接口來正確設置。另外,您不一定需要發出命令的內核等待特定中斷。您希望較少加載的內核接收它。

+0

謝謝,Linux中SMP的鏈接很有趣。很高興知道可以用這種方式修改服務器。 – jeffD 2009-03-01 05:05:06