设备管理
键盘敲入字母时,期间发生了什么?
前提:
- 主要涉及到设备控制器(包含:数据寄存器、命令寄存器、状态寄存器)的概念;
- CPU与设备并不是直接交互,而是通过设备控制器来实现的。
过程:
- 用户从键盘敲入字母时,就会将数据缓存在键盘控制器的寄存器中,键盘控制器通过总线发送中断给CPU;
- CPU收到中断请求,保存进程的上下文,调用键盘控制器的中断处理函数读取寄存器中的数据存放到【读缓存区队列】;
- 显示器控制器会定时的从【读缓存区队列】放到【写缓存区队列】,最后将【写缓存区队列】的数据写入到显示器控制器的寄存器中;
- 最后恢复中断的进程上下文。
大体过程:键盘控制器寄存器--CPU中断--保存进程上下文--处理中断请求--恢复进程上下文
中断
- 中断是一件异步的事件处理机制;
- 中断处理程序,要尽可能快的执行完,这样可以减少对正常进程运行调度的影响;
临时关闭中断:由于中断处理程序执行时间过长,可能其他的设备控制器发送给CPU的中断请求未被处理进而丢失中断请求
解决:
引入软中断、将中断过程分为两个阶段:上半部+下半部
- 上半部(硬中断):直接处理硬件请求,负责耗时短的操作,执行迅速;例如把网卡的数据读取到内存中,而不关心数据的处理;
- 下半部(软中断):以内核线程的方式执行(每一个CPU对应一个软中断内核线程ksoftirpd),处理上半部未完成的工作,通常是比较耗时的工作,延迟执行。
hshuo的面试之路 文章被收录于专栏
作者目标是找到一份Java后端方向的工作 此专栏用来记录从Bilibili、书本、其他优质博客上面学习的内容 用于巩固、总结内容 主要包含Docker、Dubbo、Java基础、JUC、Maven、MySQL、Redis、SpringBoot、SpringCloud、数据结构、杂文、算法、计算机网络、操作系统、设计模式等相关内容