[发明专利]异常现场恢复方法、装置及计算机可读存储介质有效
申请号: | 201710594077.X | 申请日: | 2017-07-20 |
公开(公告)号: | CN107436752B | 公开(公告)日: | 2020-12-01 |
发明(设计)人: | 邢金璋;杨灿;汪文祥 | 申请(专利权)人: | 龙芯中科技术有限公司 |
主分类号: | G06F9/38 | 分类号: | G06F9/38;G06F11/07 |
代理公司: | 北京同立钧成知识产权代理有限公司 11205 | 代理人: | 杨泽;刘芳 |
地址: | 100095 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 异常 现场 恢复 方法 装置 计算机 可读 存储 介质 | ||
本申请提供一种异常现场恢复方法、装置及计算机可读存储介质,其中,该方法包括:获取执行异常返回指令,该异常返回指令包括操作码,该操作码用于指示处理器执行到异常处理函数的最后一条指令,执行该异常返回指令,以修改程序计数器值以及将压入异常栈的目标寄存器堆的信息从异常栈弹出,返回继续执行被打断的正常处理函数。该技术方案不需要软件代码对异常现场进行恢复,降低了软件代码占用空间和功耗,提高了处理器的执行效率。
技术领域
本申请涉及计算机技术领域,尤其涉及一种异常现场恢复方法、装置及计算机可读存储介质。
背景技术
现有计算机系统中,处理器作为系统控制中心,需要对系统中的多个硬件设备进行管理。例如,当处理器正常执行系统中的某个程序时,可能会出现被外部事件、系统调用或指令异常执行等情况打断的现象。此时,处理器会对程序执行现场保护后并转向处理异常事件,以及在异常事件执行结束后恢复异常的执行现场,继续执行被打断的处理程序。
现阶段,异常现场保护和恢复的实现可以通过运行设定的软件程序来实现。具体的,在异常事件开始执行之前,通过运行设定的压栈程序将需要保护的寄存器堆压入异常栈,以保存被打断程序的相关信息,相应的,在异常事件执行结束后,通过设定的弹栈程序将被压入异常栈的寄存器堆弹出异常栈,以恢复异常事件执行前被保存的被打断程序的相关信息,进而保证处理器继续执行被打断的处理程序。
然而,上述异常现场保护和恢复方法中设定的压栈程序和弹栈程序使用的处理器指令非常多(比如,在MIPS架构中,若需要对30多个寄存器堆进行保护和恢复,此时需要60多条处理器指令),不仅占用的存储空间大,而且由于执行指令过多,导致执行效率低、功耗大。
综上所述,现有的异常现场保护和恢复方法中利用软件代码进行现场保护时,软件代码占用的存储空间大,致使处理器的执行效率低、功耗大。
发明内容
本申请提供一种异常现场恢复方法、装置及计算机可读存储介质,以解决现有异常现场恢复方法中处理器执行效率低、功耗大的问题。
本申请第一方面提供的一种异常现场恢复方法,包括:
获取异常返回指令,所述异常返回指令包括操作码,所述操作码用于指示处理器执行到异常处理函数的最后一条指令;
执行所述异常返回指令,以修改程序计数器值以及将压入异常栈的目标寄存器堆的信息从所述异常栈弹出,并返回继续执行被打断的正常处理函数。
在本申请的一实施例中,所述获取异常返回指令,包括:
在存储所述异常处理函数的存储器中获取一条指令;
解析所述指令,获取所述指令中的操作码;
在所述指令中的操作码与预设的所述异常返回指令的操作码一致时,确定所述指令为所述异常返回指令。
在本申请的另一实施例中,在所述获取异常返回指令之前,还包括:
在获取到异常请求时,打断正在执行的所述正常处理函数;
将所述正常处理函数对应的所述目标寄存器堆中的信息压入所述异常栈,并转向执行所述异常请求对应的异常处理函数。
在本申请的上述实施例中,所述处理器中设置有栈维护模块;
所述将所述正常处理函数对应的所述目标寄存器堆中的信息压入所述异常栈,包括:
通过所述栈维护模块将所述正常处理函数对应的所述目标寄存器堆中的信息压入所述异常栈;
所述执行所述异常返回指令,以修改程序计数器值以及将压入异常栈的目标寄存器堆的信息从所述异常栈弹出,并返回继续执行被打断的正常处理函数,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于龙芯中科技术有限公司,未经龙芯中科技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710594077.X/2.html,转载请声明来源钻瓜专利网。