当前位置: 华文星空 > 知识

会不会有两个中断绝对同时发出,cpu会如何处理?

2021-06-11知识

题主的问题表达的不太正确,不过要问的内容还是很清晰的,先回答一下:

1. 整个一个键盘共一个中断 ,甚至是跟别的设备共用一个中断,不管是什么键盘。

机械键盘,并不是一个键位对应着一个中断。如果是PS/2的,只有一个中断。如果是USB的,那么实际上是USB控制器轮询的(虽然叫中断传输),所以从操作系统驱动的层面上,根本看不到「同时来了两个中断」的事件。

由于主流的机械键盘都是USB的,USB-HID类型的设备,单次只能上报8字节的报文,处理6-9个按键,所以,同时按下两个键,那么操作系统在某个轮训周期内,看到的是一个HID report里新包含了两个键。

但是即使这样,驱动也是从前往后扫描report然后依次上报的(从keycode1到keycode6),所以从驱动到操作系统软件这个层次上,按键时间是依次上报的。

2. 不管键盘同时按下几个键,键盘硬件是可以处理的。

这个解释起来比较长,我在这个问题里回答过:

电路扫描动作也是从上到下的,所以,即使同时按下两个键,硬件也是依次上报。

3. 不谈键盘,只说两个中断,中断控制器不会同时上报两个中断。

以x86上最古老的8259控制器来说,它的中断是有优先级的:

没配置优先级的情况下,从IRQ0到IRQ7依次排列,所以即使硬件上同时来了两个中断,那么8259A也是按照优先级依次上报的,不会同时上报两个中断。

(4)优先权判别器PR
若某中断请求正在被处理,8259A外部又有新的中断请求,则由优先权判别器将新进入的中断请求和当前正在处理的中断进行比较,以决定哪一个优先级更高。若新的中断请求比正在处理的中断级别高,由PR通过控制逻辑向CPU发出中断申请INT,正在处理的中断自动被禁止,先处理级别高的中断

对于高级一点的LoAPIC,建议看Intel的手册,配置过于复杂,但也是有优先级的。

所以,对于题主的问题,答案就是:不会有两个中断同时发出。