0%

键盘敲入字符后,操作系统发生了什么?

文章 https://zhuanlan.zhihu.com/p/195701027 的学习笔记

设备控制器

为了屏蔽设备之间的差异,每个设备都有一个叫设备控制器(Device Control) 的组件

.image-20220215233836070

控制器有三个寄存器:

  • 数据寄存器:CPU 向 I/O 设备写入需要传输的数据
  • 命令寄存器:CPU 发送一个命令给 I/O 设备,任务完成后,会把状态寄存器里面的状态标记为完成。
  • 状态寄存器:目的是告诉 CPU ,现在已经在工作或工作已经完成,如果已经在工作状态,CPU 再发送数据或者命令过来,都是没有用的

类似于汇编语言

具体过程

.image-20220215233418132

当用户输入了键盘字符,键盘控制器就会产生扫描码数据,并将其缓冲在键盘控制器的寄存器中,紧接着键盘控制器通过总线给 CPU 发送中断请求(中断有两种,一种软中断,例如代码调用 INT 指令触发,一种是硬中断,就是硬件通过中断控制器触发的)

CPU 收到中断请求后,操作系统会保存被中断进程的 CPU 上下文,然后调用键盘的中断处理程序(储存在对应的设备驱动程序里),该程序从键盘控制器的寄存器的缓冲区读取扫描码,再根据扫描码找到输入的字符,如果输入的字符是显示字符,那就会把扫描码翻译成对应显示字符的 ASCII 码

得到了ASCII 码后,就会把 ASCII 码放到「读缓冲区队列」,接下来就是要把显示字符显示屏幕了,显示驱动程序会定时从「读缓冲区队列」读取数据放到「写缓冲区队列」,最后把「写缓冲区队列」的数据一个一个写入到显示控制器的寄存器中的缓冲区,最后将这些数据显示在屏幕里

显示出结果后,恢复被中断进程的上下文