中断过程主要包括两个阶段:中断响应和中断处理。中断响应阶段由硬件实现,而中断处理阶段则由CPUI执行中断服务程序来完成,所以中断处理是由轶件实现的。
中断响应是指CPU发现中断请求开始到调出中断服务程序这一过程。在此过程中CPU完成以下3个任务:
(1)保存被中断程序的返回地址和程序状态信息。
为了保证从中断服务程序返回后被中断程序在断点处能继续正确执行下去,有两类信息不能被中断服务程序破坏。一类是用户可见的通用寄存器的内容,这些寄存器存放着被中断程序执行到断点处的现行值,一般把这类信息称为现场;另一类是断点处的程序计数器(PC)和程序状态字寄存器(PSWR)中的内容,前者是中断返回地址,后者是机器状态信息,一般把这类信息称为断点和状态信息。对于现场信息,因为是用指令可直接访问的,所以通常在中断服务程序中通过指令把它们保存到栈中,即由致件室现保在点而对于断点和状态信息,因为必须将中断服务程序的首地址和初始程序状态字装人PC和PSWR中后,才能转到中断服务程序执行,所以,原来在PC和PSWR中的断点和状态信息应在CPU响应中断过程中先由硬件自动保存到某个特定的地方(栈或专门寄存器)
(2)识别中断源并根据中断响应优先级进行判优。
中断响应的结果是调出相应的中断服务程序来执行,因此,在中断响应过程中,CPU必须能够识别出哪些中断有请离,并且在有多个中断请求出现的情况下,选择响应优先级最高的中断。
(3)调出中断服务程序。
CPU通过相应步骤得到所响应的中断源对应的中断服务程序首地址和初始程序状态字,并把它们分别送 PC和 PSWR。这样,在中断响应结束后的下一个时钟周期,CPU就转入相应的中断服务程序执行。
CPU响应中断的时间越短越好。中断响应时间是中断系统设计时需考虑的一个重要指标,它反映了计算机系统的灵敏度。显然,中断响应时间与断点和状态信息保存时间、中断源识别和判优的速度以及获得中断服务程序首地址和初始状态的时间都有关系。不同的中断响应处理机制,得到的中断响应时间不同。例如,MIPS处理器采用一种简单的响应机制,断点(即当前PC中的内容)直接保存在特殊寄存器EPC中,而不需要访问内存来存取栈,中断源的识别和判优处理也由软件进行,CPU只要把进行中断源识别和判优处理的中断查询程序的首地址送PC即可完成中断响应过程。因此,MIPS处理器的中断响应时间很短。
很显然,在保护断点、机器状态和现场的过程中,如果又有新的中断被响应,则原被保存的断点、状态和现场等信息就会被破坏,因而,需要有一种机制能保证断点和现场等的保护过程不被新的中断请求打断。通常,用一个“中断允许”位来实现控制。当CPU中的“中断允许”位为1时,CPU 处于“中断允许”状态或“开中断”状态,否则就是“禁止中断”或“关中断”状态。CPU只有在“中断允许”状态时,才有可能响应新的中断请求。
因此,中断响应的条件有以下3个:
(1)CPU处于“开中断”状态。
(2)至少要有一个未被屏蔽的中断请求。
(3)当前指令刚执行完。
当CPU同时满足上述3个条件时,就响应中断,进入中断响应周期。在中断响应周期中,通过执行一条隐指令,完成以下几个操作。
(1)关中断。将中断允许标志置为禁止(“关中断”)状态,这时将屏蔽所有可屏蔽中断的请求。
(2)保护断点和程序状态。将当前 PC和PSWR中的断点和状态信息送入栈中或特殊寄存器保存。
(3)识别中断源并转中断服务程序。通过某种方式获得优先级最高的中断源所对应的中断服务程序的首地址和初始程序状态,并分别送PC和PSWR。
转载自书本:计算机组成与系统结构(第3版)袁春风(主编)
之所以此处没有选择转载的标签是因为转载需要加上地址,但书籍上的哪里来链接啊……