中断 2022-01-27

2022-01-27  本文已影响0人  9_SooHyun

中断(interrupt)

from wiki:
中断(Interrupt)是指处理器接收到来自【硬件】或【软件】的信号,提示发生了某个事件,告知CPU注意

为什么会有中断:
中断,本质上是【CPU】和【外设】的一种【异步】通信机制。这里又要提到同步/异步通信机制了。假设处理器与外部设备通信时,必须在向该设备发出指令后进行忙等待(Busy waiting),反复轮询该设备是否完成了动作并返回结果(即同步的消息通信机制),就会造成大量处理器周期被浪费。更合理的是异步机制:CPU向设备发出指令后,继续执行接下来的其他指令,而外设完成指令执行时通过发送中断信号来主动通知CPU,CPU拿到结果后再继续切换回原来的上下文处理。中断实际上就是【CPU】和【外设】的一种【异步】通信机制,现在被用于CPU外部与内部紧急事件的处理、机器故障的处理、时间控制等多个方面

中断的实现:CPU对中断信号的轮询,或者说CPU在监听中断信号
当有设备事件发生,设备会设置CPU的中断引脚来触发一次中断。不同的事件对应不同的中断类型,如a中断拉高,告诉CPU该写了;b中断拉高,告诉CPU可以读了。在每个CPU时钟周期的末尾,CPU会去检测那个中断信号位是否有中断信号到达。如果有,则会根据中断优先级决定是否要暂停当前执行的指令,转而根据中断向量表去执行处理中断的指令。(就是CPU 层面对中断信号的轮询)

问题1:前面说过,CPU和外设通信时忙等待会浪费CPU周期,忙等待就是对设备状态的轮询。而中断本质上也是轮询,为什么中断不浪费CPU周期呢?
因为CPU每个时钟周期轮询一次中断信号,这个时钟周期的其他时间片CPU是可以执行其他指令的,而不是向忙等待一样每个时间点都在轮询其他啥也不干

问题2: 都是轮询,为什么忙等待是同步通信,而中断是异步通信呢?中断也需要轮询中断信号啊
这和问题1实际上是同质的。同步通信是【主动轮询】;异步通信是被动接受通知,也就是【监听通知】,而监听的实现还是轮询。虽然都是轮询,但轮询的方式不同。对于前者,CPU只做一件事,就是一直轮询好了吗好了吗;对于后者,CPU是周期性地轮询,整个节奏是:【干活-看下好了吗-干活-看下好了吗-干活-看下好了吗...】。这看起来就是异步模式了

常见应用

中断的典型应用包括系统时钟、磁盘输入输出操作、断电信号以及软件自陷等。

上一篇 下一篇

猜你喜欢

热点阅读