linux-kernel - Linux 设备驱动程序 - 线程化 IRQ 处理程序

标签 linux-kernel linux-device-driver drivers interrupt-handling

最近,我遇到了一种情况,我想将线程化的 IRQ's 用于键盘驱动程序。有关线程 IRQ 处理程序的一些背景知识:

http://lwn.net/Articles/302043/

据我了解,每次 IRQ 发生时,IRQ 处理程序线程都会被唤醒。因此,如果我按下 KEY A,它会唤醒线程并运行直至完成。现在,如果处理程序线程仍在运行,同时为来自 KEY AIRQ 提供服务,那么我应该按 KEY B 的行为是什么。 . 来自 KEY BIRQ 会被忽略吗?

预期的行为是什么?

最佳答案

理想情况下,系统将始终确认 key A-> key B 的顺序。

然而,为了确认一个键被按下,系统必须在每个键被按下的时候做一些事情,即当键盘中断发生时 - 至少它必须记录按键,可能在队列中。

而且从单个处理器的角度来看,它一次只能做一件事,所以如果它正在记录按键A,那么它就不能同时记录按键B。 它要么必须放弃 A 而记录 B,要么必须忽略 B。

因此,中断处理的目标是最大限度地减少处理器花费在确认任何给定中断所需的最少时间上的时间。

线程中断的目标是将更多的工作推给单独的线程,从而减少确认中断所需的最少时间,从而减少处理中断所花费的时间(它无法处理任何其他中断的时间)同时)减少。

即便如此,理论上仍无法保证处理器不会丢弃或忽略中断,但在实践中确实降低了这种可能性。

对于按键的具体示例,如果在处理器完成对 A 的最小处理之前,您能够以某种方式足够快地按下 B,那么由于两个中断都来自同一源,因此具有相同的优先级, B 将被忽略,并且在您看来好像 B 从未被按下。

关于linux-kernel - Linux 设备驱动程序 - 线程化 IRQ 处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313735/

相关文章:

linux - i2c 节点中附加引脚的设备树绑定(bind)

c - 锁定帧缓冲设备

windows-xp - 对 WinXP PS/2 触摸板驱动程序进行逆向工程的最佳工具?

linux - 如何使用函数并将其变量传递给 linux 驱动程序 LM70 中定义的用户应用程序?

linux - 设备映射器的“ioctl”签名

linux-kernel - Linux 中 x86 架构的 IPI 种类

linux - USB调制解调器的交叉编译驱动程序

linux - Fedora - Xenomai RTDM - 无法分配内存

linux - 什么使 blk_execute_rq_nowait 排队的请求出队

android - 启动 Android 应用程序时 Eclipse 挂起