我一直在研究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. 什么硬件中断实际上是中断?
- 2. 单声道+硬件中断/信号
- 3. Linux调度程序是否知道硬件中断(调度程序抖动)
- 4. 如何判断库是COM还是DCOM?
- 5. 异常和中断
- 6. “I/O设备请求”是外部中断还是内部异常?
- 7. Erlang。异步http请求。如何知道连接何时中断?
- 8. 了解处理器和硬件级别的硬件中断和异常
- 9. pydev中的异常中断
- 10. Nodejs如何知道是同步还是异步
- 11. Mongod在100%的CPU - 不知道如何诊断?
- 12. 硬件中断列表
- 13. Java硬件中断处理
- 14. 如何判断字符串在元值中是空还是空?
- 15. XMPP Smack - 如何检查连接是活动还是中断?
- 16. 如何判断给定的值在Java中是float还是double?
- 17. C++调试中断异常
- 18. MATLAB中断抛出异常
- 19. 抛出异常时中断
- 20. 异常处理不中断
- 21. 中断还是继续执行?
- 22. 是否从备份还原中断?
- 23. 如何判断文件是EXE还是DLL?
- 24. 内核如何知道CPU是处于用户模式还是kenel模式?
- 25. 如何知道程序是从USB还是固定硬盘运行?
- 26. 信号,软件中断和硬件中断之间的区别?
- 27. 如何判断在浏览器中还是在NodeJS中运行?
- 28. 如何知道系统是Python中的Debian还是CentOS?
- 29. 不断超越界限异常,不知道为什么?
- 30. 在Eclipse中的异常断点 - 如何检查异常对象?
有点痛苦回答这些问题。你所学到的关于汇编编程的知识已经过时了。它在28年前有效,专为没有协处理器的机器而设计。现代机器更先进,使用保护模式操作系统,最重要的是更复杂的中断控制器。 – 2013-03-24 17:21:12
@HansPassant您能否添加一些相关的实际术语或关键词,以便继续以更新的方向进行此类研究? (例如,来自中断控制器或协处理器合作词汇表的参考) – n611x007 2014-07-08 16:49:02