在linux 0.11内核中,键盘中断处理程序是陷阱门,即不禁用INTR引脚的中断,
_keyboard_interrupt:
push eax
...
in al,60h // read scan code
call key_table[eax*4]
reset keyboard
...
mov al, 20h
out 20h, al // send EOI to 8259A interrupt controller
call _do_tty_interrupt
...
pop eax
iretd
在将EOI发送到8259A中断控制器之后,CPU正在 _do_tty_interrupt 中进行处理时,可能会断言另一个键盘中断。 键盘中断可以通过进一步的键盘中断中断(嵌套)吗?
答案 0 :(得分:0)
键盘中有一个缓冲区,无法从缓冲区读取密钥会阻止键盘后续的任何IRQ,也不需要禁用中断。
如果在_do_tty_interrupt
期间发生另一个中断,PIC会告诉CPU它,并且一旦CPU再次将状态信息保存在堆栈上,就会执行新的中断处理程序。