异常和中断的主要功能
- 实现CPU与I/O设备的并行工作
- 处理硬件故障和软件错误
- 实现人机交互,用户干预机器需要用到中断系统
- 实现多道程序、分时操作,多道程序的切换需借助于中断系统
- 实时处理需要借助中断系统来实现快速响应
- 实现应用程序和操作系统(管态程序)的切换,称为“软中断”
- 多处理器系统中各处理器之间的信息交流和任务切换
异常
由CPU内部产生的意外事件被称为异常,也称内中断。
异常是CPU执行一条命令时,由CPU在其内部检测到的,与正在执行的指令相关的同步事件。
异常的分类
异常是由CPU内部产生的意外事件,分为硬件中断和程序性异常。
故障(Fault)
在引起故障的指令启动后,执行结束前被检测到的异常事件。
指令译码时,出现“非法操作码”
取数据时,发生“缺段”或“缺页”
执行整数除法指令时,发现“除数为零”
该异常属于程序性异常(软件中断)
自陷(Trap)
自陷也称陷阱或陷入,它是预先安排的一种“异常”事件,当自陷指令是转移指令时,并不是返回到下一条指令执行,而是返回到转移目标指令执行。例如
系统调用指令
条件自陷指令
该异常属于程序性异常(软件中断)
终止(Abort)
在执行指令过程中发生了使计算机无法继续执行的硬件故障,此时,程序将无法继续执行,只能终止。这种异常与故障和自陷不同,不是由特定指令产生的,而是随机发生的。
该异常属于硬件中断
中断
由来自CPU外部的设备向CPU发出的中断请求被称为中断,通常用于信息的输入和输出,也称外中断。
中断是一种典型的由外部设备触发的,与当前正在执行的指令无关的异步事件。
CPU每执行完一条指令就检查中断请求信号线,如果检测到中断请求,则进入中断响应周期。
中断的分类
可屏蔽中断
通过可屏蔽中断请求线INTR向CPU发出的中断请求。CPU可以通过在中断控制器中设置相应的屏蔽字来屏蔽它或者不屏蔽它,被屏蔽的中断请求将不被送到CPU。
不可屏蔽中断
通过专门的不可屏蔽中断请求先NMI向CPU发出的中断请求,这类中断请求囊括不可被屏蔽。
中断和异常间两个重要的不同点
- “缺页”或“溢出”等异常事件是由特定指令在执行过程中产生的,而中断不和任何指令相关联,也不阻止任何指令的完成。
- 异常的检测由CPU完成,不必通过外部的某个信号通知CPU。对于中断,CPU必须通过中断请求线获取中断源的信息,才能知道哪个设备发生了何种中断。
异常和中断的相应过程
CPU对异常和中断响应的过程可分为:关中断、保存断点和程序状态、识别异常和中断并转到相应的处理程序。这些过程被称作中断隐指令。
1. 关中断
在保存断点和程序状态期间不能被新的中断打断,因此要禁止响应新的中断,即关中断。
2. 保存断点和程序状态
为了能在异常和中断处理后正确返回到被中断的程序继续执行,必须将程序的断点(返回地址)保存在栈中。
异常和中断处理后可能还要回到被中断的程序继续执行,被中断时的程序状态字寄存器PSWR的内容也需要保存在栈中,在异常和中断返回时恢复到PSWR中。
注意:异常指令通常并没有执行成功,异常处理后要重新执行,所以其断点是当前指令地址,中断的断点则是下一条指令的地址。
3. 识别异常和中断并转到相应的处理程序
异常和中断源的识别有软件识别和硬件识别两种方式。
异常大多采用软件识别方式,而中断可以采用软件识别方式或硬件识别方式。
软件识别方式指CPU设置一个异常状态寄存器,用于记录异常原因。操作系统使用一个统一的异常或中断查询程序,按优先级顺序查询异常状态寄存器,以检测异常和中断类型,先查询到的先被处理,然后转到内核中相应的处理程序。
硬件识别方式又称向量中断,异常或中断处理程序的首地址称为中断向量。所有中断向量都存放在中断向量表中。每个异常或中断都被指定一个中断类型号。在中断向量表中,类型号和中断向量一一对应,将相对应的中断向量送入程序计数器PC,进而执行对应的中断服务程序。
中断处理过程
