2013-03-24 179 views
3

我一直在研究x86上的中斷以及內核如何使用中斷處理程序處理各種中斷。但有一件事讓我感到困惑。


我知道中斷可能是硬件生成的,例如磁盤和定時器中斷,或者它們可能是CPU異常,如頁面錯誤,被零除異常等等。令我困惑的是某些int代碼用於處理兩者特別是INT 08-0F)。例如,Ralf Brown的清單說INT09h中斷既是KEYBOARD DATA READY硬件中斷,也是COPROCESSOR SEGMENT OVERRUN例外。

所以我的問題是,如果像這樣的中斷,中斷處理程序如何知道要處理哪個中斷?如何知道中斷是硬件中斷還是CPU異常

+0

有點痛苦回答這些問題。你所學到的關於彙編編程的知識已經過時了。它在28年前有效,專爲沒有協處理器的機器而設計。現代機器更先進,使用保護模式操作系統,最重要的是更復雜的中斷控制器。 – 2013-03-24 17:21:12

+0

@HansPassant您能否添加一些相關的實際術語或關鍵詞,以便繼續以更新的方向進行此類研究? (例如,來自中斷控制器或協處理器合作詞彙表的參考) – n611x007 2014-07-08 16:49:02

回答

2

x86通常不提供區分硬件和軟件中斷的方法。異常處理程序必須查詢外部硬件或其他方法來消除這兩種情況。

爲避免混淆,系統可以通過在相應的中斷描述符表項中設置特權級別來防止重載相同的向量。用戶模式(CPL = 3)INT指令不能在特權矢量上生成軟件異常。

對於少數例外情況,處理器會在異常堆棧幀上推送附加的錯誤代碼字。錯誤代碼字段有一個'EXT'位來指示異常是否由外部中斷引起。在IA手動音量3,第6.13節中指出:

EXT外部事件(位0) - 置位時,指示該異常 遞送外部程序的事件的過程中發生,如 中斷或更早的例外。

然而,只有少數例外推eror代碼字段,而所有這些都低於矢量處理器異常32

- 編輯 -

另一個位:不要被愚弄通過「陷阱門」和「中斷門」。中斷可以通過陷阱門,INT可以通過中斷門。唯一的區別是處理進入處理函數時的中斷使能狀態。