我一直在研究x86上的中斷以及內核如何使用中斷處理程序處理各種中斷。但有一件事讓我感到困惑。
我知道中斷可能是硬件生成的,例如磁盤和定時器中斷,或者它們可能是CPU異常,如頁面錯誤,被零除異常等等。令我困惑的是某些int代碼用於處理兩者特別是INT 08-0F)。例如,Ralf Brown的清單說INT09h中斷既是KEYBOARD DATA READY
硬件中斷,也是COPROCESSOR SEGMENT OVERRUN
例外。
所以我的問題是,如果像這樣的中斷,中斷處理程序如何知道要處理哪個中斷?如何知道中斷是硬件中斷還是CPU異常
3
A
回答
2
x86通常不提供區分硬件和軟件中斷的方法。異常處理程序必須查詢外部硬件或其他方法來消除這兩種情況。
爲避免混淆,系統可以通過在相應的中斷描述符表項中設置特權級別來防止重載相同的向量。用戶模式(CPL = 3)INT指令不能在特權矢量上生成軟件異常。
對於少數例外情況,處理器會在異常堆棧幀上推送附加的錯誤代碼字。錯誤代碼字段有一個'EXT'位來指示異常是否由外部中斷引起。在IA手動音量3,第6.13節中指出:
EXT外部事件(位0) - 置位時,指示該異常 遞送外部程序的事件的過程中發生,如 中斷或更早的例外。
然而,只有少數例外推eror代碼字段,而所有這些都低於矢量處理器異常32
- 編輯 -
另一個位:不要被愚弄通過「陷阱門」和「中斷門」。中斷可以通過陷阱門,INT可以通過中斷門。唯一的區別是處理進入處理函數時的中斷使能狀態。
相關問題
- 1. 如何判斷Xcode的異常斷點是什麼異常?
- 2. 是否知道遠程套接字是關閉還是斷開?
- 3. 單聲道+硬件中斷/信號
- 4. Linux調度程序是否知道硬件中斷(調度程序抖動)
- 5. 如何判斷庫是COM還是DCOM?
- 6. 異常和中斷
- 7. 如何知道中斷是否被禁用?
- 8. 「I/O設備請求」是外部中斷還是內部異常?
- 9. Erlang。異步http請求。如何知道連接何時中斷?
- 10. OS硬件中斷 - 它是如何工作的?
- 11. 瞭解處理器和硬件級別的硬件中斷和異常
- 12. 如何知道paramiko SSH通道是否被斷開?
- 13. pydev中的異常中斷
- 14. Nodejs如何知道是同步還是異步
- 15. 服務器如何知道請求是同步還是異步?
- 16. 如何知道哪個中斷線路是共享的,哪個中斷線路是空閒的?
- 17. MySQL表格 - 截斷還是不截斷?
- 18. 如何判斷CmisObject是代表文件還是文件夾?
- 19. Mongod在100%的CPU - 不知道如何診斷?
- 20. 捕捉硬件中斷
- 21. 硬件中斷列表
- 22. Java硬件中斷處理
- 23. 如何知道controller是在presentModalViewController中還是在pushViewController中?
- 24. 在軟件中斷期間,cpu是否切換到中斷上下文?
- 25. JDK8 CompletableFuture.supplyAsync如何處理中斷異常
- 26. MIPS異常和中斷如何工作?
- 27. XMPP Smack - 如何檢查連接是活動還是中斷?
- 28. 如何在PHP中判斷它是數組還是散列?
- 29. 如何判斷字符串在元值中是空還是空?
- 30. 如何判斷一個項目是SoapUI中的SOAP還是REST
有點痛苦回答這些問題。你所學到的關於彙編編程的知識已經過時了。它在28年前有效,專爲沒有協處理器的機器而設計。現代機器更先進,使用保護模式操作系統,最重要的是更復雜的中斷控制器。 – 2013-03-24 17:21:12
@HansPassant您能否添加一些相關的實際術語或關鍵詞,以便繼續以更新的方向進行此類研究? (例如,來自中斷控制器或協處理器合作詞彙表的參考) – n611x007 2014-07-08 16:49:02