我目前正在学习 Linux 内核和操作系统,虽然我发现了很多关于 IRQ、驱动程序、调度和其他重要操作系统概念的优秀资源,以及与键盘相关的资源,但我很难把它们放在一起Linux 内核如何处理键盘上的按钮按下的全面概述。在这个阶段,我并没有试图理解每一个细节,而是试图将概念联系起来,有点全面。
我想到了以下场景:
VIM
( Process #1
) 和 say LibreOffice
( Process #2
)。VIM
按 -a
键。但是,当前正在运行的进程是Process #2
(VIM
下一个计划)。这就是我想象现在事情会发生的方式:
APIC
)。处理器的APIC
触发器INT Pin
。Kernel Mode
并IRQ-Number
从 中请求APIC
,它用作Interrupt Descriptor Table Register
( IDTR
)的偏移量。获取描述符,然后用于获取中断处理程序例程的地址。据我了解,这个中断处理程序最初是由键盘驱动程序注册的?这让我想到了我的主要问题:中断处理程序通过哪种机制将按下的键传达给正确的进程 ( Process #1
)?它是否真的这样做呢,还是简单的写(通过提供一个被按下的按键到缓冲区char-device
?),在某时刻为只读到一个进程(目前“附加”到Process #1
)?我不明白什么时候 …