键盘敲入字母时,期间发生了什么?
前提:
- 主要涉及到设备控制器(包含:数据寄存器、命令寄存器、状态寄存器)的概念;
- CPU与设备并不是直接交互,而是通过设备控制器来实现的。
过程:
- 用户从键盘敲入字母时,就会将数据缓存在键盘控制器的寄存器中,键盘控制器通过总线发送中断给CPU;
- CPU收到中断请求,保存进程的上下文,调用键盘控制器的中断处理函数读取寄存器中的数据存放到【读缓存区队列】;
- 显示器控制器会定时的从【读缓存区队列】放到【写缓存区队列】,最后将【写缓存区队列】的数据写入到显示器控制器的寄存器中;
- 最后恢复中断的进程上下文。
大体过程:键盘控制器寄存器--CPU中断--保存进程上下文--处理中断请求--恢复进程上下文
中断
- 中断是一件异步的事件处理机制;
- 中断处理程序,要尽可能快的执行完,这样可以减少对正常进程运行调度的影响;
临时关闭中断:由于中断处理程序执行时间过长,可能其他的设备控制器发送给CPU的中断请求未被处理进而丢失中断请求
解决:
引入软中断、将中断过程分为两个阶段:上半部+下半部
- 上半部(硬中断):直接处理硬件请求,负责耗时短的操作,执行迅速;例如把网卡的数据读取到内存中,而不关心数据的处理;
- 下半部(软中断):以内核线程的方式执行(每一个CPU对应一个软中断内核线程ksoftirpd),处理上半部未完成的工作,通常是比较耗时的工作,延迟执行。