如何确定中断是硬件中断还是CPU异常

5

我一直在研究x86上的中断以及内核如何使用中断处理程序来处理各种中断。但有一件事让我感到困惑。

我知道中断可以是硬件生成的,比如磁盘和计时器中断,也可以是CPU异常,比如页面错误、除零异常等。令我困惑的是,有些int代码用于同时处理两种情况(特别是INT 08-0F)。例如,Ralf Brown的列表显示INT 09h中断既可以处理键盘数据准备好硬件中断,也可以处理协处理器段越界异常。

所以我的问题是,鉴于这些中断,中断处理程序如何知道要处理哪个中断?


回答这些问题有点痛苦。你所学的汇编程序设计已经过时了。28年前它还是有效的,当时的机器没有协处理器。现代机器更加先进,使用保护模式操作系统和更为复杂的中断控制器。 - Hans Passant
@HansPassant,你能添加一些相关的实际术语或关键词,以便以更现代的方向继续这项研究吗?(例如,来自中断控制器或协处理器合作词汇的参考资料) - n611x007
1个回答

3

x86架构通常没有提供区分硬件和软件中断的方法。异常处理程序必须查询外部硬件或其他手段来区分这两种情况。

为了避免混乱,系统可以通过设置相应中断描述符表项中的特权级别来防止过载相同向量。用户模式(CPL = 3)INT指令无法在特权向量上生成软件异常。

对于一些异常情况,处理器会在异常堆栈帧上推送一个额外的错误代码单词。错误代码字段具有一位“EXT”,用于指示异常是否由外部中断引起。《IA手册》卷3,第6.13节说明:

EXT 外部事件(位0)-设置时表示异常发生在程序外部的事件传递中,例如中断或早期异常。

然而,只有少数异常推送错误代码字段,这些异常都是向量32以下的处理器异常。

- 编辑 -

另一个位:不要被“陷阱门”和“中断门”所迷惑。中断可以经过陷阱门,INT可以经过中断门。唯一的区别在于进入处理程序函数时处理中断使能状态的处理方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接