0

假设我们有一个运行 linux 的 8 核系统,您正在使用 GUI 桌面并打开 10-20 个终端。

当您键入内容时,用户输入会出现在正确的终端上。怎么会这样。例如,键盘中断可以到达任何 cpu,它如何路由到正确的进程是我的问题(假设一次有 10 个进程正在等待用户输入)

这是我所知道的:

  1. 键盘驱动程序将有一个中断处理程序,它读取输入并将其复制到可能由某些高优先级工作队列处理的缓冲区。(没有必要,但这就是我觉得会发生的事情)


  2. 必须将此缓冲区复制到当前活动 shell 的标准输入文件描述符的缓冲区中。

我不知道的

工作队列工作函数如何确定哪个进程正在运行当前活动的 shell。

4

2 回答 2

0

工作队列功能不能确定哪个进程正在运行——这是在更高的级别上完成的。键盘设备是由内核通过设备文件导出的/dev/input/(在我的系统上它是/dev/input/event3- 你可以/dev/input/by-id查看哪个对应于你的键盘)。X 服务器打开此设备文件以接收事件(在其中查找设备文件/var/log/Xorg.0.log以查看发生这种情况的位置)。X 服务器因此接收所有键盘事件并将它们分派给正确的客户端本身。知道了哪个窗口有焦点,就可以将对应的输入事件放入客户端队列队列中,并向对应的进程发送信号,该进程被唤醒,可以处理该事件。

有关详细信息,请参阅http://en.wikipedia.org/wiki/Evdev和相关链接。

于 2012-07-19T03:03:03.827 回答
0

它只是知道。所有进程之一被标记为当前用于控制台 I/O。你切换到另一个,另一个被标记为当前。我不知道实施的细节,但这就是想法。

于 2012-07-18T06:54:27.080 回答