2013-01-19 27 views
5

是否有一個獨立的通信總線用於不可屏蔽中斷,旁路可編程中斷控制器?PIC是否處理不可屏蔽的中斷?

或者PIC是否管理所有中斷,但是按照慣例傳遞了所有不可屏蔽的中斷?

這是依賴於體系結構還是有一些特定的原因,一般比其他人更喜歡?

回答

3

我的回答是,我同時在星系設計電腦在很久很久以前遙遠積累了一些經驗,硬件...很久以前,我認爲我應該從參考資料中獲得一些幫助。當我正在閱讀SO here時,我發現了一個可下載Intel's ia32 64 bit system software development manual的地方。

第一個問題的答案是,NMI是處理器上的一個引腳,與PIC配置的可屏蔽中斷隔離。

第二個問題的答案是PIC與NMI沒有任何關係。但是,如果您有APIC或高級可編程中斷控制器,則可以按照手冊中所述生成NMI:

處理器在系統總線(Pentium 4,Intel Core Duo,英特爾酷睿2,英特爾凌動處理器和英特爾至強處理器)或採用交付模式NMI的APIC串行總線(P6系列和奔騰處理器)。

您的第三個問題的答案可以在您的第二個問題的答案中看到。也就是說,如果您的硬件中有APIC(不僅僅是PIC)。如果您想了解更多有關APIC如何發送NMI的詳細信息,請查看我提供的SO鏈接。我沒有在這裏詳細討論,因爲你詢問的是「低」PIC,而不是APIC。但爲防萬一我誤解了你的意思,我想你會在SO鏈接上找到大量的信息,如果這還不夠,那麼請繼續下載英特爾手冊。

我希望清除一些東西。乾杯!

2

PIC(可編程中斷控制器)不管理x86中的NMI(不可屏蔽中斷)。 NMI直接進入處理器或通過另一個控制器,例如。 ISP。見OSDev: Non Maskable Interrupt

然而,根據link,您可以禁用NMI的這種方式:

/* enable the NMI */ 
void NMI_enable(void) 
{ 
    outb(0x70, inb(0x70)&0x7F); 
} 

/* disable the NMI */ 
void NMI_disable(void) 
{ 
    outb(0x70, inb(0x70)|=0x80); 
}