中断有两种,一种是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中有一个位段来表示当前的运行级别和模式(系统和用户)