加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

x86 – 如何知道中断是硬件中断还是CPU异常

发布时间:2020-12-14 19:32:33 所属栏目:Java 来源:网络整理
导读:我一直在研究x86上的中断以及内核如何使用中断处理程序处理各种中断.但有一件事让我感到困惑.我知道中断可能是硬件生成的,例如磁盘和定时器中断,或者它们可能是CPU异常,例如页面错误,除零异常等.令我困惑的是,有些int代码是用于处理两者(特别是INT 08 – 0F)
我一直在研究x86上的中断以及内核如何使用中断处理程序处理各种中断.但有一件事让我感到困惑.我知道中断可能是硬件生成的,例如磁盘和定时器中断,或者它们可能是CPU异常,例如页面错误,除零异常等.令我困惑的是,有些int代码是用于处理两者(特别是INT 08 – 0F).例如,Ralf Brown的列表表明INT 09h中断同时兼作KEYBOARD DATA READY硬件中断和COPROCESSOR SEGMENT OVERRUN异常.
所以我的问题是,给定这些中断,中断处理程序如何知道要处理哪个中断?

解决方法

x86通常不提供区分硬件和软件中断的方法.异常处理程序必须查询外部硬件或其他方法来消除这两种情况的歧义.

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

除了少数例外,处理器在异常堆栈帧上推送一个额外的错误代码字.错误代码字段有一个“EXT”位,用于指示异常是否由外部中断引起.在IA手册第3卷第6.13节中指出:

EXT External event (bit 0) — When set,indicates that the exception
occurred during delivery of an event external to the program,such as
an interrupt or an earlier exception.

但是,只有少数例外推送了错误代码字段,所有这些都是向量32下面的处理器异常.

– 编辑 –

另一点:不要被“陷阱盖茨”和“中断盖茨”所愚弄.中断可以通过陷阱门,INT可以通过中断门.唯一的区别是在进入处理函数时处理中断使能状态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读