文章 https://zhuanlan.zhihu.com/p/195701027 的学习笔记
设备控制器
为了屏蔽设备之间的差异,每个设备都有一个叫设备控制器(Device Control) 的组件
.
控制器有三个寄存器:
- 数据寄存器:CPU 向 I/O 设备写入需要传输的数据
- 命令寄存器:CPU 发送一个命令给 I/O 设备,任务完成后,会把状态寄存器里面的状态标记为完成。
- 状态寄存器:目的是告诉 CPU ,现在已经在工作或工作已经完成,如果已经在工作状态,CPU 再发送数据或者命令过来,都是没有用的
类似于汇编语言
具体过程
.
当用户输入了键盘字符,键盘控制器就会产生扫描码数据,并将其缓冲在键盘控制器的寄存器中,紧接着键盘控制器通过总线给 CPU 发送中断请求(中断有两种,一种软中断,例如代码调用 INT
指令触发,一种是硬中断,就是硬件通过中断控制器触发的)
CPU 收到中断请求后,操作系统会保存被中断进程的 CPU 上下文,然后调用键盘的中断处理程序(储存在对应的设备驱动程序里),该程序从键盘控制器的寄存器的缓冲区读取扫描码,再根据扫描码找到输入的字符,如果输入的字符是显示字符,那就会把扫描码翻译成对应显示字符的 ASCII 码
得到了ASCII 码后,就会把 ASCII 码放到「读缓冲区队列」,接下来就是要把显示字符显示屏幕了,显示驱动程序会定时从「读缓冲区队列」读取数据放到「写缓冲区队列」,最后把「写缓冲区队列」的数据一个一个写入到显示控制器的寄存器中的缓冲区,最后将这些数据显示在屏幕里
显示出结果后,恢复被中断进程的上下文