CN118170439A - 异常处理方法及装置 - Google Patents
异常处理方法及装置 Download PDFInfo
- Publication number
- CN118170439A CN118170439A CN202211582330.7A CN202211582330A CN118170439A CN 118170439 A CN118170439 A CN 118170439A CN 202211582330 A CN202211582330 A CN 202211582330A CN 118170439 A CN118170439 A CN 118170439A
- Authority
- CN
- China
- Prior art keywords
- instruction
- block
- instructions
- jump
- block instruction
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 75
- 230000002159 abnormal effect Effects 0.000 claims abstract description 72
- 230000006870 function Effects 0.000 claims abstract description 17
- 230000005856 abnormality Effects 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 9
- 238000012545 processing Methods 0.000 abstract description 33
- 238000010586 diagram Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 7
- 230000008439 repair process Effects 0.000 description 7
- 230000007246 mechanism Effects 0.000 description 6
- 230000009286 beneficial effect Effects 0.000 description 4
- 230000009191 jumping Effects 0.000 description 4
- 230000008520 organization Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- 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
-
- 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/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/0715—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
-
- 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/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/0721—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
-
- 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/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/073—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
-
- 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/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0793—Remedial or corrective actions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Advance Control (AREA)
Abstract
本申请实施例提供了一种异常处理方法及装置,涉及计算机技术领域,该异常处理方法,包括:运行计算任务对应的多个块指令以执行计算任务;其中,多个块指令中的每个块指令包含至少一条用于实现计算任务中子任务;多个块指令中的至少一个块指令还包含第二指令;第二指令用于指示块指令中的至少一条指令的功能为访问指定内存地址;若检测到运行异常、且当前运行的当前块指令包含第二指令,停止运行当前块指令;确定运行异常的当前块指令对应的第一跳转块指令,并运行第一跳转块指令,其中,第一跳转块指令为多个块指令中的一个、且在运行异常的当前块指令之后执行。本申请实施例无需创建和查找fixup记录表即可实现fixup处理,更加高效。
Description
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种异常处理方法及装置。
背景技术
操作系统的内核执行计算任务的过程中,采用异常修复fixup处理计算任务中关于指定内存地址的访问异常。fixup可以包括:内核访问计算任务中指令指示的指定内存地址,若触发相应的硬件例如处理器对该指定内存地址访问异常的检查结果,内核进行跳转操作:停止执行计算任务的代码中该指令的关联代码,并转去执行计算任务的代码中的指定代码,以兼顾计算任务的继续执行和访问的安全性,提高用户体验。
相关技术中,操作系统的内核通常建立fixup记录,用于存储上述关联代码在计算任务的代码中的位置,以及该关联代码对应的指定代码在计算任务的代码中的位置,进而通过查找fixup记录执行上述跳转操作。
但是,计算任务中关于指定内存地址的访问异常很可能多次发生,而内核查找fixup记录通常为遍历查询,导致异常处理效率低的问题。
发明内容
为了解决上述技术问题,本申请提供一种异常处理方法及装置。该异常处理方法中,通过块指令和块指令包含的第二指令实现fixup处理,无需额外建立和查找fixup记录,从而提高异常处理的效率。
第一方面,本申请实施例提供一种异常处理方法,该方法包括:运行计算任务对应的多个块指令以执行计算任务;其中,多个块指令分别用于实现计算任务中的不同子任务;多个块指令中的每个块指令包含至少一条用于实现子任务的第一指令;多个块指令中的至少一个块指令还包含第二指令;第二指令用于指示块指令中的至少一条指令的功能为访问指定内存地址;若检测到运行异常、且当前运行的当前块指令包含第二指令,停止运行当前块指令;确定运行异常的当前块指令对应的第一跳转块指令,并运行第一跳转块指令,其中,第一跳转块指令为多个块指令中的一个、且在运行异常的当前块指令之后执行。
示例性的,当前块指令即当前运行的块指令。指定内存地址通常可以包括设置有访问权限的内存地址、采用延时加载机制分配的内存地址、不对齐的内存地址、不确定是否可以访问的内存地址等,具体可以根据应用需求设置,本申请实施例对此不作限制。也即是说,可以通过fixup处理的指定内存地址对应的异常通常为一种预期的异常,旨在通过触发该缺页异常以及跳过对关联代码的执行,实现计算任务的代码更加简洁、执行更加高效的效果。
本申请实施例中,分别用于实现计算任务中不同子任务的多个块指令的至少一个块指令中,包含指示该块指令存在对指定内存地址访问的第二指令。这样,在通过运行多个块指令以执行该计算任务的过程中,若当前运行的块指令出现运行异常,且包含第二指令,表明可以直接停止执行该块指令,并跳转至该块指令对应的第一跳转块指令以实现fixup处理,无需额外建立和查找fixup记录,从而提高异常处理的效率。
根据第一方面,多个块指令中的每个块指令包括块头和块身;块头用于指示块指令的属性信息,块身包括块指令的中的第一指令;第二指令包含于块头或者块身内。
示例性的,块指令的属性信息例如可以是该块指令与多个块指令中其他块指令之间的关系等信息,块身提供块指令对应子任务的具体实现代码也就是第一指令。第二指令包含于块头内即属于块指令的属性信息。第二指令包含于块身内相当于块身的属性,不用于实现子任务,而是指示该块身内的第一指令中存在访问指定内存地址的指令,以便电子设备可以根据第二指令进行fixup处理。在一种示例中,块身中的第二指令可以位于块身代码的第一行以便于检视和管理等。
本申请实施例,第一跳转块指令包含于块头内可以不受块身内具体指令限制,并且,处理器例如CPU的计算资源中用于调度块头的一级硬件即可完成异常处理,无需额外与CPU的计算资源中用于调度块身的二级硬件进行交互,更加高效。第一跳转块指令包含于块身内则无需对块头进行额外设置,可以让不同块指令的块头更加统一,便于进行基于块头的批量处理。
根据第一方面,或者以上第一方面的任意一种实现方式,第二指令还用于指示第一跳转块指令的存储位置;确定运行异常的当前块指令对应的第一跳转块指令,包括:根据存储位置,获取第一跳转块指令。
示例性的,对于每个块指令,该块指令的块头与块身是对应的,基于此,该块指令的存储位置可以是该块指令头的存储位置(如块头占用的内存空间的首地址)。根据存储位置,获取第一跳转块指令,例如可以是读取该存储位置对应内存空间中的第一跳转块指令。
本申请实施例,通过第二指令指示的第一跳转块指令的存储位置确定第一跳转块指令,以在当前块指令运行异常的情况下跳转执行第一跳转块指令,提高用户体验。
根据第一方面,或者以上第一方面的任意一种实现方式,确定运行异常的当前块指令对应的第一跳转块指令,包括:从多个块指令中确定运行异常的当前块指令之后的第n个块指令,得到第一跳转块指令;其中,n为大于或者等于1的整数;多个块指令按照执行顺序排序。
本申请实施例,通过多个块指令的执行顺序确定第一跳转块指令,更加便捷。
根据第一方面,或者以上第一方面的任意一种实现方式,根据第一方面,或者以上第一方面的任意一种实现方式,若检测到运行异常、且当前运行的当前块指令包含第二指令之前,方法还包括:接收当前块指令中断言指令的运行结果;多个块指令中的至少一个块指令还包含断言指令;若运行结果为假,确定运行异常。
根据第一方面,或者以上第一方面的任意一种实现方式,根据第一方面,或者以上第一方面的任意一种实现方式,若检测到运行异常、且当前运行的当前块指令包含第二指令之后,方法还包括:获取运行异常的异常信息;通过运行异常的当前块指令中第三指令指示的预设寄存器存储异常信息;多个块指令中的至少一个块指令还包含第三指令。
本申请实施例,通过每个块头的块头属性或者相应的块身属性配置用于保存异常信息的寄存器,不涉及不同块头的上下文差异对异常信息的影响,也就无需保存块头执行的上下文,无需额外设置保存该上下文的寄存器,更加便捷高效。另外,本申请实施例可以直接根据运行异常的当前块指令中的块头属性或块身属性也就是第二指令,确定上述预先配置的寄存器,无需根据fixup记录确定用于返回异常信息的寄存器,也无需针对不同异常信息修改该寄存器中保存的数据,更加高效。
根据第一方面,或者以上第一方面的任意一种实现方式,根据第一方面,或者以上第一方面的任意一种实现方式,确定运行异常的当前块指令对应的第一跳转块指令,并运行第一跳转块指令之后,方法还包括:若检测到第一跳转块指令运行异常、且运行异常的第一跳转块指令包含第二指令,通过内核向系统寄存器发送控制指令;其中,系统寄存器用于进行与运行异常的第一跳转块指令对应的第二跳转块指令的确定;控制指令用于指示是否进行第二跳转块指令的确定;第二跳转块指令为多个块指令中的一个、且在运行异常的第一跳转块指令之后执行。
根据第一方面,或者以上第一方面的任意一种实现方式,根据第一方面,或者以上第一方面的任意一种实现方式,第二指令还用于指示多个块指令中的至少一个块指令具有原子性;其中,原子性包括第二指令对应的块指令包含的每个指令均完成运行。
示例性的,其中,块指令的原子性是指该块指令中每个指令指示的动作均发生,该块指令中各指令对内存地址的访问结果统一输出,不被除该块指令以外的块指令修改。
本申请实施例提供的异常处理方式,通过停止执行运行异常的当前块指令以及跳转执行与停止执行的当前块指令不同的第一跳转块指令实现,不会修改块指令对内存地址读取或者更新的结果,因此,可以适用于具有原子性的块指令,拓展了异常处理方法的应用场景。
第二方面,本申请实施例提供一种异常处理装置,该装置包括:运行模块,用于运行多个块指令以执行计算任务;其中,多个块指令分别用于实现计算任务中的不同子任务;多个块指令中的每个块指令包含至少一条用于实现子任务的第一指令;多个块指令中的至少一个块指令还包含第二指令;第二指令用于指示块指令中的至少一条指令的功能为访问指定内存地址;异常处理模块,用于若检测到运行异常、且当前运行的当前块指令包含第二指令,停止运行当前块指令;确定运行异常的当前块指令对应的第一跳转块指令,并运行第一跳转块指令,其中,第一跳转块指令为多个块指令中的一个、且在运行异常的当前块指令之后执行。
根据第二方面,多个块指令中的每个块指令包括块头和块身;块头用于指示块指令的属性信息,块身包括块指令的中的第一指令;第二指令包含于块头或者块身内。
根据第二方面,或者以上第二方面的任意一种实现方式,第二指令还用于指示第一跳转块指令的存储位置;异常处理模块,具体用于:根据存储位置,获取第一跳转块指令。
根据第二方面,或者以上第二方面的任意一种实现方式,异常处理模块,具体用于:从多个块指令中确定运行异常的当前块指令之后的第n个块指令,得到第一跳转块指令;其中,n为大于或者等于1的整数;多个块指令按照执行顺序排序。
根据第二方面,或者以上第二方面的任意一种实现方式,异常处理模块,具体用于:在若检测到运行异常、且当前运行的当前块指令包含第二指令之前,接收当前块指令中断言指令的运行结果;多个块指令中的至少一个块指令还包含断言指令;若运行结果为假,确定运行异常。
根据第二方面,或者以上第二方面的任意一种实现方式,异常处理模块,具体用于:在若检测到运行异常、且当前运行的当前块指令包含第二指令之后,获取运行异常的异常信息;通过运行异常的当前块指令中第三指令指示的预设寄存器存储异常信息;多个块指令中的至少一个块指令还包含第三指令。
根据第二方面,或者以上第二方面的任意一种实现方式,异常处理模块,还用于:确定当前块指令对应的第一跳转块指令,并运行第一跳转块指令之后,若检测到第一跳转块指令运行异常、且第一跳转块指令包含第二指令,通过内核向系统寄存器发送控制指令;其中,系统寄存器用于进行与运行异常的第一跳转块指令对应的第二跳转块指令的确定;控制指令用于指示是否进行第二跳转块指令的确定;第二跳转块指令为多个块指令中的一个、且在运行异常的第一跳转块指令之后执行。
根据第二方面,或者以上第二方面的任意一种实现方式,第二指令还用于指示多个块指令中的至少一个块指令具有原子性;其中,原子性包括第二指令对应的块指令包含的每个指令均完成运行。
第二方面以及第二方面的任意一种实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第二方面以及第二方面的任意一种实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第三方面,本申请实施例提供了一种电子设备,包括:处理器和收发器;存储器,用于存储一个或多个程序;当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如第一方面以及第一方面的任意一种实现方式中任一项的方法。
第四方面,本申请实施例提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
第五方面,本申请实施例提供了一种计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能的实现方式中的方法的指令。
第六方面,本申请实施例提供了一种芯片,该芯片包括处理电路、收发管脚。其中,该收发管脚、和该处理电路通过内部连接通路互相通信,该处理电路执行第一方面或第一方面的任一种可能的实现方式中的方法,以控制接收管脚接收信号,以控制发送管脚发送信号。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是示例性示出的一种超标量CPU中执行队列的示例图;
图2是示例性示出的传统CPU和块CPU的架构对比图;
图3是示例性示出的基于块指令的代码结构示意图;
图4是示例性示出的fixup代码的组织形式;
图5是本申请实施例提供的一种电子设备500的结构框图;
图6是本申请实施例提供的一种异常处理方法的流程示意图;
图7是本申请实施例提供的基于块指令的fixup代码的组织示例图;
图8是本申请实施例提供的一种异常处理装置的结构框图。
具体实施方式
为了便于理解本实施例,首先对本实施例所涉及的一些技术名词和相关技术进行介绍:
超标量CPU(central processing unit):同一时刻运行多条指令以提高运行效率和对CPU中计算资源的利用率的CPU。例如,CPU将计算任务以多条指令的形式分解到不同的线程上执行,每个线程独立使用CPU中不同的计算资源,从而提高对CPU中计算资源的利用率。对于其中每个线程,可以在该线程完成执行前预测下一个执行的线程。也就是在当前的指令未执行完成的情况下,就开始调度后执行指令并投入执行。这样,如果预测正确,后执行指令的执行结果可以直接使用,从而提高指令的运行效率。而如果预测错误,就只能放弃所预测的后执行指令的执行结果,从该预测错误的指令处重新确定正确的待执行的指令。
通常超标量CPU创建一个执行队列,用于管理未执行完成的指令。图1是示例性示出的一种超标量CPU中执行队列的示例图。如图1所示,该执行队列包括:已完成执行(废弃)的指令记录101,用于指示完成执行的指令;执行中的指令记录102,用于指示当前执行的指令;以及确定无效的指令记录103,用于指示预测错误的指令。其中,确定无效的指令记录103所指示的指令,是相对于执行中的指令记录102所指示指令的后执行指令。超标量CPU确定指令记录无效(如图1中的指令记录103)后,将之后的指令记录(如图1中的指令记录104)也全部删除,从无效的地方(如图1中的指令记录103)处重新填充有效的指令记录。
但是,从代码逻辑的角度,指令的调度中可以进行更长跨度的指令执行预测以减少对指令记录的删除和重新填充有效的指令记录,提高效率。举例而言,如下表1所示:
假设在指令“If check_condition()”未完成执行的情况下,预测后执行指令依次为指令“Do_conditional_business”、指令“Do_general_business”。此时,如果指令“Ifcheck_condition()”完成执行,且检测到无需执行指令“Do_conditional_business”,那么可以放弃指令“Do_conditional_business”的执行结果,无需放弃指令“Do_general_business”的执行结果。也就是说,从代码逻辑的角度,无需如图1所示的超标量CPU那样删除无效指令后的指令以及重新填充有效的指令记录,而是可以执行指令“Do_general_business”。基于此,可以采用块指令实现计算任务的代码,以保证更长跨度的指令执行预测例如保证可以执行指令“Do_general_business”。
块指令:将计算任务的代码划分为不同的代码块得到的指令,一个块指令对应一个代码块。每个块指令用于实现计算任务中的一个子任务。示例性的,CPU可以通过块指令将对计算任务的代码调度分为两层,第一层是块描述也称为块头,用于指示该块头对应的块指令与其他块指令间的依赖关系,第二层是块身,用于实现块指令的执行,包含块指令中用于实现相应子任务的代码块,该代码块中包含至少一条指令。基于此,计算任务2的代码可以如下表2所示:
表2中的Block1(attr=…)至Block3(attr=…)等即块头,用于定义块头对应的块指令使用的寄存器以及是否进行跳转,没有更多的子任务执行细节。对块头的调度称为块头调度,而块头对应的块指令执行也就是块身,包含一组具体的指令。
取指(Instruction Fetch,IF):即取指令,一般是指CPU从主存(CPU的内存)中读取一条指令并存储至指令寄存器的过程。程序计数器(Program Counter,PC)中的数值用于指示当前的指令执行周期中待执行的指令在主存中的存储地址。在取指操作结束时,PC指向将在下一个周期读取的指令。
译码(Instruction Decode,ID):指令译码器将存储在指令寄存器中的指令进行拆分和解释,识别不同的指令类别以及获取操作数的各方法,以得到传输给执行单元的一系列控制信号。
图2是示例性示出的传统CPU和块CPU的架构对比图。如图2所示,传统CPU即对未采用块指令实现计算任务的代码进行调度的CPU。传统CPU基于图1所示的执行队列进行计算任务的代码调度。相应地,该传统CPU的取指译码逻辑即用于实现取指和译码的硬件逻辑电路或可运行软件的处理电路,根据执行队列中的指令记录对指令序列进行取指和译码,进而传统CPU的计算单元执行该执行队列中指令记录所指示的指令。这样,即完成指令的一个执行周期:取指-译码-执行。
仍参见图2,块CPU即对采用块指令实现计算任务的代码进行调度的CPU。与传统CPU的区别在于,块CPU中的执行队列为块头执行队列,块头执行队列中的每个指令记录指示块指令也就是至少一条指令。相应地,该块CPU的取指译码逻辑根据块头执行队列中的指令记录对块头序列进行取指和译码,进而块CPU的块引擎执行块头执行队列中指令记录所指示的块指令。这样,即完成块指令也就是至少一条指令的一个执行周期:取指-译码-执行。可以理解的是,块头序列中的一个块头用于指示一条块指令。其中,每个块指令对应的块引擎执行该块指令中的块身,不和其他块指令发生关系,实现更简单,也更容易通过块引擎的数量和种类的增加,提高CPU的处理能力且不会大幅增加CPU的复杂程度。另外,块CPU相同大小的指令队列的调度程序的效率就可以提高了。
为了便于理解,下面结合表3对传统CPU处理的计算任务的代码和块CPU处理的计算任务的代码进行对比示例。
如下表3所示,计算任务3为对数组中每个元素乘以10,与传统的精简指令集计算机(Reduced Instruction Set Computer,RISC,一种指令长度较短的计算机)指令相比,块指令相当于划分该代码得到的指令组(如第一个块指令为块头“Block input(r1,r2),br.cond=1f”至第一个“Block.end”,用于实现计算任务3中关于乘法计算的子任务),每个指令组包含至少一条指令(如第二个块指令“Block br=end”用于实现计算任务3中返回计算结果的子任务)。
图3是示例性示出的基于块指令的代码结构示意图。如图3所示,块头header1至块头header3等,分别对应块身minsn1至块身minsnX中的至少一个。也即是说,不同块头对应的块身可以重叠,以实现代码重用,缩小代码体量。例如,块头header1对应块身minsn1到块身minsn10,块头header3对应块身minsn1到块身minsn3。另外,块内的指令也就是块身所包括的指令的具体代码结构可以根据应用需求设置,本申请实施例对此不作限制。例如,在上述表3的示例中块指令的块身内指令的形式为式:为每条指令配备一个输出寄存器,其他指令偏移使用这些寄存器(如T#1表示前一条指令的输出)。
内核:是基于硬件的第一层软件扩充,为众多应用程序提供对计算机硬件的安全访问的一部分软件,负责管理操作系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
延时加载机制:操作系统为用户的访问请求分配内存时仅分配虚拟地址空间,不分配实际的物理地址空间,而是通过访问虚拟地址空间时触发的缺页异常(page fault)来分配物理地址空间,以降低内存压力。
内存地址不对齐:内存地址中的起始地址address对数据类型的长度进行求模运算,如果结果为0,则本次访问的内存地址是对齐的,反之则为不对齐。
异常修复fixup:
操作系统的内核执行应用程序对应的计算任务的过程中,该计算任务的代码中某一指令指示访问指定内存地址,内核可以直接访问该指定内存地址以触发硬件例如处理器检查该计算任务是否可以访问该指定内存地址,若无法访问,则硬件向内核反馈对该指定内存地址对应的内存访问异常的检查结果,相当于触发了缺页异常。这样,内核可以进行跳转操作:停止执行计算任务的代码中该指令的关联代码,并转去执行计算任务的代码中的指定代码,以兼顾计算任务的继续执行和访问的安全性,提高用户体验。其中,指定内存地址通常可以包括设置有访问权限的内存地址、采用延时加载机制分配的内存地址、不对齐的内存地址、不确定是否可以访问的内存地址等,具体可以根据应用需求设置,本申请实施例对此不作限制。也即是说,可以通过fixup处理的指定内存地址对应的异常通常为一种预期的异常,旨在通过触发该缺页异常以及跳过对上述关联代码的执行,实现计算任务的代码更加简洁、执行更加高效的效果。
示例性的,如下表4所示,计算任务4的代码中指令“Ld r3,[r2,40]”指示访问的内存地址r2+40为不确定是否可以访问的地址也就是指定内存地址。对此,内核可以记录该地址,并执行该指令也就是访问内存地址r2+40。如果内核检测到发生异常,且是该地址引发的,例如硬件反馈对内存地址r2+40的访问异常,则内核跳过剩余的执行流程也就是该指令的关联代码的执行。这样,即实现了将异常检查的行为交给硬件处理(硬件本来就要检查访问的地址是否有效),而内核无需因异常停止代码执行的效果,可以提高用户体验。可见,fixup适用于超标量CPU对指令的执行逻辑:若预测的指令无法执行,可以停止对该指令的执行,继续执行可以执行的指令。
上述示例中的异常处理过程可以通过表4中所示的宏“Fixup”实现。举例而言,图4是示例性示出的fixup代码的组织形式。如图4和表4所示,需要fixup指令即需要进行fixup处理的指令(如表4中的“Ld r3,[r2,40]”),fixup修复指令即fixup处理中跳转执行的指令位置(如表4中数据越界处理子分支对应的指令“1:”的位置“1f”),该指令的位置例如可以是指令在代码的行数等,具体可以根据应用需求设置,本申请实施对此不作限制。对此,计算任务4的代码中可以增加针对指令“Ld r3,[r2,40]”的宏“Fixup”,得到指令“Fixup Ldr3,[r2,40],1f”以实现基于fixup的异常处理。具体的,内核根据宏“Fixup”,指示编译器在编译计算任务的代码时建立一个数据项例如图4中fixup表中的表项,该数据项用于记录需要进行fixup处理的内存地址(如内存地址r2+40),以及记录fixup处理中跳转执行的指令的位置(如表4中的“1f”)。这样,内核执行表4中计算任务的代码时,如果指令“Fixup Ldr3,[r2,40],1f”触发了内存访问异常,可以查找fixup表,根据查找结果处理该异常:跳转执行表4中“数据越界处理子分支”对应的指令,跳过指令“Fixup Ld r3,[r2,40],1f”的关联代码也就是指令“Fixup Ld r3,[r2,40],1f”至指令“br end”的代码。在一种示例中,上述关联代码通常与需要进行异常处理的指令实现共同的功能,例如表4中关联代码与指令“Fixup Ld r3,[r2,40],1f”均用于对数组乘员进行乘法计算。
但是,上述异常处理中,需要在fixup表中为每个需要进行fixup处理的指令增加一个表项,并且,需要查找fixup表(如图4所示为从第一个表项开始查找的遍历查询)。而计算任务的代码往往体量较大,导致fixup表中的表项较多,这样,无论是增加表项还是查找fixup表均需耗费较多时间,存在异常处理效率低的问题。
在另一种示例中,可以预先在CPU中增加一个寄存器REG_BA,用于保存指定代码的存储位置。如果发生访问越界,就跳转到REG_BA指定的寄存器中。这样,通过增设硬件直接指定异常处理中可以跳转执行的指定代码的位置,降低了查找fixup表的成本。
但是,计算任务对应的代码中不同的上下文需要设置不同的寄存器REG_BA,导致寄存器REG_BA需要不断被修改,而且对于线程等上下文的切换均需保存上下文切换信息,这也需要额外的成本。
针对上述问题,本申请实施例提供一种异常处理方法。该异常处理方法应用于电子设备,该方法中,计算任务的代码包括用于实现该计算任务中不同子任务的多个块指令,且多个块指令的至少之一中预先设置有指示该块指令访问指定内存地址的第二指令。这样,在执行该块指令的过程中若出现对指定内存地址的访问异常,可以根据该第二指令直接停止执行该块指令,并跳转至该块指令对应的第一跳转块指令即可实现fixup也就是停止执行关联代码以及跳转操作,无需通过额外建立和查找fixup记录才能实现fixup,从而提高异常处理的效率。另外,本方案无需增设专门的硬件寄存器,也无需针对不同的程序上下文修改寄存器以实现fixup的跳转操作,更加便捷。
在对本申请实施例的技术方案说明之前,首先结合附图对本申请实施例的电子设备进行说明。本申请实施例可以应用于计算机、移动终端、可穿戴式设备、互联网电视、服务器等电子设备。举例而言,图5是本申请实施例提供的一种电子设备500的结构框图。如图5所示,电子设备500可包括:处理器501、通信线路505、内存503、存储介质504以及至少一个通信接口502中的部分或全部部件。
其中,处理器501用于执行本申请后续实施例所提供的异常处理方法。
具体的,处理器501可以包含通用中央处理器(central processing unit,CPU),处理器501还可以包含微处理器、现场可编程逻辑门阵列(Field Programmable GateArray,FPGA)、数字信号处理器(digital signal processing,DSP)或者特定应用集成电路(application-specific integrated circuit,ASIC)、或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
通信线路505用于将电子设备500中各部件连接。具体的,通信线路505可以包括数据总线、电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为通信线路505。
内存503可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。内存503可以是独立存在,通过通信线路507505与处理器501相连接。内存503也可以和处理器501集成在一起。其中,内存503存储有计算机指令。处理器501可以通过执行内存503中存储的计算机指令,实现本申请后续实施例所提供的异常处理方法。可选的,本实施例中的计算机执行指令也可以称之为应用程序代码,本实施例对此不作具体限定。
存储介质504用于存储计算机指令以及实现本申请实施例技术方案的各种数据,以便电子设备500在执行本申请后续实施例提供的异常处理方法时,将存储介质504中存储的计算机指令和各种数据加载至内存503中,以使得处理器501可以通过执行内存503中存储的计算机指令,实现本申请实施例所提供的异常处理方法。
通信接口502使用任何收发器一类的电子设备,用于与其他设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(wireless local areanetworks,WLAN)等。
应该理解的是,图5所示的电子设备500仅是电子设备的一个范例,并且电子设备500可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图5中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
下面结合图6至图7对本申请实施例提供的异常处理方法进行示例性说明。
图6是本申请实施例提供的一种异常处理方法的流程示意图。如图6所示,本申请实施例提供的异常处理方法,应用于电子设备,可以包括但不限于如下步骤:
S601,运行计算任务的代码以执行该计算任务,其中,计算任务的代码包括多个块指令,多个块指令分别用于实现该计算任务包含的多个子任务;多个块指令的至少之一中预先设置有第二指令,第二指令用于指示相应的块指令包含用于访问指定内存地址的代码。
电子设备的内核可以在检测到计算任务的执行指令的情况下,运行计算任务的代码以执行该计算任务。该运行过程可以参见上述图2中块CPU调度代码以执行计算任务的过程的已有描述,此处不再赘述。块指令可以参见上述表2、图2、表3以及图3中的已有描述,此处不再赘述。指定内存地址通常可以包括设置有访问权限的内存地址、采用延时加载机制分配的内存地址、不对齐的内存地址、不确定是否可以访问的内存地址等,具体可以根据应用需求设置,本申请实施例对此不作限制。也即是说,可以通过fixup处理的指定内存地址对应的异常通常为一种预期的异常,旨在通过触发该缺页异常以及跳过对上述关联代码的执行,实现计算任务的代码更加简洁、执行更加高效的效果。
基于此,至少一个块指令中包含用于访问指定内存地址的代码,那么电子设备可以对该至少一个块指令进行fixup处理。相应地,该至少一个块指令中可以预先设置第二指令,第二指令用于指示相应的块指令包含用于访问指定内存地址的代码。也就是说,第二指令可以保证电子设备在检测到该块指令出现对指定内存地址的访问异常的情况下进行fixup处理。该访问异常也可以称为特定异常,例如可以是设置有访问权限的内存地址对应的内存访问越界、采用延时加载机制分配的内存地址对应的缺页异常、不对齐的内存地址对应的不对齐异常、不确定是否可以访问的内存地址对应的内存访问越界等。
其中,第二指令可以包括块头中的块头属性、或者块身中的块指令属性等,具体可以根据应用需求设置,本申请实施例对此不作限制。
在一种示例中,对于基于块指令的计算任务3的代码也就是表3中块指令实现的计算任务3,如下表5所示,至少一个块指令例如块头“Block input(r1,r2),br.cond=1f”至第一个“Block.end”的块指令中,第二指令可以是块头中的块头属性:“attr=fixup,br=ret fixup_type=fallthrough”。“attr=fixup”用于指示该块指令中包含访问指定内存地址的指令,“br=ret fixup_type=fallthrough”用于指示该块指令出现内存访问异常时可以继续执行的第一跳转块指令(为了合理布局,对第一跳转块指令在后续S603中进行说明)。
本申请实施例,通过块头属性指示需要进行fixup处理的块指令,不受块指令中具体指令内容的限制,可以拓宽异常处理方法的适用场景,提高便捷性。另外,通过在块头中增加块头属性也就是关于fixup的属性,可以保证CPU的硬件资源中用于执行块头代码的硬件也就是一级硬件,在执行块头代码的过程中可以在块指令出现异常的情况下,根据该块头属性跳转至第一跳转块指令,无需与二级硬件额外交互以进行跳转。其中,二级硬件为CPU的硬件资源中用于执行块身代码的硬件。
在一种示例中,至少一个块指令例如块头“Block input(r1,r2),br.cond=1f”至第一个“Block.end”的块指令中,第二指令可以是块身中的块指令属性:“Set_fixup_reg”。例如,通过块身中的指令“set_fixup_type”和“set_fix_address”分别指示该块身对应的块指令发生异常时可以执行fixup,以及可以跳转执行的第一跳转块指令的位置。在一种可选的实施方式中,块指令属性可以位于块身的第一行以便于与块身中实现子任务的代码区分。
本申请实施例,第二指令可以为块身中的块指令属性,也就是块身中指令的形式,无需对块头进行额外的属性设置,可以提高块头形式的统一性,有利于对块头的批量化处理。
S602,若检测到运行异常、且当前运行的当前块指令包含第二指令,停止运行当前块指令。
电子设备在运行计算任务的代码以执行该计算任务的过程中,若检测到运行异常、且当前运行的当前块指令包含第二指令,停止运行当前块指令。可以理解的是,当前块指令即计算任务的代码也就是多个块指令中当前运行的块指令。
计算任务的每个块指令分别用于实现该计算任务包含的多个子任务,每个块指令包含至少一条指令(如表3实施例中的已有描述)。也就是说,每个块指令包含的至少一条指令实现同一子任务,相互关联,每个块指令包含的至少一条指令中,若存在需要进行fixup处理的异常指令,那么,该异常指令的关联代码也就是关联指令即该块指令中除异常指令以外的指令。基于此,若检测到运行异常、且当前运行的当前块指令包含第二指令也就是当前块指令存在需要进行fixup处理的异常指令,可以停止运行该当前块指令。
在一种示例中,电子设备检测到计算任务的代码运行异常可以包括:电子设备的内核接收到电子设备的处理器例如CPU反馈的内存访问异常等。
在一种示例中,电子设备检测到计算任务的代码运行异常可以包括:电子设备的内核接收到块身中的指令执行条件未满足。举例而言,如上述表5所示,块头“Block input(r1,r2),br.cond=1f”至第一个“Block.end”的块指令中,指令执行条件可以是块身中的指令执行条件:“assert.lti T#1,MAX”。本示例中该执行条件为断言指令如“assert.”的形式,即该执行条件在计算任务的正常流程中必然成立:数组成员的下标必须小于MAX。如果不成立也就是数组成员的下标大于或者等于MAX,意味着无法计算数组成员位置,也就无法读出数组成员,相当于内存地址访问异常,可以执行fixup。类似的,对于任一内容的执行条件例如断言,若该执行条件不满足,意味着该执行条件对应指令的执行结果无法读/写,也就相当于内存地址访问异常,可以执行fixup。
本申请实施例通过块身中的指令执行条件例如断言,无需预先确定关于内存地址的信息(例如是否设置有访问权限,是否采用延迟加载机制等)即可应用fixup来处理异常,更加便捷。并且,上述执行条件例如断言指令,属于计算任务的代码中常规的指令,而非需要专门针对fixup这一场景额外学习的指令,对开发人员更加友好,也就更便捷。
在上述执行条件为断言指令的场景中,断言指令的执行结果如果为不成立则执行fixup。这样,电子设备无需执行实际操作(如数据计算、访问等),只需进行条件判断即可,更加高效。并且,通过断言指令可以减少大量代码分支,利于代码检视。
一种示例中,对于不具有跳转功能的块指令而言,可以减少额外划分用于跳转的块指令的分割。即使是具有跳转功能的块指令,断言指令的形式减少了指令执行中的跳转,可以保证代码维持在同一“流水线”内,提高预测指令的准确度,以及减少跳转导致的执行时延,从而利于提高CPU的运行性能。关于预测指令可以参见上述对超标量CPU的介绍中关于代码调度的已有描述,此处不再赘述。
S603,确定运行异常的当前块指令对应的第一跳转块指令,并执行第一跳转块指令,其中,第一跳转块指令包括多个块指令中在运行异常的当前块指令之后执行的块指令。
电子设备在停止运行当前块指令后,可以确定该当前块指令对应的第一跳转块指令,并执行第一跳转块指令。第一跳转块指令包括多个块指令中能够在该当前块指令之后执行的块指令,这样,即实现了fixup处理中的跳转操作。示例性的,图7是本申请实施例提供的基于块指令的fixup代码的组织示例图。如图7所示,块头header1中的块头实现标记fixup的效果,即块头header1对应块身中的断言指令触发fixup处理时,无需查找fixup表以确定断言指令的关联指令以及可以跳转的第二指令,而是由调度块头的一级硬件检测到异常则进入修复块,也就是跳转至修复块并执行修复块。其中,修复块即上述第一跳转块指令。关于一级硬件可以参见上述表5实施例的已有描述,此处不再赘述。
这样,本申请实施例直接在计算任务的代码的上下文中以代码结构和指令定义的形式指示进行fixup所需的数据,无需查找fixup记录表,也无需专门的指令处理异常,CPU直接跳转至计算任务中第一跳转块指令处执行即可。
在一种示例中,电子设备确定运行异常的当前块指令对应的第一跳转块指令,可以包括:电子设备确定运行异常的当前块指令之后的块指令,得到第一跳转块指令。当前块指令之后的块指令可以是当前块指令之后的第n个块指令,n≥1,具体可以根据应用需求设置,本申请实施例对此不作限制。举例而言,假设当前块指令为上述表5中块头“Blockinput(r1,r2),br.cond=1f”至第一个“Block.end”的块指令,那么第一跳转块指令为块头“Block br=ret”至最后一个“Block.end”的块指令)。
在一种示例中,电子设备确定运行异常的当前块指令对应的第一跳转块指令,可以包括:电子设备从运行异常的当前块指令包含的第二指令中确定块指令标识,根据块指令标识,获取第一跳转块指令。其中,块指令标识用于指示第一跳转块指令的存储位置。例如,块指令标识可以是上述表5中的“br=ret”,或者块身属性“set_fix_address”中的address。对于每个块指令,该块指令的块头与块身是对应的,基于此,该块指令的存储位置可以是该块指令头的存储位置(如块头占用的内存空间的首地址)。根据存储位置也就是上述块指令标识,获取所述第一跳转块指令,例如可以是读取该存储位置对应内存空间中的第一跳转块指令。
在一种可选的实施方式中,电子设备可以在检测到运行异常、且当前运行的当前块指令包含第二指令后,通过预先配置的寄存器保存关于该运行异常的异常信息以便于异常提示、分析、记录等处理。其中,关于该运行异常的异常信息可以包括发生异常的块指令的存储位置、异常类型(如缺页异常、断言异常等)等,具体可以根据应用需求设置,本申请实施例对此不作限制。
在一种示例中,预先配置的寄存器可以包括系统寄存器。其中,系统寄存器为用于实现内核提供的功能(如页表管理等,页表用于记录虚拟地址空间与物理地址空间的映射关系)的寄存器。不同块指令的块头通过不同线程执行,线程切换导致所执行的块头变更,线程执行的上下文也就是块头执行的上下文变更,异常信息可能变更。这样,还需要预先配置用于存储块头上下文的上下文寄存器以保证异常信息的准确。基于此,电子设备可以在检测到运行异常、且当前运行的当前块指令包含第二指令后,通过预先配置的上下文寄存器获取关于该运行异常的异常信息,并通过系统寄存器保存该异常信息。另外,电子设备使用该异常信息时,需要从系统寄存器中读取该异常信息至通用寄存器,通用寄存器用于实现除内核提供的功能以外的功能。
在一种示例中,预先配置的寄存器可以包括上述至少一个块指令的块头属性或者块身属性中指示的寄存器。如下表6所示:
块头属性相当于块头声明,例如,表6所示块头属性“output=(r1),attr=fixup,br_type=ret fixup_type=fallthrough”,或者表6所示块身属性“set_fixup_reg r1”中指示的寄存器“r1”。在一种示例中,第一跳转块指令中可以包含用于保存关于该运行异常的异常信息的指令,例如表6所示“input(r1)”。
本申请实施例,通过每个块头的块头属性或者相应的块身属性配置用于保存异常信息的寄存器,不涉及不同块头的上下文差异对异常信息的影响,也就无需保存块头执行的上下文,无需额外设置保存该上下文的寄存器,更加便捷高效。另外,本申请实施例可以直接根据运行异常的当前块指令中的块头属性或块身属性也就是第二指令,确定上述预先配置的寄存器,无需根据fixup记录确定用于返回异常信息的寄存器,也无需针对不同异常信息修改该寄存器中保存的数据,更加高效。
在一种可选的实施方式中,上述至少一个块指令中预先配置有系统寄存器,该系统寄存器用于实现电子设备的内核(Kernel)提供的功能(如页表管理),以及存储第一跳转块指令的信息。其中,系统寄存器为电子设备的内核才能访问的寄存器,也就是电子设备的内核操作权限高于块指令的调度硬件如上述一级硬件。这样,电子设备的内核检测到运行异常、且当前运行的当前块指令包含第二指令的情况下,可以向系统寄存器发送控制指令以指示系统寄存器向一级硬件反馈/不反馈第一跳转块指令的信息,从而接管fixup处理,也即是由内核决定是否进行fixup处理。这样,可以保证内核对异常是可控的,也就是内核可以决定是解决该异常还是进行fixup处理,从而保证计算任务更加可控,提高用户体验。其中,当前运行的当前块指令包含第二指令即表明该运行异常发生在需要进行fixup处理的块指令中。电子设备可以通过上述预先配置的寄存器(也可称为异常状态寄存器)中存储的异常信息,确定运行异常的当前块指令是否为需要进行fixup处理的块指令。
举例而言,上述运行异常可以是系统寄存器反馈的缺页异常,那么内核对异常可控具体可以是内核可以决定是针对缺页异常分配所访问的内存地址对应的物理地址空间,或者不进行该分配而是进行fixup处理。可以理解的是,内核对异常可控后具体如何处理该异常可以根据应用需求设置,本申请实施例对此不作限制。
在一种可选的实施方式中,上述至少一个块指令具有原子性,即该块指令对内存地址的访问相对于除该块指令以外的块指令是原子的。其中,块指令的原子性是指该块指令中每个指令指示的动作均发生,该块指令中各指令对内存地址的访问结果统一输出,也就是不被除该块指令以外的块指令修改。在一种示例中,本实施例访问的内存地址可以是CPU缓存(Cache)中的最小缓存单位Cache Line,该访问具体可以包括读取或者更新。本申请实施例提供的异常处理方式,通过停止执行当前块指令以及跳转执行与该当前块指令不同的第一跳转块指令实现,不会修改块指令对内存地址读取或者更新的结果,因此,可以适用于具有原子性的块指令,拓展了异常处理方法的应用场景。
示例性的,如下表7所示,对于计算任务3,假设要原子性保证数组成员不是0才乘以10,块头属性中可以包含指示原子性的指令(如指令“attr=(fixup,atomic)”)以告知电子设备的内核按照原子性的规则执行该块指令。这样,如果该块指令触发fixup处理,停止该块指令的执行并跳转执行相应的第一跳转块指令,从而保证整个块指令可以原子性地访问内存地址。另外,块指令的块身中可以通过指令指示上述保证数组成员不是0才乘以10的条件,例如表7中的断言指令“assert.neq T#1,0”。
在一种示例中,本申请实施例提供的异常处理方法可以通过基于底层语言(如操作系统的内核所采用的汇编语言,可以参见上述各表中的示例)的异常处理逻辑实现,该异常处理逻辑可以被封装在高层语言(例如C语言、C++语言等更加抽象的编程语言)中,从而兼顾本申请实施例提供的异常处理方法和高层语言功能。举例而言,如下表8所示:
其中,指令“Block_try”代表第一计算逻辑和第二计算逻辑为C++等语言中的try指令(意味执行操作)所实现的功能。异常处理逻辑以处理异常的指令“catch(block_exception ret)”封装在高层语言中,不会影响try指令实现的功能,还可以保证本申请实施例提供的异常处理方法的实现。相应地,该高层语言也就具有本申请实施例提供的异常处理方法的优势。
可以理解的是,本申请实施例中各具体的代码、指令均为示例,并不构成对本申请实施例提供的异常处理方法中指令和代码的具体形式的限制。
在一个示例中,图8是本申请实施例提供的一种异常处理装置的结构框图。如图8所示,异常处理装置800可以包括:代码运行模块801和异常处理模块802;
代码运行模块801,用于运行计算任务的代码以执行该计算任务,其中,计算任务的代码包括多个块指令,多个块指令分别用于实现该计算任务包含的多个子任务;多个块指令的至少之一中预先设置有第二指令,第二指令用于指示相应的块指令包含用于访问指定内存地址的代码;
异常处理模块802,用于在检测到运行异常、且当前运行的当前块指令包含第二指令,停止运行当前块指令;确定运行异常的当前块指令对应的第一跳转块指令,并执行第一跳转块指令,其中,第一跳转块指令包括多个块指令中能够在运行异常的当前块指令之后执行的块指令。
其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行上述相关方法步骤实现上述实施例中的异常处理方法。
本实施例还提供了一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的异常处理方法。
其中,本实施例提供的电子设备、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
本申请各个实施例的任意内容,以及同一实施例的任意内容,均可以自由组合。对上述内容的任意组合均在本申请的范围之内。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
Claims (20)
1.一种异常处理方法,其特征在于,所述方法包括:
运行多个块指令以执行计算任务;其中,所述多个块指令分别用于实现所述计算任务中的不同子任务;所述多个块指令中的每个块指令包含至少一条用于实现所述子任务的第一指令;所述多个块指令中的至少一个块指令还包含第二指令;所述第二指令用于指示所述块指令中的所述至少一条指令的功能为访问指定内存地址;
若检测到所述运行异常、且当前运行的当前块指令包含所述第二指令,停止运行所述当前块指令;
确定运行异常的当前块指令对应的第一跳转块指令,并运行所述第一跳转块指令,其中,所述第一跳转块指令为所述多个块指令中的一个、且在所述运行异常的当前块指令之后执行。
2.根据权利要求1所述的方法,其特征在于,所述多个块指令中的每个块指令包括块头和块身;所述块头用于指示所述块指令的属性信息,所述块身包括所述块指令的中的所述第一指令;
所述第二指令包含于所述块头或者所述块身内。
3.根据权利要求1或2所述的方法,其特征在于,所述第二指令还用于指示所述第一跳转块指令的存储位置;
所述确定所述运行异常的当前块指令对应的第一跳转块指令,包括:
根据所述存储位置,获取所述第一跳转块指令。
4.根据权利要求1或2所述的方法,其特征在于,所述确定所述运行异常的当前块指令对应的第一跳转块指令,包括:
从所述多个块指令中确定所述运行异常的当前块指令之后的第n个块指令,得到所述第一跳转块指令;其中,所述n为大于或者等于1的整数;所述多个块指令按照执行顺序排序。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述若检测到所述运行异常、且当前运行的当前块指令包含所述第二指令之前,所述方法还包括:
接收所述当前块指令中断言指令的运行结果;所述多个块指令中的至少一个块指令还包含所述断言指令;
若所述运行结果为假,确定所述运行异常。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述若检测到所述运行异常、且当前运行的当前块指令包含所述第二指令之后,所述方法还包括:
获取所述运行异常的异常信息;
通过运行异常的当前块指令中第三指令指示的预设寄存器存储所述异常信息;所述多个块指令中的至少一个块指令还包含所述第三指令。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述确定运行异常的当前块指令对应的第一跳转块指令,并运行所述第一跳转块指令之后,所述方法还包括:
若检测到所述第一跳转块指令运行异常、且所述第一跳转块指令包含所述第二指令,通过内核向系统寄存器发送控制指令;
其中,所述系统寄存器用于进行与运行异常的第一跳转块指令对应的第二跳转块指令的确定;所述控制指令用于指示是否进行第二跳转块指令的确定;所述第二跳转块指令为所述多个块指令中的一个、且在所述运行异常的第一跳转块指令之后执行。
8.根据权利要求1-7中任一项所述的方法,其特征在于,所述第二指令还用于指示所述多个块指令中的至少一个块指令具有原子性;其中,所述原子性包括所述第二指令对应的块指令包含的每个指令均完成运行。
9.一种异常处理装置,其特征在于,所述装置包括:
运行模块,用于运行多个块指令以执行计算任务;其中,所述多个块指令分别用于实现所述计算任务中的不同子任务;所述多个块指令中的每个块指令包含至少一条用于实现所述子任务的第一指令;所述多个块指令中的至少一个块指令还包含第二指令;所述第二指令用于指示所述块指令中的所述至少一条指令的功能为访问指定内存地址;
异常处理模块,用于若检测到所述运行异常、且当前运行的当前块指令包含所述第二指令,停止运行所述当前块指令;确定运行异常的当前块指令对应的第一跳转块指令,并运行所述第一跳转块指令,其中,所述第一跳转块指令为所述多个块指令中的一个、且在所述运行异常的当前块指令之后执行。
10.根据权利要求9所述的装置,其特征在于,所述多个块指令中的每个块指令包括块头和块身;所述块头用于指示所述块指令的属性信息,所述块身包括所述块指令的中的所述第一指令;
所述第二指令包含于所述块头或者所述块身内。
11.根据权利要求9或10所述的装置,其特征在于,所述第二指令还用于指示所述第一跳转块指令的存储位置;
所述异常处理模块,具体用于:
根据所述存储位置,获取所述第一跳转块指令。
12.根据权利要求9或10所述的装置,其特征在于,所述异常处理模块,具体用于:
从所述多个块指令中确定所述运行异常的当前块指令之后的第n个块指令,得到所述第一跳转块指令;其中,所述n为大于或者等于1的整数;所述多个块指令按照执行顺序排序。
13.根据权利要求9-12中任一项所述的装置,其特征在于,所述异常处理模块,具体用于:
在所述若检测到所述运行异常、且当前运行的当前块指令包含所述第二指令之前,接收所述当前块指令中断言指令的运行结果;所述多个块指令中的至少一个块指令还包含所述断言指令;
若所述运行结果为假,确定所述运行异常。
14.根据权利要求9-13中任一项所述的装置,其特征在于,所述异常处理模块,具体用于:
在所述若检测到所述运行异常、且当前运行的当前块指令包含所述第二指令之后,
获取所述运行异常的异常信息;
通过运行异常的当前块指令中第三指令指示的预设寄存器存储所述异常信息;所述多个块指令中的至少一个块指令还包含所述第三指令。
15.根据权利要求9-14中任一项所述的装置,其特征在于,所述异常处理模块,还用于:
所述确定运行异常的当前块指令对应的第一跳转块指令,并运行所述第一跳转块指令之后,
若检测到所述第一跳转块指令运行异常、且运行异常的第一跳转块指令包含所述第二指令,通过内核向系统寄存器发送控制指令;
其中,所述系统寄存器用于进行与所述运行异常的第一跳转块指令对应的第二跳转块指令的确定;所述控制指令用于指示是否进行第二跳转块指令的确定;所述第二跳转块指令为所述多个块指令中的一个、且在所述运行异常的第一跳转块指令之后执行。
16.根据权利要求9-15中任一项所述的装置,其特征在于,所述第二指令还用于指示所述多个块指令中的至少一个块指令具有原子性;其中,所述原子性包括所述第二指令对应的块指令包含的每个指令均完成运行。
17.一种电子设备,其特征在于,包括:
处理器和收发器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1至8中任一项所述的方法。
18.一种计算机可读存储介质,其特征在于,包括计算机程序,其特征在于,当所述计算机程序在电子设备上运行时,使得所述电子设备执行如权利要求1至8中任意一项所述的方法。
19.一种芯片,其特征在于,包括一个或多个接口电路和一个或多个处理器;所述接口电路用于从电子设备的存储器接收信号,并向所述处理器发送所述信号,所述信号包括存储器中存储的计算机指令;当所述处理器执行所述计算机指令时,使得所述电子设备执行权利要求1至8中任意一项所述的方法。
20.一种计算机程序产品,其特征在于,包括计算机程序,当所述计算机程序被电子设备执行时,使得所述电子设备执行权利要求1至8中任意一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211582330.7A CN118170439A (zh) | 2022-12-09 | 2022-12-09 | 异常处理方法及装置 |
PCT/CN2023/128409 WO2024120070A1 (zh) | 2022-12-09 | 2023-10-31 | 异常处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211582330.7A CN118170439A (zh) | 2022-12-09 | 2022-12-09 | 异常处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118170439A true CN118170439A (zh) | 2024-06-11 |
Family
ID=91353959
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211582330.7A Pending CN118170439A (zh) | 2022-12-09 | 2022-12-09 | 异常处理方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN118170439A (zh) |
WO (1) | WO2024120070A1 (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10678544B2 (en) * | 2015-09-19 | 2020-06-09 | Microsoft Technology Licensing, Llc | Initiating instruction block execution using a register access instruction |
CN113849345B (zh) * | 2021-09-23 | 2024-11-08 | 武汉深之度科技有限公司 | 一种指令执行方法、装置、计算设备及存储介质 |
CN115328690B (zh) * | 2022-10-13 | 2023-02-17 | 北京登临科技有限公司 | 异常处理方法、计算机可读介质及电子设备 |
-
2022
- 2022-12-09 CN CN202211582330.7A patent/CN118170439A/zh active Pending
-
2023
- 2023-10-31 WO PCT/CN2023/128409 patent/WO2024120070A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2024120070A1 (zh) | 2024-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9690581B2 (en) | Computer processor with deferred operations | |
US20200285473A1 (en) | Synchronisation of execution threads on a multi-threaded processor | |
US6857060B2 (en) | System, apparatus and method for prioritizing instructions and eliminating useless instructions | |
US9524164B2 (en) | Specialized memory disambiguation mechanisms for different memory read access types | |
US7290261B2 (en) | Method and logical apparatus for rename register reallocation in a simultaneous multi-threaded (SMT) processor | |
US7650605B2 (en) | Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors | |
WO2015024452A1 (zh) | 一种分支预测方法及相关装置 | |
US20140019738A1 (en) | Multicore processor system and branch predicting method | |
KR20060132856A (ko) | 비순차적인 dma 명령 큐에서 명령 순서 형성 | |
US20120284720A1 (en) | Hardware assisted scheduling in computer system | |
US8464269B2 (en) | Handling and reporting of object state transitions on a multiprocess architecture | |
CN114168271B (zh) | 一种任务调度方法、电子设备及存储介质 | |
US6405234B2 (en) | Full time operating system | |
US7818558B2 (en) | Method and apparatus for EFI BIOS time-slicing at OS runtime | |
CN109388429B (zh) | Mhp异构多流水线处理器的任务分发方法 | |
CN118170439A (zh) | 异常处理方法及装置 | |
CN109408118B (zh) | Mhp异构多流水线处理器 | |
KR101250892B1 (ko) | 운영 시스템 고속 런 커맨드 | |
US20110083030A1 (en) | Cache memory control device, cache memory device, processor, and controlling method for storage device | |
CN115098230A (zh) | 管理线程的方法及装置 | |
US20150363227A1 (en) | Data processing unit and method for operating a data processing unit | |
US20190310857A1 (en) | Method of Concurrent Instruction Execution and Parallel Work Balancing in Heterogeneous Computer Systems | |
US11977896B2 (en) | Issuing a sequence of instructions including a condition-dependent instruction | |
US20220075624A1 (en) | Alternate path for branch prediction redirect | |
US20020124163A1 (en) | System and method for supporting precise exceptions in a data processor having a clustered architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |