我一直在研究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