本发明专利技术提供一种异常处理方法、计算机可读介质以及电子设备。所述异常处理方法包括:响应于在执行当前程序中的第一指令时检测到异常,中止第一指令的执行,存储第一指令的位置,并且跳转执行与所述异常对应的异常处理程序;在异常处理程序的执行期间获取第二指令,其中第二指令用于代替第一指令来执行;响应于异常处理程序结束执行,执行第二指令;以及,响应于第二指令结束执行,执行当前程序中第一指令的下一条指令,以继续当前程序的执行。本发明专利技术用于提高异常处理的效率,特别适用于多核处理器进行异常处理。进行异常处理。进行异常处理。
【技术实现步骤摘要】
异常处理方法、计算机可读介质及电子设备
[0001]本专利技术涉及异常处理
,更具体地,涉及一种异常处理方法、计算机可读介质以及电子设备。
技术介绍
[0002]在发生异常(exception)时,会中止处理器正常的执行流程,使得处理器转去执行对应的异常处理程序,发生异常的情况可能有很多种,可能是内部原因,也可能是外部原因,每种情况都有对应的异常处理方式。
[0003]有些异常类型需要通过中断的方式进行处理,内部中断作为中断的一种类型,表示处理器在执行指令的过程中遇到了错误的状况。处理器在执行每条指令时都会检测是否发生异常,若检测到发生了某个异常,则中止当前程序的执行转去处理该异常,并且在处理完该异常后,恢复发生该异常之前的被打断的程序。
[0004]异常可以包括故障(Fault)、陷阱(Trap)和终止(Abort)。处理器在遇到故障(诸如,除以零、缺页、溢出等)时,可以在对应的异常处理程序中进行纠正,并且在执行完异常处理程序后重新执行发生故障的指令,使得不再出错。陷阱主要用于为用户态的程序提供系统调用接口,以由操作系统来执行一些高优先级的操作;此外,陷阱还用于调试程序的目的,诸如用断点中断指令替换原始指令,当处理器执行到断点中断指令时,转去执行对应的调试程序并且用原始指令替换断点中断指令,在执行完调试程序后返回执行原始指令。终止主要用于指示不可恢复的错误,诸如双重故障等,在检测到这类异常时,通常会终止当前程序。
[0005]随着多核处理器的广泛应用,在遇到故障或陷阱类型的异常时,诸如在检测到用于调试程序的断点中断指令时,如果多核处理器的一个核已将断点中断指令替换回原始指令,则可能导致其他核在执行到该指令时出现一些问题。为解决这些问题,需要额外的操作来实现程序的正常运行,导致程序运行繁琐且低效。
技术实现思路
[0006]为克服上述现有技术中存在的问题,本专利技术的一个方面提供一种异常处理方法,包括:响应于在执行当前程序中的第一指令时检测到异常,中止第一指令的执行,存储第一指令的位置,并且跳转执行与所述异常对应的异常处理程序;在异常处理程序的执行期间获取第二指令,其中第二指令用于代替第一指令来执行;响应于异常处理程序结束执行,执行第二指令;以及响应于第二指令结束执行,执行当前程序中第一指令的下一条指令,以继续当前程序的执行。
[0007]上述方法中,在异常处理程序的执行期间获取第二指令(后文称为影子指令),该指令用于从异常处理程序返回当前程序时,代替发生异常的第一指令来执行,而无需在当前程序中替换发生异常的第一指令。例如,在设置断点中断指令来调试当前程序的情况下,无需用原始指令在当前程序中替换断点中断指令,从而避免增加额外的操作来实现当前程
序的正常执行。在不影响当前程序继续执行的情况下,能够提高异常处理的效率,特别适用于多核处理器进行异常处理。
[0008]上述方法还可以包括:设置用于存储标志位信息的第一寄存器,所述标志位信息用于指示是否要用第二指令代替第一指令来执行;以及,设置用于存储第二指令的第二寄存器。寄存器具有非常高的读写速度,使得在寄存器之间的数据传送非常快,通过设置第一和第二寄存器来分别存储标志位信息和第二指令,可以提高异常处理的效率。
[0009]上述方法中,在异常处理程序的执行期间获取第二指令包括:在异常处理程序的执行期间,获取与所述异常对应的预先设置的指令或者获取用户提供的指令,作为第二指令;以及,将第一寄存器中的标志位信息设置为指示需要用第二指令代替第一指令来执行,并且在第二寄存器中存储第二指令。
[0010]上述方法还可以包括:预先设置与所述异常对应的多个指令。以及,获取与所述异常对应的预先设置的指令包括:根据预设规则,在与所述异常对应的多个指令中进行选择。为异常预先设置对应的多个指令,可使(代替发生异常的第一指令来执行的)第二指令的选择范围更广,例如可以根据实际需求灵活地对第二指令进行选择。
[0011]上述方法中,响应于异常处理程序结束执行而执行第二指令包括:响应于异常处理程序结束执行,读取第一寄存器中的标志位信息;响应于所述标志位信息指示需要用第二指令代替第一指令来执行,读取第二寄存器中的第二指令;以及执行第二指令。
[0012]上述方法还可以包括:响应于第二指令结束执行,将第一寄存器中的标志位信息设置为指示无需用第二指令代替第一指令来执行,并且清除第二寄存器中的第二指令。
[0013]上述方法还可以包括:响应于异常处理程序结束执行,获取响应于检测到异常所存储的第一指令的位置,在程序计数器寄存器中存储第一指令的位置,并且在指令寄存器中存储第二指令,以便执行指令寄存器中的第二指令。
[0014]上述方法中,响应于第二指令结束执行而执行当前程序中第一指令的下一条指令包括:响应于第二指令结束执行,使程序计数器寄存器执行加法计算,得到当前程序中第一指令的下一条指令的位置;使指令寄存器根据程序计数器寄存器中的位置读取当前程序中第一指令的下一条指令,并且存储所述下一条指令;以及,执行指令寄存器中的当前程序中第一指令的下一条指令。
[0015]上述方法通过对第一和第二寄存器、程序计数器寄存器、指令寄存器执行一些简单的操作,就可以顺利地从异常处理程序返回当前程序以继续当前程序的执行,从而提高了异常处理的效率。
[0016]本专利技术的另一个方面提供一种计算机可读介质,该计算机可读介质上存储有计算机程序,该计算机程序用于被处理器执行时实现上述异常处理方法。
[0017]本专利技术的另一个方面提供一种电子设备,包括处理器和存储器,存储器上存储有计算机程序并且存储器耦合到处理器,该计算机程序用于被处理器执行时,使得所述电子设备实现上述异常处理方法。
[0018]应当理解的是,以上的一般描述和后文的细节描述仅是示意性和解释性的,并不用于限制本专利技术。
附图说明
[0019]此处的附图被并入说明书中并构成说明书的一部分,示出了符合本专利技术的实施例,并与说明书一起用于解释本专利技术的原理,其中:图1示意性地示出了根据本专利技术一个实施例的异常处理方法的流程图;图2a
‑
2e示意性地示出了基于图1所示的方法实施例进行异常处理的具体示例。
具体实施方式
[0020]为使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本专利技术进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。
[0021]本专利技术的一个方面提供一种异常处理方法,用于处理故障和陷阱类型的异常。
[0022]现参考图1,其示意性地示出了根据本专利技术一个实施例的异常处理方法的流程图,该方法适用于在诸如CPU、GPU之类的单核、多核处理器中执行,包括如下步骤S11
‑
S16:步骤S11. 设置两种专用寄存器,即第一寄存器和第二寄存器。其中,第一寄存器为影子使能(SHADOW_ENABLE)寄存器,第二寄存器为影子指令(SHADOW_INS本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种异常处理方法,其特征在于,所述方法包括:响应于在执行当前程序中的第一指令时检测到异常,中止所述第一指令的执行,存储所述第一指令的位置,并且跳转执行与所述异常对应的异常处理程序;在所述异常处理程序的执行期间获取第二指令,所述第二指令用于代替所述第一指令来执行;响应于所述异常处理程序结束执行,执行所述第二指令;以及响应于所述第二指令结束执行,执行所述当前程序中所述第一指令的下一条指令,以继续所述当前程序的执行。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:设置用于存储标志位信息的第一寄存器,所述标志位信息用于指示是否要用所述第二指令代替所述第一指令来执行;以及设置用于存储所述第二指令的第二寄存器。3.根据权利要求2所述的方法,其特征在于,在所述异常处理程序的执行期间获取第二指令包括:在所述异常处理程序的执行期间,获取与所述异常对应的预先设置的指令或者获取用户提供的指令,作为所述第二指令;以及将所述第一寄存器中的标志位信息设置为指示需要用所述第二指令代替所述第一指令来执行,并且在所述第二寄存器中存储所述第二指令。4.根据权利要求3所述的方法,其特征在于,所述方法还包括:预先设置与所述异常对应的多个指令;以及获取与所述异常对应的预先设置的指令包括:根据预设规则,在与所述异常对应的多个指令中进行选择,以获取与所述异常对应的预先设置的指令。5.根据权利要求3所述的方法,其特征在于,响应于所述异常处理程序结束执行,执行所述第二指令包括:响应于所述异常处理程序结束执行,读取所述第一寄存器中的标志位信息;响应于所述标志位信息指示需要用所述第二指令代替所述第一指令...
【专利技术属性】
技术研发人员:张毅,
申请(专利权)人:杭州登临瀚海科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。