一、中断的概念

在程序执行过程中,可能会遇到一些需要立即处理的特殊事件,例如硬件故障、用户输入等。这些事件的发生是不可预测的,而且需要及时响应。为了处理这些情况,计算机系统引入了“中断”的概念。

中断是指 CPU 对系统发生的某个事件做出的一种反应。当某个事件发生时,CPU 会暂停当前正在执行的程序,转而去执行一段专门用于处理该事件的代码,这段代码被称为中断例程。

二、中断例程:处理特殊事件的幕后英雄

中断例程是一段预先编写好的程序,用于处理特定的中断请求。每个中断请求都有一个对应的中断例程。

当 CPU 响应一个中断请求时,它会根据中断类型找到对应的中断例程,并执行该例程。中断例程执行完毕后,CPU 会返回到之前被中断的程序继续执行。

三、CPU 响应中断的步骤

  1. 事件发生,发出中断请求。
  2. CPU 判断是否响应中断请求。
  3. 如果响应,CPU 保存当前程序的运行状态(包括寄存器的值和程序计数器)。
  4. CPU 根据中断向量表找到对应的中断例程的入口地址。
  5. CPU 跳转到中断例程入口地址,开始执行中断例程。
  6. 中断例程执行完毕后,CPU 恢复之前保存的程序运行状态。
  7. CPU 返回到之前被中断的程序,继续执行。

四、中断向量:快速定位中断例程的关键

为了快速找到每个中断请求对应的中断例程,系统使用了一个叫做“中断向量表”的数据结构。中断向量表存储了每个中断类型对应的中断例程的入口地址。

当 CPU 响应一个中断请求时,它会根据中断类型在中断向量表中查找对应的中断例程的入口地址,然后跳转到该地址执行中断例程。

与子程序调用不同的是,中断处理过程中还会涉及到标志寄存器 FLAGS/EFLAGS 的操作,用于控制中断的优先级和响应方式。