![键盘键和产生的字符。谁负责(在操作系统中)](https://linux22.com/image/78796/%E9%94%AE%E7%9B%98%E9%94%AE%E5%92%8C%E4%BA%A7%E7%94%9F%E7%9A%84%E5%AD%97%E7%AC%A6%E3%80%82%E8%B0%81%E8%B4%9F%E8%B4%A3%EF%BC%88%E5%9C%A8%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E4%B8%AD%EF%BC%89.png)
在不同的操作系统中按键盘上的某个键会产生不同类型的字符,例如,在 Windows 中按向上箭头将产生与在 Linux 中按相同键不同的字符序列。
操作系统的哪个“部分”负责?特别是在查看 GNU/Linux 操作系统时,因为“Linux”只是内核。
答案1
这里涉及很多层,结果在很大程度上取决于上下文。但一些一般信息:
首先是内核。它负责处理实际的键盘硬件,并通过某种机制(通常是位于最底部的中断处理程序)注册按键,并使用特定按键的明确表示(通常是某种)。
其次,消费者。在 Linux 下,这里基本上有两个选项:要么将键盘按键输入 TTY 子系统,并在终端设备上转换为传入字节(如果您使用的是 VT),要么将它们提供给 Xorg 并通过以下方式传递给应用程序: X 协议(如果您使用的是 GUI)。后者是当今的正常情况,尽管前者仍然得到很好的支持。 Xorg 和 X 协议从内核获取原始按键事件,然后以类似的原始形式将它们传递给 X 应用程序 - 也就是说,在普通 X 级别上,应用程序仅接收裸按键/按键释放通知,这就是应用程序有责任将语义强加给它们。这甚至包括基本且近乎普遍的事物,例如标记为“A”的键通常产生字节a
,但当A
按住 Shift 键时。不用说,有许多库可以完成大部分工作,新的应用程序通常不需要关心它——但这仍然是在应用程序级别完成的工作。
因为工作是在应用程序级别完成的,所以进一步处理事情几乎完全取决于应用程序。终端仿真器程序接受 X 协议击键并复制 TTY 子系统对它们的处理,将它们转换为一行中的字节,以便您可以访问 shell。正常的 GUI 程序使用一种或另一种工具包,并且这些工具包都提供键盘处理作为基本功能,从而实现文本框、所选元素等的常用语义。更大、更复杂的程序(例如浏览器或全屏游戏)可能会在 X 级别上进行自己的键盘处理,以获得更大的灵活性。但这都是由单个应用程序完成的,并且仅取决于应用程序的决定。