操作系统是怎样一步步接收键盘按键的?

科技   2025-01-05 17:02   江苏  

将 脚本之家 设为“星标

第一时间收到文章更新

出品 | 码农的荒岛求生 (ID:escape-it)
大家好,我是岛主小风哥,你有没有想过,按下键盘按键后,相应的字符是怎么一步步显示在屏幕上的?
首先来看硬件部分,你至少应该能想到必须得有键盘和CPU:

之后呢,cpu是怎么知道有键盘按下呢?
为了让键盘按下按键后能通知到CPU,需要借助键盘控制器,keyboard controller,这当然也是硬件:

当按下按键时,键盘控制器能检测到键盘按键:
接着键盘控制器向CPU发出中断:

当CPU接收到中断信号后暂停当然正在执行的代码,在此之前也许CPU正在执行应用程序的代码,表现出来的就是你的程序就在运行:

当然也有可能CPU正在执行操作系统代码,但不管怎样,CPU接收到中断信号后将暂停执行当前的指令然后跳转到一个提前配置好的地址,这个地址指向的就是内核中的处理函数,假设这个函数叫做do_irq()。

中断处理函数do_irq发现中断来自键盘,因此开始调用能处理键盘按键的内核代码,这段内核代码就是所谓的驱动,driver。

驱动程序处理键盘按键后发现按下的是字母a,然后呢?
在类Unix系统中,驱动程序会把字母a写到device file中,也就是设备文件,你可以像访问普通文件那样直接访问设备文件,但它并不是真正的文件。

现在,键盘按键已经从硬件世界来到的了软件世界,也就是内核中。
还是以Unix系统为例,在Unix中负责窗体管理的叫做X Window System,该系统由X server以及X client组成,图形应用程序就是x client,接收来自x server的键盘消息,那么x server又是从哪里知道键盘消息呢?答案就是刚才提到的设备文件:

接下来X server会把键盘按键消息发送给正在获取焦点的窗体,怎么发送呢?利用的就是进程间通信技术,IPC:

这样,我们的程序就可以获得键盘按键了。
  推荐阅读:
  1. 我一直在用 Java,但是我一直都不喜欢 Java!
  2. 操作系统大神制造的木马,到底有多可怕?
  3. 又一操作系统迎来终结,已有十多年历史
  4. 看了国产操作系统的进步,微软该沉默了
  5. 写了三个影响世界的操作系统,70多岁了,还去办公室敲代码

脚本之家
脚本之家(jb51.net)每天提供最新IT类资讯、原创内容、编程开发的教程与经验分享,送书福利天天在等你!
 最新文章