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

how did the kernel find the right process to send hardware interrupt

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

  1. 一个系统有一个table来响应硬件中断
  2. 一个进程有一个table来响应内核中断send/set

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

谢谢!

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