中断有两种,一种是CPU外部产生的,一种是CPU内部执行程序时产生的。
外部的中断通常是由外部设备产生的,并且这类中断的产生是异步的,根本无法预测这类中断什么时候产生,这类中断也就是通常我们所说的“中断”。当然,软件也可以关闭对这类中断的响应。CPU内部产生的中断也分为两种,一种是软件主动产生的中断,通常称为陷阱,例如执行int 0x80指令,还有一种是CPU检测到异常,通常称为异常,例如除数为0.这样,一共有三种类似的机制:中断(Interrupt)、异常(Except)和陷阱(Trap)。
Intel X86CPU支持256个中断向量,一直都是如此。但是早期的CPU的中断处理机制非常原始、非常简单。早起的CPU(只有实模式)中中断向量表存放在内存中从0开始到1KB(256x4)的位置,每个中断向量对应的项占4个字节,用来存储中断处理程序的地址。其中两个字节用来存储处理程序地址的段地址,两个字节用来存储段内偏移。由于这种设计,中断向量表中各项存储的信息非常少,根本无法满足现在的操作系统的需求,因为这个机制中没有提供用户空间和内核空间切换或者运行模式切换(系统和用户)的手段,而且也没有相应的寄存器来帮助实现这样的需求,后面可以看到之后的CPU中增加了特定功能的寄存器来支持这种需求。Unix最初是在PDP-11(PDP-11是美商迪吉多电脑(Digital Equipment Corp.)于1970到1980年代,所销售的一系列16位迷你电脑)上实现的。PDP-11的CPU中有一个状态控制寄存器PSW,PSW中有一个位段来表示当前的运行级别和模式(系统和用户)。PDP-11的CPU的中断向量表中的项除了包含处理程序的入口地址外,还包含进入中断处理程序后的PSW,中断向量表中的PSW中的模式是系统模式。CPU平时运行在用户模式,当发生中断时,CPU会根据中断向量在中断向量表中查找对应的项,然后将该项中PSW的值装入状态控制寄存器,同时将中断处理程序的入口地址装入CS寄存器和IP寄存器,原来的状态控制寄存器中的值随中断返回的地址一起压入用户堆栈中。通过中断向量表,发生中断时,CPU运行模式从用户模式切换到内核模式,中断处理完成后将之前压入栈的PSW值重新装载到状态控制寄存器中,从而使CPU运行模

本文详细介绍了Intel X86处理器中的中断、异常和陷阱的区别及处理机制。中断分为外部中断和内部中断,内部中断又分为软件陷阱和硬件异常。X86支持256个中断向量,早期的中断向量表包含处理程序地址,后来发展为包含更复杂信息的“门”结构,如任务门、中断门、陷阱门和调用门。中断处理涉及权限检查、运行级别的改变和堆栈切换等步骤。
2811

被折叠的 条评论
为什么被折叠?



