一种中断处理方法及流水线控制器与流程

文档序号:12718685阅读:486来源:国知局
一种中断处理方法及流水线控制器与流程

本发明属于微处理器设计技术领域,具体地说,是涉及一种中断处理方法及流水线控制器。



背景技术:

在微处理器中,中断(Interrupt)是一种重要的通信、控制方法之一。产生中断后,处理器核将暂时停止当前处理的程序,转而去响应中断请求,在完成中断服务程序之后,返回继续执行被中断的程序。

中断按产生原因可分为软件中断和硬件中断。软件中断也称为例外或异常(Exception),由指令的执行状态决定,通常在指令的不同流水级可能出现不同的例外,例如在指令译码阶段发现指令非法、在Load/Store指令执行阶段发现TLB缺失、在除法指令执行时发现除数是0、在计算指令执行完毕后发现溢出,或者处理器提供软件中断/陷阱指令,提供一种类似系统调用的功能。不同例外可能在不同的流水级产生或被发现,但是其共同点是由指令产生。硬件中断是指由处理器核之外的设备在特定情况下,请求内核处理相关事务,比如在DMA完成数据搬运之后可通过中断通知内核DMA事务的结束、内核配置外设错误导致出现错误请求内核处理并重新配置,或者一些通用的中断,可配置处理器在中断产生时,运行特定的程序。

中断具有不同的处理方式,通常有精确软件中断与非精确软件中断的区别。精确软件中断需要满足以下两个条件:第一,中断返回地址对应的指令之前的指令完全执行完毕,且对处理器状态进行了修改;第二,中断返回地址对应的指令及其之后的指令对处理器没有进行修改。而不满足上述两个条件的处理方式称之为非精确软件中断。一般情况下,大部分中断要求精确软件中断,只有极少数非精确软件中断中断,或者在某些处理器中没有非精确软件中断。

对于例外而言,产生例外的指令的地址就是中断返回地址,硬件中断为了与软件中断统一处理,通常的处理方法是绑定一条除了某些特定指令之外的指令,当该指令运行至中断处理逻辑所在流水级时,与例外作相同处理。因为中断可能在各流水级产生,为了精确软件中断的处理,通常在最晚可能产生例外的流水级中统一处理中断,由于某些中断在指令执行完毕之后才可能被发现,所以该流水级较多选在提交/写回级(流水线最后一级)。

处理器在响应中断时,通常会冲刷整个流水线,然后对中断服务程序取指。由于中断处理所在流水级已经处于整个流水线的末尾,此时对流水线冲刷将导致后续已经进行取指、译码、执行的指令被取消,当中断返回之后继续执行。这种方式对流水线的利用率很低,被冲刷的指令在中断返回之后仍然需要重新执行,既影响性能又增加功耗。



技术实现要素:

本发明为了解决现有中断处理方法为响应中断而冲刷整个流水线,使得冗余执行造成性能损失和功耗增加的问题,本发明将改进处理器对中断的响应方法,最大限度的减少性能损失和功耗。

为了解决上述技术问题,本发明采用以下技术方案予以实现:

一种中断处理方法,包括以下步骤:

(1)、内核接收中断请求,并获取中断向量;

(2)、内核判断当前状态是否允许中断,若允许,取指单元使用中断向量对中断服务程序进行取指;

(3)、内核执行中断服务程序的首条指令,并使用首条指令标识进行标识,同时,内核当前流水线上的尾部指令正常执行,所述尾部指令为内核当前流水线上位于所述中断服务程序中的首条指令之前的指令;

内核执行指令过程中,当执行至该指令的最后一级时,将位于该指令之后的指令的地址进行保存,所述位于该指令之后的指令为程序若不受中断影响,该指令执行完成之后,下一条应该执行完成的指令;

若内核执行的指令为中断服务程序的首条指令,当执行至该指令的最后一级时,将执行中断服务程序首条指令之前的指令时所保存的地址作为中断返回地址记录在中断返回寄存器中;

(4)、中断服务程序中的所有指令执行完毕后,按照中断返回寄存器中保存的返回地址进行返回。

进一步的,步骤(3)之前还包括判断中断源的类型的步骤,包括硬件中断和软件中断,若步骤(1)中所接收的中断为硬件中断,则按照步骤(3)-步骤(4)执行。

