aliases:
- 中断
「中断」是指CPU执行过程中,遇到急需处理的事件时,在收到外部中断信号后,停止原来工作,转去处理该中断事件,完毕后回到原来断点继续工作。
操作系统处理以下情况时,需要打断处理器正常工作
为此,提出了中断概念。「中断」是指程序执行过程中,遇到急需处理的时间时,中断可以实现:
中断信号源可以分为:中断和异常。中断分为屏蔽中断和非屏蔽中断
中断是由与现行指令无关的中断信号触发的,即异步的,且中断的发生与 CPU 处在用户模式或内核模式无关,在两条机器指令之间才可响应中断,一般来说,中断处理程序提供的服务不是为当前进程所需的;
异常是由处理器正在执行现行指令而引起的,一条指令执行期间允许响应异常,异常处理程序提供的服务是为当前进程所用的。异常包括很多方面,如有出错(fault),陷入(trap)等。
中断要求被快速处理,以便及时响应其它中断信号,所以,中断处理程序处理过程中是不能阻塞的。异常处于被打断的当前进程上下文中,所提供的服务是当前进程所需要的,所以,异常处理程序处理过程中是可以阻塞的。
此外,中断允许发生嵌套,但异常大多为一重;异常处理过程中可能会产生中断,但中断处理过程中决不会被异常打断。
中断的处理过程大致可以分为发现中断源、保护现场、转向处理中断的处理程序和恢复现场四个步骤。
对于 CPU 而言,要响应中断,必须满足如下条件
如图,首先设置中断请求触发器
然后设置中断屏蔽触发器。只有接口电路中的中断屏蔽触发器为“1”时,外设的中断请求才能被送出至 CPU,从而增加了控制的灵活性。可把 8 个外设的中断屏蔽触发器组成一个端口,用输出指令来控制它们的状态。
第三个条件,CPU 中断是开放的。在 CPU 内部有一个中断允许触发器 IF。只有当其为 1 时,CPU 才能响应中断;若其为零,即使 INTR 线上有中断请求,CPU 也不响应。而这个触发器的状态可由 STI 和 CLI 指令来改变。当 CPU 复位时,中断允许触发器为“0”,即关中断,所以必须要用 STI 指令来开中断。当中断响应后,CPU 就自动关中断,所以必须在中断服务程序中用 STI 指令来开中断。
第四个条件,CPU 在现行指令结束后响应中断,即运行到指令周期的最后一个 T 状态时,CPU 才采样 INTR 线。若发现有中断请求,则进入中断响应周期。
「时钟」是操作系统进行调度工作的重要工具。
时钟可分为绝对时钟和间隔时钟两种
简单的中断处理过程如下
以异步方式运行,可能会打断关键代码的执行,甚至打断其他中断处理程序的执行;在屏蔽中断状态下运行,最坏的情况会禁止所有中断;要对硬件进行操作,有很高的时限要求;它在中断上下文中运行,故不能被阻塞 。