键盘敲入A字母时,操作系统期间发生了什么
大约 3 分钟
键盘敲入A字母时,操作系统期间发生了什么
先引知识
键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「键盘敲入A 字母时,操作系统期间发生了什么吗」?
那要想知道这个发生的过程,我们得 先了解了解「操作系统是如何管理多种多样的的输入输出设备」 的,等了解完这个后,我们再来看看这个问题,你就会发现问题已经被迎刃而解了。
硬件架构图、三条总线
(现在我默认你看完了该笔记文件所在文件夹的其他笔记,我们再回来看这这问题)
看完前面的内容,相信你对输入输出设备的管理有了一定的认识,那接下来就从操作系统的角度回答开头的问题「键盘敲入字母时,操作系统期间发生了什么?」
我们先来看看 CPU 的硬件架构图:

CPU 里面的内存接口,直接和系统总线通信,然后系统总线再接入一个 I/O 桥接器,这个 I/O 桥接器,另一边接入了内存总线,使得 CPU 和内存通信。再另一边,又接入了一个 I/O 总线,用来连接 I/O 设备,比如键盘、显示器等。
完整工作流程
键盘控制器工作,并通过中断信号 Call CPU
- 那当用户输入了键盘字符,键盘控制器 就会产生扫描码数据,并将其缓冲在键盘控制器的寄存器中
- 紧接着键盘控制器通过总线给 CPU 发送 中断请求
CPU调用中断处理程序
- CPU 收到中断请求后,操作系统会 保存被中断进程的 CPU 上下文,然后调用键盘的 中断处理程序。
- 其中中断处理程序的工作:(键盘的中断处理程序是在键盘驱动程序初始化时注册的)
- 从键盘控制器的寄存器的缓冲区读取扫描码,再根据扫描码找到用户在键盘输入的字符;
- 如果输入的字符是显示字符,那就会把扫描码翻译成对应显示字符的 ASCII 码。比如用户在键盘输入的是字母 A,是显示字符,于是就会把扫描码翻译成 A 字符的 ASCII 码。
- 得到了显示字符的 ASCII 码后,就会把 ASCII 码放到「读缓冲区队列」,接下来就是要把显示字符显示屏幕了
显示设备驱动定时工作
- 显示设备的驱动程序会定时从「读缓冲区队列」读取数据放到「写缓冲区队列」
- 最后把「写缓冲区队列」的数据一个一个写入到显示设备的控制器的寄存器中的数据缓冲区,最后将这些数据显示在屏幕里。
恢复
显示出结果后,恢复被中断进程的上下文
(这里没解释清楚,而且感觉有问题。CPU将ASCII放到读缓冲队列的时候,中断程序处理完后就可以开始恢复了吧,而不是这里说的 “显示出结果” 后。而且这里说显示设备的调用是定时工作……)
链接到当前文件 0
没有文件链接到当前文件