进一步的,若步骤(1)中所接收的中断为软件中断,则进一步判断软件中断属于非精确软件中断还是精确软件中断,若为非精确软件中断,则按照步骤(3)-步骤(4)执行,若为精确软件中断,则步骤(2)之前还包括冲刷掉内核当前流水线上发生精确软件中断指令之后的所有指令的步骤,发生精确软件中断指令执行至最后一级时,决定如何保存地址:若该精确软件中断需要重新执行该指令,则保存该指令的地址;否则,按照步骤(3)-步骤(4)执行。

进一步的,步骤(3)中执行所述尾部指令时,若所述尾部指令存在跳转指令,判断所述跳转指令与所述中断请求的优先级,若所述跳转指令的优先级不高于所述中断请求的优先级,向流水线控制器发出低优先级的冲刷流水线控制请求,计算出跳转目标地址并记录,不执行跳转。

进一步的,步骤(3)中执行所述尾部指令时,若所述跳转指令的优先级高于所述中断请求的优先级,向流水线控制器发出高优先级的冲刷流水线控制请求,向取指单元给出取指请求,执行所述跳转指令,此时不执行所述中断服务程序,内核判断当前状态修改为不允许中断,返回步骤(1)。

进一步的,流水线控制器接收到所述冲刷流水线控制请求时,根据冲刷流水线控制请求的优先级以及中断服务程序的首条指令标识确定每一流水级的控制信号:

当前流水线上存在中断服务程序的首条指令,且需要响应尾部指令给出的低优先级的冲刷流水线控制时,不冲刷中断服务程序所在流水级,中断服务程序所在流水级由中断服务程序指令给出的流水线控制请求控制。

基于上述的一种中断处理方法,本发明同时提出了一种流水线控制器,包括指令标记单元、第一处理请求单元、第二请求处理单元、控制信号选择单元,

所述指令标记单元用于保存中断服务程序的首条指令标志,将当前流水线上每一流水级的首条指令标志组成指令标记信号传递至所述第二请求处理单元和控制信号选择单元;

所述第一请求处理单元用于接收所有流水级产生的流水线控制请求,处理尾部指令给出的低优先级冲刷流水线控制请求,产生第一控制信号;

所述第二请求处理单元处理由中断服务程序指令给出的流水线控制信号,产生第二控制信号;

所述控制信号选择单元根据所述流水线控制请求和指令标记信号确定每一流水级当前执行的指令为尾部指令还是中断服务程序指令,选择由第一控制信号控制还是由第二控制信号控制。

与现有技术相比,本发明的优点和积极效果是:本发明的中断处理方法,响应中断不会冲刷流水线,已经取指、发射、译码、执行的指令可以继续执行,避免了这些指令的重复操作。而中断服务程序的指令会在上述指令执行的同时,进行取指,并随着流水线一步步执行,所以对中断服务程序的执行没有影响。

结合附图阅读本发明实施方式的详细描述后,本发明的其他特点和优点将变得更加清楚。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明所提出的中断处理方法的一种实施例流程图;

图2是本发明所提出的中断控制器的一种实施原理方框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

本实施例提出了一种中断处理方法,如图1所示,包括以下步骤:

S1、内核接收中断请求,并获取中断向量;其中,若中断请求为硬件中断,则内核接收由硬件中断控制器发送的中断请求,若中断请求为软件中断,则内核接收由确定软件中断的单元发送的中断请求,内核与之通信获得中断向量。

S2、内核判断当前状态是否允许中断,若允许,取指单元使用中断向量对中断服务程序进行取指;并不将先于中断服务程序首条指令进入流水线但未完成的指令(称之为尾部指令)进行冲刷。中断服务程序(ISR)的首条指令将具有特殊的标识,表明该指令是中断服务程序的首条指令,中断服务程序的首条指令以及后续进入流水线的指令属于中断服务程序指令。

S3、内核执行中断服务程序的首条指令,并使用首条指令标识进行标识,同时,内核当前流水线上的尾部指令正常执行,所述尾部指令为内核当前流水线上位于所述中断服务程序中的首条指令之前的指令;

内核执行指令过程中,当执行至该指令的最后一级时,将位于该指令之后的指令的地址进行保存,其中,位于该指令之后的指令为程序若不受中断影响,该指令执行完成之后,下一条应该执行完成的指令;

若内核执行的指令为中断服务程序的首条指令,当执行至该指令的最后一级时,将执行中断服务程序首条指令之前的指令时所保存的地址作为中断返回地址记录在中断返回寄存器中;

