需求

中断」是指CPU执行过程中,遇到急需处理的事件时,在收到外部中断信号后,停止原来工作,转去处理该中断事件,完毕后回到原来断点继续工作。

操作系统处理以下情况时,需要打断处理器正常工作

  • 请求系统服务
  • 实现并行工作
  • 处理突发事件
  • 满足实时要求

为此,提出了中断概念。「中断」是指程序执行过程中,遇到急需处理的时间时,中断可以实现:

  • 同步操作:快速 CPU 与慢速外设的同步工作
  • 故障处理:同机器硬件错误有关的应急事件的处理
  • 实时处理:在工业控制中使用的实时微机控制系统

实现

中断的执行过程可表示为

img-2024-03-17 16-50-49.png

中断依赖于中断系统实现

中断与异常

中断信号源可以分为:中断和异常。中断分为屏蔽中断和非屏蔽中断

中断是由与现行指令无关的中断信号触发的,即异步的,且中断的发生与 CPU 处在用户模式或内核模式无关,在两条机器指令之间才可响应中断,一般来说,中断处理程序提供的服务不是为当前进程所需的;

异常是由处理器正在执行现行指令而引起的,一条指令执行期间允许响应异常,异常处理程序提供的服务是为当前进程所用的。异常包括很多方面,如有出错(fault),陷入(trap)等。

中断要求被快速处理,以便及时响应其它中断信号,所以,中断处理程序处理过程中是不能阻塞的。异常处于被打断的当前进程上下文中,所提供的服务是当前进程所需要的,所以,异常处理程序处理过程中是可以阻塞的。

此外,中断允许发生嵌套,但异常大多为一重;异常处理过程中可能会产生中断,但中断处理过程中决不会被异常打断。

中断事件处理原则

中断的处理过程大致可以分为发现中断源、保护现场、转向处理中断的处理程序和恢复现场四个步骤。

CPU 响应中断

对于 CPU 而言,要响应中断,必须满足如下条件

  • 设置中断请求触发器,发出中断请求信号
  • 设置中断屏蔽触发器,当此触发器为 1 时,允许外设的中断请求才能被送出至 CPU。
  • CPU 处于开放中断状态。
  • CPU 在一条现行指令结束之后响应中断。

如图,首先设置中断请求触发器

img-2024-03-17 17-02-34.png

然后设置中断屏蔽触发器。只有接口电路中的中断屏蔽触发器为“1”时,外设的中断请求才能被送出至 CPU,从而增加了控制的灵活性。可把 8 个外设的中断屏蔽触发器组成一个端口,用输出指令来控制它们的状态。

img-2024-03-17 17-03-25.png

第三个条件,CPU 中断是开放的。在 CPU 内部有一个中断允许触发器 IF。只有当其为 1 时,CPU 才能响应中断;若其为零,即使 INTR 线上有中断请求,CPU 也不响应。而这个触发器的状态可由 STI 和 CLI 指令来改变。当 CPU 复位时,中断允许触发器为“0”,即关中断,所以必须要用 STI 指令来开中断。当中断响应后,CPU 就自动关中断,所以必须在中断服务程序中用 STI 指令来开中断。

第四个条件,CPU 在现行指令结束后响应中断,即运行到指令周期的最后一个 T 状态时,CPU 才采样 INTR 线。若发现有中断请求,则进入中断响应周期。

时钟中断

时钟」是操作系统进行调度工作的重要工具。

  • 让分时进程做时间片轮转
  • 让实时进程定时发出或接收控制信号
  • 系统定时唤醒或阻塞一个进程
  • 对用户进程进行记账

时钟可分为绝对时钟和间隔时钟两种

中断优先级和多重中断

中断优先级

计算机执行的每一瞬间,可能有几个中断事件同时发生,中断装置如何来响应同时发生的中断呢?以不发生中断丢失为前提,把紧迫程度相当的中断源归在同一级,紧迫程度差别大的中断源归在不同级,级别高的有优先获得响应的权力,中断装置预定的这个响应顺序称为中断优先级

在 CPU 上运行的程序,有时由于种种原因,不希望其在执行过程中被别的事件所中断。可编程中断控制器,可通过指令设置屏蔽码进行中断屏蔽

多重中断

中断正在进行处理期间,CPU 又响应新的中断事件,于是暂时停止正在运行的中断处理程序,转去执行新的中断处理程序,就叫多重中断

中断处理过程

简单的中断处理过程如下

  1. 设备给处理器一个中断信号
  2. 处理器处理完当前指令后响应中断,延迟非常短,此过程要求处理器没有关闭中断。
  3. 处理器处理完当前指令后检测到中断,判断中断来源,并向发送中断的设备发送了确认中断信号,并向发送中断的设备发送了确认中断信号,确认信号使得该设备将中断信号恢复到一般状态
  4. 处理器开始为软件处理中断做准备:保存被中断程序的执行上下文环境,包括程序状态字,PC 的下一条指令位置,一些寄存器的值,它们通常保存在程序控制栈中,处理器状态被切换到管态。
  5. 处理器根据中断源查询中断向量表,获得与该中断相联系的处理程序入口地址,并将 PC 置成该地址,处理器开始一个新的指令周期,控制转移到中断处理程序。
  6. 中断处理程序开始工作,包括检查 I/O 相关的状态信息,操纵 I/O 设备或者在设备和主存之间传送数据等等
  7. 中断处理结束时,处理器检测到中断返回指令,被中断程序的上下文环境从系统堆栈中被恢复处理器状态恢复成原来的状态
  8. PSW 和 PC 被恢复成中断前的值。处理器开始一个新的指令周期,中断处理结束。

中断处理程序特点

以异步方式运行,可能会打断关键代码的执行,甚至打断其他中断处理程序的执行;在屏蔽中断状态下运行,最坏的情况会禁止所有中断;要对硬件进行操作,有很高的时限要求;它在中断上下文中运行,故不能被阻塞 。