中断定义:通常被定义为改变CPU指令执行序列的事件。
中断可以分为异步和同步中断:
异常通常分为2类:一类是编程错误,另外一类就是需要内核处理的异常情况。编程错误,比如程序异常终止,处理这种异常,内核只需要给当前进程发送一个信号即可。而需要内核处理的异常,比如页错误、通过汇编语言指令比如int或sysenter等请求内核服务等,需要内核作出相应的处理。
顾名思义,中断信号提供了一种使CPU跳出当前正在执行的代码流的方法。这是对于轮询机制的一种有效补充,中断机制提高了系统效率。当中断信号来临时,CPU停止当前正在执行的指令,保存当前进程内核态栈中的PC寄存器值(例如,eip和cs寄存器),取而代之的是,将中断类型相关的地址写入到PC寄存器中,从而切换到新的中断上下文。
但是,需要注意的是中断处理和进程切换有着很大不同:中断或者异常处理程序不是进程。它的处理完全在内核态,而且处理的内容非常少,要求响应时间必须非常短。
中断处理对时间高度敏感,有着严格要求:
Intel官方文档将中断和异常分类为:
中断或异常使用一张中断向量表进行管理,编号为0-255。非可屏蔽中断和异常编号是固定的;而可屏蔽中断是不固定的,可以通过对中断控制器进行编程进行修改。
硬件设备和可编程中断控制器之间使用中断请求线(IRQ)进行连接。中断请求线用来传输电信号。可编程中断控制器接收这些电信号,然后将其转换成中断号。具体如下:
IRQ线一般从0开始编号,也就是说,第一条IRQ线标记为IRQ0。Intel默认的中断向量表是从IRQ32开始的,也就是说,前32个中断号已经被不可屏蔽中断和保留中断所占用。IRQ线和向量表之间的对应关系可以通过给中断控制器发送合适的I/O指令进行修改。
可以通过对可编程中断控制器(PIC)进行编程,控制是否为某个指定的IRQ线发送中断。被禁止的中断不会丢失,一旦重新使能,PIC就会把它们发送给CPU。大部分的中断处理程序都使用这个特性,可以连续地处理相同类型的IRQ请求。
需要注意的是,这里的使能、禁止IRQ和中断的屏蔽不是一个概念。当eflag寄存器中的IF标志被清除,PIC发送的可屏蔽中断会被CPU忽略掉。cli和sti汇编指令分别用于清除和设置该标志。
传统的PIC控制器使用2个8259A外部芯片,通过”级联”的方式组成的。每个芯片可以接收8个不同的IRQ,但是从PIC的INT输出管脚连接到主PIC的IRQ2管脚上,所以总的可以使用的IRQ线就是15个。
本文分享自 嵌入式ARM和Linux 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有