S4、中断服务程序中的所有指令执行完毕后,按照中断返回寄存器中保存的返回地址进行返回。

指令的执行必将经过取指、发射、译码、执行等流程,而流水线存在的意义就是当一条指令在执行某一个流程时,其他指令可以执行另一个流程,如此将整个指令流水化之后,从宏观看,在每个流程的时间都可以执行一条指令。所以在中断来临时,在中断服务程序开始载入执行的同时,若允许已经进行取指的指令继续执行,并不将尾部指令进行冲刷,将大大降低响应中断带来的性能损失,降低因为冗余执行而造成的更多功耗。

本实施例的中断处理方法,响应中断不会冲刷流水线,已经取指、发射、译码、执行的指令可以继续执行,避免了这些指令的重复操作。而中断服务程序的指令会在上述指令执行的同时,进行取指,并随着流水线一步步执行,所以对中断服务程序的执行没有影响。

步骤S3之前还包括判断中断源的类型的步骤,包括硬件中断和软件中断,若步骤S1中所接收的中断为硬件中断,则按照步骤S3-步骤S4执行。

若步骤S1中所接收的中断为软件中断,则进一步判断软件中断属于非精确软件中断还是精确软件中断,对于不要求精确软件中断的软件中断,其处理方法与硬件中断完全形同,即软件中断一旦触发,即可认为出现一个较高优先级的硬件中断,也即若为非精确软件中断,则按照步骤S3-步骤S4执行,若为精确软件中断,则步骤S2之前还包括冲刷掉内核当前流水线上发生精确软件中断指令之后的所有指令的步骤,发生精确软件中断指令执行至最后一级时,决定如何保存地址:若该精确软件中断需要重新执行该指令,则保存该指令的地址;否则,按照步骤S3-步骤S4执行。

对于要求精确软件中断的软件中断而言,就像一条没有预测命中跳转指令,为了中断的精确性,不可避免的需要冲刷后续指令。但是中断处理还是一旦触发立即处理,最大限度的减少可能的冗余执行。

步骤S3中执行所述尾部指令时,若所述尾部指令存在跳转指令,判断所述跳转指令与所述中断请求的优先级,若所述跳转指令的优先级不高于所述中断请求的优先级,向流水线控制器发出低优先级的冲刷流水线控制请求,计算出跳转目标地址并记录,不执行跳转。

步骤S3中执行所述尾部指令时,若所述跳转指令的优先级高于所述中断请求的优先级,向流水线控制器发出高优先级的冲刷流水线控制请求,向取指单元给出取指请求,执行所述跳转指令,此时不执行所述中断服务程序,内核判断当前状态修改为不允许中断,返回步骤S1。

流水线控制器接收到所述冲刷流水线控制请求时,根据冲刷流水线控制请求的优先级以及中断服务程序的首条指令标识确定每一流水级的控制信号:

当前流水线上存在中断服务程序的首条指令,且需要响应尾部指令给出的低优先级的冲刷流水线控制时,不冲刷中断服务程序所在流水级,中断服务程序所在流水级由中断服务程序指令给出的流水线控制请求控制。

要求跳转指令的冲刷操作不影响中断服务程序的执行,在精确软件中断处理方法中,同样可能要求不影响正在执行的中断服务程序,不仅仅尾部指令的操作对中断服务程序不产生影响,还要求中断服务程序内部产生的流水线控制请求对中断服务程序可以产生应有的效果,相当于将流水线分成两个独立的部分,两部分指令所产生的流水线控制不会互相影响。

实施例二

基于实施例中的一种中断处理方法,本实施例同时提出了一种流水线控制器,包括指令标记单元、第一处理请求单元、第二请求处理单元、控制信号选择单元,

其中,指令标记单元用于保存中断服务程序的首条指令标志,将当前流水线上每一流水级的首条指令标志组成指令标记信号传递至所述第二请求处理单元和控制信号选择单元;

第一请求处理单元用于接收所有流水级产生的流水线控制请求,处理尾部指令给出的低优先级冲刷流水线控制请求,产生第一控制信号;

第二请求处理单元处理由中断服务程序指令给出的流水线控制信号,产生第二控制信号;

控制信号选择单元根据所述流水线控制请求和指令标记信号确定每一流水级当前执行的指令为尾部指令还是中断服务程序指令,选择由第一控制信号控制还是由第二控制信号控制。

当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的普通技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1