在计算机科学中,中断指计算机CPU获知某些事,暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完毕后再继续执行以前的程序。整个过程称为中断处理,简称中断,而引发这一过程的事件称为中断事件。中断是计算机实现并发执行的关键,也是操做系统工做的根本。数据结构
中断按事件来源分类,能够分为外部中断和内部中断。中断事件来自于CPU外部的被称为外部中断,来自于CPU内部的则为内部中断。并发
进一步细分,外部中断还可分为可屏蔽中断(maskable interrupt)和不可屏蔽中断(non-maskable interrupt)两种,而内部中断按事件是否正常来划分可分为软中断和异常两种。spa
外部中断的中断事件来源于CPU外部,必然是某个硬件产生的,因此外部中断又被称为硬件中断(hardware interrupt)。计算机的外部设备,如网卡、声卡、显卡等都能产生中断。外部设备的中断信号是经过两根信号线通知CPU的,一根是INTR,另外一根是NMI。CPU从INTR收到的中断信号都是不影响系统运行的,CPU能够选择屏蔽(经过设置中断屏蔽寄存器中的IF位),而从NMI中收到的中断信号则是影响系统运行的严重错误,不可屏蔽,由于屏蔽的意义不大,系统已经没法运行。操作系统
内部中断来自于处理器内部,其中软中断是由软件主动发起的中断,常被用于系统调用(system call);而异常则是指令执行期间CPU内部产生的错误引发的。异常也和不可屏蔽中断同样不受eflags寄存器的IF位影响,区别在于不可屏蔽中断发生的事件会致使处理器没法运行(如断电、电源故障等),而异常则是影响系统正常运行的中断(如除0、越界访问等)。.net
中断描述符表(Interrupt Descriptor Table,IDT)是保护模式下用于存储中断处理程序入口的数据结构,实模式中采用中断向量表(Interrupt Vector Table,IVT)。当CPU接收一个中断时,须要用中断向量在此表中检索对应的中断描述符,在该描述符中找到中断处理程序的起始地址,而后才能执行中断处理程序。代理
中断描述符表中不单单有中断描述符,还能够有任务门描述符和陷阱门描述符,它们实质上都是记录着某段程序的起始地址,所以能够统称为门。blog
中断过程因中断来源而异,外部中断由外设发出,经中断代理芯片接收并处理后将该中断的中断向量号发送到CPU,最后由CPU执行该中断向量号对应的中断处理程序。内部中断则不通过中断代理芯片。索引
中断在处理器内部的处理程序以下:进程
中断向量号是中断描述符的索引,当处理器收到一个外部中断向量号后,它用此向量号在中断描述符表中查询对应的中断描述符,而后再去执行该中断描述符指向的中断处理程序。中断描述符占8字节,所以处理器用中断向量号乘8后再与IDTR中的中断描述符表地址相加获得中断描述符的位置。事件
中断向量号只是一个整数,其中没有RPL,因此在对由中断引发的特权级转移作特权级检查时并不涉及RPL。
若是是由软中断int n、int三、和into这些由用户进程引起的中断,由用户代码控制,处理器要检查当前特权级CPL和门描述符DPL,数值上CPL≤门描述符DPL才能经过检查。经过上一步检查后还须要检查CPL和门描述符中所记录的选择子对应的目标代码段DPL,数值上CPL>目标代码段DPL才能经过检查,由于除返回指令外,特权转移只能由低到高。
若中断是由外部设备或异常引发的,只检查CPL和目标代码段的DPL便可。
特权级检查经过后,将门描述符中目标代码段选择子加载到段寄存器CS中,把门描述符中的中断处理程序的偏移地址加载到EIP,而后开始执行中断处理程序。
中断发生后,eflags中的NT位和TF位都会被置0。若是中断对应的门描述符是中断门,标志寄存器eflags中的IF位也会被置0以免中断嵌套(中断处理过程当中又处理新的中断),即默认状况下处理器对中断门描述符的中断例程处理是不可中断的。若中断发生时对应的门描述符是任务门或陷阱门的话,CPU不会将状态寄存器中的IF位清0,即容许中断嵌套。
原文连接
https://blog.csdn.net/qq_37653144/article/details/82929246