01.为什么会引出中断的概念
首先引出中断产生的原因,对于CPU而言,假如没有中断的概念,CPU会根据指令在内存中的存放顺序,依次取指,解码,执行;通常情况下PC的值一般指向下一条需要处理的指令地址。
当程序顺序执行时,PC每次根据指令字节数增加相应的值。以32位指令解码为例,每执行一条非跳转指令的情况下一般是增加4字节。执行过程中,若遇到跳转/返回指令,则跳转/返回到对应的PC地址执行。
CPU指令的处理流程可参考下图:
▲CPU处理指令过程
对于上图不存在中断的情况下,如果当前状态需要CPU处理一些比较紧急的事件,顺序执行往往会导致不能够及时响应该事件。
比如当你敲下键盘上的“空格键”,发现操作系统在处理键盘响应之前,要先执行完当前正在执行的任务,可能需要经过10S才能响应键盘的输入请求,这样的设计往往不是很合理;
因此引入中断可以很好的解决该问题,依旧以键盘按下“空格键”为例,当前CPU正在处理其他任务,检测到键盘输入后,产生一个外部中断。
此时CPU首先保存当前执行状态(现场保护),主要包括寄存器状态、堆栈信息、当前PC地址等信息;然后跳转到对键盘输入的处理,执行完键盘相关的任务后返回被打断的位置继续执行。因此,引入中断后,指令的处理流程可以进一步归纳如下图:
▲CPU带中断处理指令过程
在上图这种设计模式下,CPU能够在键盘按下“空格键”后,及时优先相应键盘的输入中断,并在执行完中断后从之前被打断的位置继续执行。
02.中断执行原理细化
程序最终都是以指令的形式在CPU中解码执行,中断作为程序的一小部分,最终也是在CPU中处理并执行,需要理解中断的处理实际上最终在CPU中处理,而外部设备仅仅是发送信号给CPU,告诉CPU某一时刻有中断产生,请求CPU响应中断,最终决定是否处理以及处理过程全都交给CPU执行。例如生活中手上端着一个很烫的盘子,手仅仅是通过痛觉神经将信号给大脑,而实际上通过大脑够控制你下一步的行为。
接下来假设CPU需要处理中断了,在说明该问题之前先回到CPU处理指令的流程,当前CPU正在处理程序,外部产生了一个timer中断需要处理,CPU处理的过程参考下图:
基于以上内容,基于我司自主研发的SkyEye天目全数字实时仿真软件在仿真芯片的搭建过程中,往往需要通过连线先建立部分外设和中断控制器之间的连接关系,再建立中断控制器和CPU之间的连接关系。串口、中断、CPU之间的连接关系如图所示:
基于以上仿真硬件设计,SkyEye能够在不具备真实开发板的情况下,运行仿真的龙芯程序,并基于此做一些辅助测试,系统调试、系统开发等工作。