当在键盘上按下一个键时会进行一下操作:
1.当按下任意一个键时,键盘编码器监控会来判断按下的键是哪个
2.键盘控制器用将解码,将键盘的数据保存到键盘控制器里数据寄存器里面
3.此时发送一个中断请求给中断控制器,中断控制器获取到中断号发送给CPU
4.cpu通过中断向量表(在操作系统初始化形成)来找到键盘服务程序的内存地址,此时cpu的程序计数器直接跳转到键盘中断程序。
5.在进行新程序时需要保存上个程序寄存器的一些值,以便于下次继续进行以前的操作
6.键盘中断服务程序一定存在于操作系统程序中,因为会进行in或者out等内核操作。
7.IN EAX 0x03FA 将0x03FA对应的键盘控制器的寄存器的值读取到CPU的 EAX中, OUT 0x06B1 EAX 将EAX的值写到显示控制器中0X06B1对应的寄存器中从而显示到屏幕上。
当打印完后需要响应一次中断,之后CPU还需要将内存的打印字符再送到打印机的寄存器中,会极大浪费cpu的开销。此时加入一个DMA机制来缓解CPU的的开销,将数据移动的任务交给DMA,只需要在所有打印任务完成之后触发一次中断,最后恢复应用程序1的后续操作即可。如下两图