这里,我们假定外设的驱动程序都已经完成了初始化后,并且已把相应的中断服务程序挂入到特定的中断请求队列中,系统正在用户空间正常运行(此时中断必然是开着),并且某个外设已经产生了一次中断请求。该请求通过中断控制器i8259A达到了CPU的中断请求引线INTR;由于中断是开着的,所以CPU在执行完当前指令后就来响应该次中断请求;
(1)CPU根据中断控制器取得中断向量,然后根据中断向量从中断向量表IDT中找到相应的表项,而该表项应该是个中断门;这样CPU就根据中断门的设置而达到了该通道的总服务程序的入口,假定为IRQ0x03_interrupt。由于中断是用户空间发生的,运行级别CPL为3,;而中断服务程序属于内核,其运行级别DPL为0;所以,CPU要从寄存器TR所指的当前TSS中取出内核(0级)的堆栈指针,并把堆栈切换到内核堆栈,即当前进程的系统空间堆栈;而每次从系统空间返回时要返回到用户空间时堆栈一定回到其原点;也就是说CPU进入IRQ0x03_interrupt时,堆栈中除寄存器EFLAGS的内容以及返回地址&#