计算机中断与异常总结

概述

中断异常是一些提示性事件,这些事件表明系统、处理器或者当前执行程序或任务存在着某种状况,需要处理器注意。

典型情况下,中断是在程序执行期间随机发生的,是对硬件信号的响应。系统硬件使用中断去处理处理器的外部事件,比如服务外设的请求。使用INT n指令,软件也可以产生中断(模拟)。

异常是在处理器执行指令的过程中发现错误状况而产生的,比如除数为零。处理器可以检测出多种不同的错误状况,包括保护违例、页故障、内部机器故障。

中断向量

为了便于处理中断和异常,会给每一个中断状况都分配了一个唯一的识别码,称作向量。处理器用分配给每个异常或者中断的向量作为访问中断描述符表的索引,以确定异常或者中断处理程序的入口。

中断源

  1. 外部(硬件产生的)中断
  2. 软件产生的中断

外部中断

外部中断是通过处理器的引脚或者本地的APIC接收的。

可屏蔽中断

凡是通过INTR引脚或本地 APIC传递到处理器的外部中断都被称作可屏蔽硬件中断。

使用EFLAGS寄存器的IF标志可以一下子屏蔽全部可屏蔽硬件中断。

软件产生的中断

将中断向量号作为INT指令的操作数即可通过INT指令在软件中产生中断。比如,指令INT 35即可强制显式地调用第35号中断处理例程。

异常源

  1. 处理器探测到的程序错误异常。
  2. 软件产生的异常。
  3. 机器检测异常。

程序错误异常

在应用程序、操作系统或管理程序的执行过程中,当探测到程序错误时,处理器产生一个或多个异常。这些异常又进一步被划分为故障、陷阱和终止。

软件产生的异常

INT n指令可以在软件中用来模拟某个异常,

机器检测异常

处理器提供了内部和外部的机器检测机制,用来检查内部芯片硬件和总线事务的操作。这些机制构成了扩展的异常机制。当探测到一个机器检测错误时,处理器发出机器检测异常信号,并返回一个错误码。

异常分类

根据报告的方式和引起异常的指令能否在不失程序或者任务连续性的情况下重新执行,异常被分为故障、陷阱和终止三种。

  1. 故障故障是一种通常能够被修正的异常,而且,一旦修正,程序能够在不失连续性的情况下重新启动。当有故障报告时,处理器将机器状态恢复到发生故障指令之前的状态。故障处理例程的返回地址(CS寄存器和EIP寄存器的保存值)指向产生故障的指令,而不是产生故障指令之后的那条指令。
  2. 陷阱―陷阱是一种在引起陷阱的指令执行之后马上报告的一种异常。陷阱允许程序或者任务的执行在不失连续性的情况下继续进行。陷阱处理例程的返回地址指向引起陷阱指令的下一条指令。
  3. 终止―终止是一种并不总是报告引起异常的指令的确切位置的异常,也不允许引起异常的进程或任务重新执行。终止被用来报告严重错误,比如硬件错误、不一致或系统表中的非法值。

不可屏蔽中断(NMI)

下面两种情况产生不可屏蔽中断:

  1. 外部硬件激活NMI引脚。
  2. 处理器从系统总线收到消息收到送达模式的NMI消息。

打开和关闭中断

根据处理器和 EFLAGS寄存器的IF标志和RF标志的状态,处理器禁止某些中断的产生。

IF标志可以关闭对处理器的INTR引脚或者本地APIC收到的可屏蔽硬件中断的服务。当IF标志清除时,处理器禁止中断传到INTR引脚或者通过本地APIC产生内部中断请求;当IF标志置位时,中断传送到INTR 引脚或者通过本地APIC引脚处理成正常外部中断。

IF标志不影响传送到NMI引脚的不可屏蔽中断和通过本地APIC传送的送达模式的NMI消息,也不影响处理器产生异常。

8259A产生中断

在这里插入图片描述1. IR7~IR0中有一条或多条变高,使IRR相应位置位
2. 对应的IMR中至少有一位表示中断开放(未屏蔽),则8259A由INT引脚向CPU发出中断请求信号,即表现为CPU的INTR引脚接受到信号。
3. 若CPU处于开中断状态(IF置位),则在当前指令执行完以后,用 I N T A ‾ \overline{INTA} INTA信号作为响应。
4. 8259A收到 I N T A ‾ \overline{INTA} INTA信号后,使最高优先权的ISR置位,相应的IRR复位;
5. 启动另一个中断响应周期,输出第二个 I N T A ‾ \overline{INTA} INTA脉冲;此时8259A向数据总线输送一个8位的指针;CPU可从中断服务程序入口地址表中取出中断服务程序的入口地址。
6. 中断响应周期结束,CPU转到中断服务程序。

猜你喜欢

转载自blog.csdn.net/qq_39021670/article/details/109134065