谁中断谁?

外设中断 CPU

为什么要中断 CPU?

不中断 CPU ,你(外设)怎么让人家(CPU)帮你干活呀。

外设就像学生,CPU 就像老师;老师在课堂上讲课,学生提问题之前得先举手通知老师,不然学生们都随意发言岂不乱成一锅粥了。这里的举手动作就是中断。中断了老师正常的讲课过程,转而去处理这个学生的问题。处理完这个学生的问题后,老师会接着之前的课堂内容继续讲课,熟悉的声音:好,我们接着讲。

不中断,采用轮询的方式不行吗?

可以,不过效率太低。假设有 1000 个外设,CPU 每一次都得从第一个轮询到最后一个,查看哪个设备有任务。假设只有最后 1 个外设是有任务的,那么前面 999 次轮询都是浪费的,而且还耽误了不少时间,影响了对最后这个外设的处理速度。想像一下,你在玩 CF,转角处突然和敌方相遇,此刻你按下鼠标左键,想要射击敌人;而此刻 CPU 正在以轮询的方式轮询其它设备,得等一会才能轮到鼠标,你的枪是开不了火的。而对手电脑的 CPU 采用的是中断的方式,他一按下鼠标左键,产生一个中断,CPU 就能立刻处理这个鼠标事件进行射击。结果就是对方把你打成筛子,你却毫无还手之力。这样的 CPU 轮询方式,你还会用吗?除非你想找个理由:不是我技术菜,是电脑不行😜。

如何进行中断?

不像软件那样,语句和语句之间能够进行交流,外设是硬件,和 CPU 语言不通,甚至不会讲话(没有软件,纯硬件)。那么外设是怎么中断 CPU 的呢?答案是:用一根电线。当外设有任务时,他就通过这根电线,电 CPU 一下,CPU 被电了,它肯定疼啊,就能感觉到你需要帮助了,过来处理你的任务。这根电线的正式名称是IRQ(Interrupt ReQuest)输出线,当然 IRQ 线严格讲不是直连 CPU 的,它直连可编程中断控制器(Programmable Interrupt Controller, PIC),可编程中断控制器再通过 INTR 引脚直连 CPU。

I/O 中断处理

中断处理