x86 – 如何知道中断是硬件中断还是CPU异常
|
我一直在研究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节中指出:
但是,只有少数例外推送了错误代码字段,所有这些都是向量32下面的处理器异常. – 编辑 – 另一点:不要被“陷阱盖茨”和“中断盖茨”所愚弄.中断可以通过陷阱门,INT可以通过中断门.唯一的区别是在进入处理函数时处理中断使能状态. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Java Spring开发环境搭建及简单入门示例教程
- java – AspectJ Gradle配置
- java – 将checkstyle添加为pre-commit git hook
- 爪哇岛:二十世纪的第一个月(1901年1月1日至2000年12月31日
- Spring Boot发送邮件详解
- springboot配置多数据源的实例(MongoDB主从)
- 基于SpringBoot与Mybatis实现SpringMVC Web项目
- Java中启动线程start和run的两种方法
- java – SqlServer / MyBatis SqlMapConfig数据源设置
- Java CompletableFuture:避免回调地狱
