中断是指在程序执行过程中,由于硬件或软件的原因,打断当前程序的执行流程,转而去执行其他的相关代码。简单的说,就是程序的一种异步事件处理机制,让CPU能够在处理用户任务的同时,及时地处理外部设备的请求。
中断可以分为硬件中断和软件中断两种,硬件中断是指由外部设备或者处理器自身产生的事件所引发的中断;而软件中断则是由程序自身引发的事件,例如系统调用等。在中断处理的过程中,CPU会暂停当前程序的执行,保存相关的寄存器状态,然后去执行中断处理程序,直到中断处理程序执行完成后,CPU再回到原来程序的执行流程。
中断向量就是一个指向中断请求处理程序的入口地址的指针,是由处理器支持并用于快速转移控制到正确的中断服务程序中。中断向量的地址通常都是存在一张中断向量表里的,也就是我们通常所说的中断向量表。
在x86体系结构中,中断向量表通常是存放在内存的最高端,大小为1KB。其中,前256个条目用于处理外设中断,每个中断向量表所分配的中断号都是固定的,因此也被称为系统向量表;后256个条目用于处理异常中断,处理异常中断需要手动设置中断向量表,因此被称为程序向量表。
中断向量表的每个条目都包含了中断请求号码和指向中断处理程序入口地址所在内存位置的偏移地址。当x86处理器检测到中断请求时,会通过中断请求号码来索引中断向量表,然后读取相应条目的偏移地址,并计算出正确的中断处理程序入口地址,最后跳转执行此入口地址。
中断的优先级是指当多个中断请求同时到达时,处理器按照一定的优先级顺序来进行中断处理的方式。不同的CPU平台和操作系统都有各自的中断优先级标准,以下是一个常见的中断优先级顺序:
1. NMI 中断:这是一种非屏蔽中断,通常用于处理一些紧急情况,例如系统总线上的电气问题或系统崩溃等。
2. 重要的时钟中断:例如操作系统的时钟中断,在很多操作系统中有至高的优先级。
3. 硬件中断:硬件中断分为快速中断和普通中断,快速中断被用于屏幕显示和磁盘驱动器,普通中断被用于串口和并口。
4. 软件中断:例如在x86系统中,软件中断被控制放置在中断向量表的后256个条目中。
中断处理程序是一段能够处理中断请求的代码,通常由操作系统内核提供,并被存放在中断向量表中。中断处理程序通常要处理的任务包括保存当前进程状态,为新的中断请求分配处理空间,以及恢复之前执行的进程状态。
中断处理程序的执行流程可以分成以下几个阶段:
1. 保存当前状态:保存所有被中断的程序执行状态,包括所有寄存器状态等。
2. 中断响应:响应当前中断请求,根据中断源判断中断类型,并执行相应的任务,例如读取键盘输入、读取网络数据等。
3. 中断处理:根据操作系统的调度算法,为新的中断请求分配处理空间,并处理中断请求。
4. 响应用户程序:如果当前中断程序执行完成后,需要回到原先的用户程序执行流程,此时需要恢复之前保存的程序状态,并继续执行用户程序。