linux - 内核如何找到发送硬件中断的正确进程

标签 linux linux-kernel linux-device-driver

起初,这两个东西可能存在:

  1. 一个系统有一个响应硬件中断的表
  2. 一个进程有一个表来响应内核发送/设置的中断

如果我在键盘上敲了一个键,键盘会向CPU/内核发送一个中断,内核会处理这个中断。但是,也许当前正在运行的进程不是我们眼前的前台进程,它可能是守护进程或其他东西。那么,内核如何知道哪个进程应该读取/响应我们的击键?

谢谢!

最佳答案

硬件中断仅由内核处理。处理特定于设备的事件,如果有事件/数据要与用户空间共享,则驱动程序将其提供。在您的键盘示例中,设备驱动程序为中断提供服务,提取任何数据并清除条件。表示从硬件中提取的数据的输入事件然后被发送到输入子系统。用户空间进程必须打开公开的输入设备句柄并在读取时阻塞。内核中的输入子系统正在管理它。在其他驱动程序中也很常见:公开响应打开/关闭/读/写/ioctl 的设备句柄(例如/dev/misc/mydevice)。当进程执行“读取”并且没有数据时,内核代码会阻塞调用进程,使其等待直到有数据满足读取条件。我建议阅读内核设备驱动程序。 “Linux 设备驱动程序”是一个很好的开始。

关于linux - 内核如何找到发送硬件中断的正确进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29494374/

相关文章:

python - 使用 cron 追加现有的 sqlite3 数据库

Linux - 使用 awk 读取一条记录直到结束

c - vm_insert_page() 和 remap_pfn_range() 有什么区别?

linux - JVM cacerts 导入是否需要 tomcat 重启?

linux - 关闭内核中的功能会导致内核模块(使用功能)行为不端吗?

c - pmem.io 上的 simple_copy 示例

memory-management - Linux内核模块内存管理

c - 我如何处理与硬件更改相关的给定情况

c - Linux 设备驱动程序中的内联函数

linux - 语法错误 : end of file unexpected (expecting "done")