CN112732481B - 一种处理器的异常修复方法及装置 - Google Patents
一种处理器的异常修复方法及装置 Download PDFInfo
- Publication number
- CN112732481B CN112732481B CN202011615563.3A CN202011615563A CN112732481B CN 112732481 B CN112732481 B CN 112732481B CN 202011615563 A CN202011615563 A CN 202011615563A CN 112732481 B CN112732481 B CN 112732481B
- Authority
- CN
- China
- Prior art keywords
- abnormality
- processor
- exception
- data
- aligned
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1438—Restarting or rejuvenating
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种处理器的异常修复方法及装置,该方法包括:检测步骤S101,对处理器的运行状态进行检测,如果检测到异常则设置异常标识;修复步骤S102:当操作系统SylixOS的ARCH层检测到所述异常标识时,所述ARCH层触发回调函数,在所述回调函数中对所述异常进行恢复。本发明的方法可以快速修复非对齐访问异常,通过抽象出的操作系统ARCH层对异常进行修复,使上层应用软件感知不到此类异常,继续正确执行相关程序代码,解决了上层应用出现错误时继续执行导致错误执行结果的问题,提高了用户体验,本发明中,不仅确定出处理器异常,还确定产生该异常的应用,且在修复过程中,在修复时仅需要将产生的异常的指令重新执行即可,修复速度快。
Description
技术领域
本发明涉及处理器修复技术领域,特别是一种处理器的异常修复方法及装置。
背景技术
现有软件针对c-sky架构处理器的非对齐访问异常处理比较简单,触发异常后会抛异常,直接造成相关软件无法直接运行的情况,需要运行在c-sky架构处理器上的应用软件在编码过程中注意非对齐指令的使用,进行人为控制,影响了软件的运行。
可见现有技术中,针对在c-sky架构处理器上非对齐访问异常的处理方法主要有以下缺陷和不足:
①不够智能,人为避免,目前,现有方法仅仅做到CPU异常的通知功能,没有真正规避硬件异常,均由上层应用用户自身编程控制,非常繁琐。
②不能通用,不利于多应用运行,这类处理器往往面对大量的用户开发各种应用软件,各软件运行时触发异常将导致原有软件停止运行,不利于多应用运行。
③影响上层应用正确运行,这类异常并非致命性异常,当上层应用触发非对齐访问异常时容易忽略,此时应用执行状态,通用寄存器状态容易不正常,导致上层应用运行得到错误的执行结果。
发明内容
本发明针对上述现有技术中的缺陷,提出了如下技术方案。
一种处理器的异常修复方法,该方法包括:
检测步骤,对处理器的运行状态进行检测,如果检测到异常则设置异常标识;
修复步骤:当操作系统SylixOS的ARCH层检测到所述异常标识时,所述ARCH层触发回调函数,在所述回调函数中对所述异常进行恢复。
更进一步地,所述异常为非对齐访问异常。
更进一步地,所述处理器为c-sky架构的处理器。
更进一步地,在所述回调函数中对所述异常进行恢复的操作包括:基于所述异常标识获取所述异常的初始地址,将所述初始地址到下一个对齐地址ADD之间的第一数据读出并写入寄存器中,读取ADD+1对齐地址处的第二数据,将所述第二数据与所述第一数据在所述寄存器中进行组合得到组合数据,通过PC指针反汇出导致处理器异常的指令,将所述指令基于所述组合数据重新执行。
更进一步地,所述检测步骤的操作为:检测所述处理器上的运行状态,当检测到所述处理器发生非对齐异常时,记录所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用,设置异常标识,并将所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用与所述异常标识相关联。
本发明还提出了一种处理器的异常修复装置,该装置包括:
检测单元,对处理器的运行状态进行检测,如果检测到异常则设置异常标识;
修复单元:当操作系统SylixOS的ARCH层检测到所述异常标识时,所述ARCH层触发回调函数,在所述回调函数中对所述异常进行恢复。
更进一步地,所述异常为非对齐访问异常。
更进一步地,所述处理器为c-sky架构的处理器。
更进一步地,在所述回调函数中对所述异常进行恢复的操作包括:基于所述异常标识获取所述异常的初始地址,将所述初始地址到下一个对齐地址ADD之间的第一数据读出并写入寄存器中,读取ADD+1对齐地址处的第二数据,将所述第二数据与所述第一数据在所述寄存器中进行组合得到组合数据,通过PC指针反汇出导致处理器异常的指令,将所述指令基于所述组合数据重新执行。
更进一步地,所述检测单元的操作为:检测所述处理器上的运行状态,当检测到所述处理器发生非对齐异常时,记录所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用,设置异常标识,并将所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用与所述异常标识相关联。
本发明的一种处理器的异常修复方法及装置,该方法包括:检测步骤S101,对处理器的运行状态进行检测,如果检测到异常则设置异常标识;修复步骤S102:当操作系统SylixOS的ARCH层检测到所述异常标识时,所述ARCH层触发回调函数,在所述回调函数中对所述异常进行恢复。本发明的方法可以快速修复非对齐访问异常,通过抽象出的操作系统ARCH层对异常进行修复,使上层应用软件感知不到此类异常,继续正确执行相关程序代码,解决了上层应用出现错误时继续执行导致错误执行结果的问题,提高了用户体验,本发明中,将异常的起始地址到下一个对齐地址ADD处的有效数据读出,存入相关寄存器中,再将ADD+1的对齐地址处的有效数据读出后进行组合,通过让PC指针反汇出导致处理器异常的指令,重新执行此次非对齐访问的操作的指令即可得到正确的地址数据并使软件正确运行,本发明中,不仅确定出处理器异常,还确定产生该异常的进程及相应的应用程序(可简称应用、APP等),使得在多应用运行时,确定产生该异常的应用,且在修复过程中,在修复时仅需要将产生的异常的指令重新执行即可,修复速度快,从而软件不必停止运行,提高了多应用同时运行的性能。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显。
图1是根据本发明的实施例的一种处理器的异常修复方法的流程图。
图2是根据本发明的实施例的一种处理器的异常修复装置的示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了本发明的一种处理器的异常修复方法,本发明的方法包括以下步骤。
检测步骤S101,对处理器的运行状态进行检测,如果检测到异常则设置异常标识;所述异常为非对齐访问异常,所述处理器为c-sky架构的处理器。
修复步骤S102:当操作系统SylixOS的ARCH层检测到所述异常标识时,所述ARCH层触发回调函数,在所述回调函数中对所述异常进行恢复。
本发明的方法可以快速修复非对齐访问异常,通过抽象出的操作系统ARCH层对异常进行修复,使上层应用软件感知不到此类异常,继续正确执行相关程序代码,解决了上层应用出现错误时继续执行导致错误执行结果的问题,提高了用户体验,这是本发明的重要发明点之一。
在一个实施例中,在所述回调函数中对所述异常进行恢复的操作包括:基于所述异常标识获取所述异常的初始地址,将所述初始地址到下一个对齐地址ADD之间的第一数据读出并写入寄存器中,读取ADD+1对齐地址处的第二数据,将所述第二数据与所述第一数据在所述寄存器中进行组合得到组合数据,通过PC指针反汇出导致处理器异常的指令,将所述指令基于所述组合数据重新执行。
回调函数在系统中有很多,比如,异常类型为除0异常,则调用回调函数archDivideZeroExceptHandle,未对齐访问异常时,调用archUnalignedExceptHandle函数等等。
本发明中,将异常的起始地址到下一个对齐地址ADD处的有效数据读出,存入相关寄存器中,再将ADD+1的对齐地址处的有效数据读出后进行组合,通过让PC指针反汇出导致处理器异常的指令,重新执行此次非对齐访问的操作的指令即可得到正确的地址数据并使软件正确运行,这是本发明的重要发明点之一。
在一个实施例中,所述检测步骤S101的操作为:检测所述处理器上的运行状态,当检测到所述处理器发生非对齐异常时,记录所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用,设置异常标识,并将所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用与所述异常标识相关联。
在本发明中,每一个异常对应一个异常入口号,当硬件产生异常时记录对应的异常号,并将所述异常号写入异常标识中,通过所述异常标识即可跳转到相对应的回调函数中,所有的异常回调函数会输入当前向量号以及任务上下文,并通过堆栈回溯将任务调用链关系保存,所述当前向量号至少包括所述非对齐异常发生的初始地址,所述任务上下文至少包括导致该异常的进程以及所述进程所隶属的应用,这样就可以快速的恢复处理器的异常,这是本发明的一个重要发明点。
本发明中,不仅确定出处理器异常,还确定产生该异常的进程及相应的应用程序(可简称应用、APP等),使得在多应用运行时,确定产生该异常的应用,且在修复过程中,在修复时仅需要将产生的异常的指令重新执行即可,修复速度快,从而软件不必停止运行,提高了多应用同时运行的性能,这是本发明的一个重要发明点。
本发明还提出了一种处理器的异常修复装置,本发明的装置包括以下单元。
检测单元201,对处理器的运行状态进行检测,如果检测到异常则设置异常标识;所述异常为非对齐访问异常,所述处理器为c-sky架构的处理器。
修复单元202:当操作系统SylixOS的ARCH层检测到所述异常标识时,所述ARCH层触发回调函数,在所述回调函数中对所述异常进行恢复。
本发明的方法可以快速修复非对齐访问异常,通过抽象出的操作系统ARCH层对异常进行修复,使上层应用软件感知不到此类异常,继续正确执行相关程序代码,解决了上层应用出现错误时继续执行导致错误执行结果的问题,提高了用户体验,这是本发明的重要发明点之一。
在一个实施例中,在所述回调函数中对所述异常进行恢复的操作包括:基于所述异常标识获取所述异常的初始地址,将所述初始地址到下一个对齐地址ADD之间的第一数据读出并写入寄存器中,读取ADD+1对齐地址处的第二数据,将所述第二数据与所述第一数据在所述寄存器中进行组合得到组合数据,通过PC指针反汇出导致处理器异常的指令,将所述指令基于所述组合数据重新执行。
回调函数在系统中有很多,比如,异常类型为除0异常,则调用回调函数archDivideZeroExceptHandle,未对齐访问异常时,调用archUnalignedExceptHandle函数等等。
本发明中,将异常的起始地址到下一个对齐地址ADD处的有效数据读出,存入相关寄存器中,再将ADD+1的对齐地址处的有效数据读出后进行组合,通过让PC指针反汇出导致处理器异常的指令,重新执行此次非对齐访问的操作的指令即可得到正确的地址数据并使软件正确运行,这是本发明的重要发明点之一。
在一个实施例中,所述检测单元201的操作为:检测所述处理器上的运行状态,当检测到所述处理器发生非对齐异常时,记录所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用,设置异常标识,并将所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用与所述异常标识相关联。
在本发明中,每一个异常对应一个异常入口号,当硬件产生异常时记录对应的异常号,并将所述异常号写入异常标识中,通过所述异常标识即可跳转到相对应的回调函数中,所有的异常回调函数会输入当前向量号以及任务上下文,并通过堆栈回溯将任务调用链关系保存,所述当前向量号至少包括所述非对齐异常发生的初始地址,所述任务上下文至少包括导致该异常的进程以及所述进程所隶属的应用,这样就可以快速的恢复处理器的异常,这是本发明的一个重要发明点。
本发明中,不仅确定出处理器异常,还确定产生该异常的进程及相应的应用程序(可简称应用、APP等),使得在多应用运行时,确定产生该异常的应用,且在修复过程中,在修复时仅需要将产生的异常的指令重新执行即可,修复速度快,从而软件不必停止运行,提高了多应用同时运行的性能,这是本发明的一个重要发明点。
本发明还提出了一种计算机可读存储介质,所述存储介质上存储有计算机程序代码,当所述计算机程序代码被计算机执行时执行上述之任一的方法。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
最后所应说明的是:以上实施例仅以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
Claims (2)
1.一种处理器的异常修复方法,其特征在于:该方法包括:
检测步骤,对处理器的运行状态进行检测,如果检测到异常则设置异常标识;
修复步骤:当操作系统SylixOS的ARCH层检测到所述异常标识时,所述ARCH层触发回调函数,在所述回调函数中对所述异常进行恢复;
所述异常为非对齐访问异常;
所述处理器为c-sky架构的处理器;
在所述回调函数中对所述异常进行恢复的操作包括:基于所述异常标识获取所述异常的初始地址,将所述初始地址到下一个对齐地址ADD之间的第一数据读出并写入寄存器中,读取ADD+1对齐地址处的第二数据,将所述第二数据与所述第一数据在所述寄存器中进行组合得到组合数据,通过PC指针反汇出导致处理器异常的指令,将所述指令基于所述组合数据重新执行;
所述检测步骤的操作为:检测所述处理器上的运行状态,当检测到所述处理器发生非对齐异常时,记录所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用,设置异常标识,并将所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用与所述异常标识相关联。
2.一种处理器的异常修复装置,其特征在于:该装置包括:
检测单元,对处理器的运行状态进行检测,如果检测到异常则设置异常标识;
修复单元:当操作系统SylixOS的ARCH层检测到所述异常标识时,所述ARCH层触发回调函数,在所述回调函数中对所述异常进行恢复;
所述异常为非对齐访问异常;
所述处理器为c-sky架构的处理器;
在所述回调函数中对所述异常进行恢复的操作包括:基于所述异常标识获取所述异常的初始地址,将所述初始地址到下一个对齐地址ADD之间的第一数据读出并写入寄存器中,读取ADD+1对齐地址处的第二数据,将所述第二数据与所述第一数据在所述寄存器中进行组合得到组合数据,通过PC指针反汇出导致处理器异常的指令,将所述指令基于所述组合数据重新执行;
所述检测单元的操作为:检测所述处理器上的运行状态,当检测到所述处理器发生非对齐异常时,记录所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用,设置异常标识,并将所述非对齐异常发生的初始地址、导致该异常的进程以及所述进程所隶属的应用与所述异常标识相关联。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011615563.3A CN112732481B (zh) | 2020-12-31 | 2020-12-31 | 一种处理器的异常修复方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011615563.3A CN112732481B (zh) | 2020-12-31 | 2020-12-31 | 一种处理器的异常修复方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112732481A CN112732481A (zh) | 2021-04-30 |
CN112732481B true CN112732481B (zh) | 2023-10-10 |
Family
ID=75611856
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011615563.3A Active CN112732481B (zh) | 2020-12-31 | 2020-12-31 | 一种处理器的异常修复方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112732481B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101299192A (zh) * | 2008-06-18 | 2008-11-05 | 中国科学院计算技术研究所 | 一种非对齐访存的处理方法 |
CN101539883A (zh) * | 2009-05-05 | 2009-09-23 | 北京和利时系统工程有限公司 | 嵌入式系统的错误追踪方法和装置 |
US8458404B1 (en) * | 2008-08-14 | 2013-06-04 | Marvell International Ltd. | Programmable cache access protocol to optimize power consumption and performance |
CN107908495A (zh) * | 2017-11-15 | 2018-04-13 | 南京南瑞继保电气有限公司 | 一种嵌入式系统异常记录展示方法 |
CN110308933A (zh) * | 2019-04-25 | 2019-10-08 | 龙芯中科(合肥)技术有限公司 | 访问指令确定方法、装置及存储介质 |
CN110489258A (zh) * | 2019-07-26 | 2019-11-22 | 苏州浪潮智能科技有限公司 | 一种基于xtensa处理器的栈回溯方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7076631B2 (en) * | 2003-04-14 | 2006-07-11 | Adtran, Inc. | Mechanism for on-the-fly handling of unaligned memory accesses |
US20100153776A1 (en) * | 2008-12-12 | 2010-06-17 | Sun Microsystems, Inc. | Using safepoints to provide precise exception semantics for a virtual machine |
-
2020
- 2020-12-31 CN CN202011615563.3A patent/CN112732481B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101299192A (zh) * | 2008-06-18 | 2008-11-05 | 中国科学院计算技术研究所 | 一种非对齐访存的处理方法 |
US8458404B1 (en) * | 2008-08-14 | 2013-06-04 | Marvell International Ltd. | Programmable cache access protocol to optimize power consumption and performance |
CN101539883A (zh) * | 2009-05-05 | 2009-09-23 | 北京和利时系统工程有限公司 | 嵌入式系统的错误追踪方法和装置 |
CN107908495A (zh) * | 2017-11-15 | 2018-04-13 | 南京南瑞继保电气有限公司 | 一种嵌入式系统异常记录展示方法 |
CN110308933A (zh) * | 2019-04-25 | 2019-10-08 | 龙芯中科(合肥)技术有限公司 | 访问指令确定方法、装置及存储介质 |
CN110489258A (zh) * | 2019-07-26 | 2019-11-22 | 苏州浪潮智能科技有限公司 | 一种基于xtensa处理器的栈回溯方法及装置 |
Non-Patent Citations (1)
Title |
---|
祝晓林 等.基于 SPARC 的地址非对齐异常处理研究.《计算机技术与发展》.2015,第第25卷卷(第第4期期),18-21. * |
Also Published As
Publication number | Publication date |
---|---|
CN112732481A (zh) | 2021-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4703718B2 (ja) | 選択的サブルーチンリターン構造 | |
WO2019236321A1 (en) | Tracking and recovering transactions performed across multiple applications | |
WO2021135272A1 (zh) | 一种内存异常的处理方法、系统、电子设备及存储介质 | |
CN1993679B (zh) | 执行计算机程序的方法、操作系统和计算设备 | |
EP4012554B1 (en) | Chip patching method and chip | |
US6553512B1 (en) | Method and apparatus for resolving CPU deadlocks | |
JP5315748B2 (ja) | マイクロプロセッサおよびシグネチャ生成方法ならびに多重化システムおよび多重化実行検証方法 | |
CN112732481B (zh) | 一种处理器的异常修复方法及装置 | |
US20030046524A1 (en) | Method for dynamically designating initialization modules as recovery code | |
US7613950B2 (en) | Detecting floating point hardware failures | |
CN112416725A (zh) | 一种压力测试方法及装置 | |
EP4089538A1 (en) | System and method for improved control flow monitoring of processors | |
CN111625328A (zh) | 适用于risc-v架构的中断装置、系统及方法 | |
US7644314B2 (en) | Retroactive verbose logging | |
CN111427328A (zh) | 一种降低家居系统故障的方法 | |
US20050005087A1 (en) | System and method for memory management | |
CN101238445A (zh) | 用于配置半导体电路的装置和方法 | |
US5752004A (en) | Method and system for modifying an internal data processing system identification | |
CN103713881A (zh) | 推测性特权提升 | |
CN111404715B (zh) | 一种网络服务实例化方法、装置、电子设备及存储介质 | |
JP2793386B2 (ja) | 電子計算機の演算エラー情報保持装置 | |
WO2016147334A1 (ja) | プロセッサの診断装置及び診断方法 | |
KR20080044652A (ko) | Cpu에서의 스택을 이용한 디버깅 방법 | |
CN117312137A (zh) | 一种面向中断驱动程序的原子性违反缺陷检测方法及装置 | |
JP2793396B2 (ja) | 電子計算機の演算ステータス保持装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |