【问题标题】:Can linux kernel keyboard interrupt be interrupted by further keyboard interruptlinux内核键盘中断可以被进一步的键盘中断中断吗
【发布时间】:2017-09-07 15:17:59
【问题描述】:

在 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

向 8259A 中断控制器发送 EOI 后 CPU 正在处理 _do_tty_interrupt 时,可能会断言另一个键盘中断。 可以通过进一步的键盘中断来中断(嵌套)键盘中断吗?

【问题讨论】:

    标签: linux-kernel interrupt-handling keyboardinterrupt


    【解决方案1】:

    他们的键盘中有一个缓冲区,如果无法从缓冲区中读取密钥将阻止任何后续键盘的 IRQ,无需禁用中断。

    如果在_do_tty_interrupt 期间发生另一个中断,PIC 会通知 CPU,一旦 CPU 再次将状态信息保存在堆栈上,就会执行一个新的中断处理程序。

    【讨论】:

    • 您可能需要考虑添加对键盘控制器和 8259A 之间的中断握手的解释。
    • 在将 EOI 发送到 8259A 中断控制器之前,已从密钥缓冲区中读取密钥,然后重置键盘(请参阅我更新的问题),所以我认为后续的 IRQ可以从键盘生成。对吗?
    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 2021-04-26
    • 2010-11-24
    • 1970-01-01
    • 2020-11-22
    • 2015-08-22
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多