代码定位方法及装置的制造方法

文档序号:9472190阅读:262来源:国知局
代码定位方法及装置的制造方法
【技术领域】
[0001]本发明涉及移动通信技术领域,更具体而言,涉及一种编译过程中的代码定位方法及装置。
【背景技术】
[0002]编译器是将高级语言程序转化为处理器可执行的机器语言程序的桥梁。通常,编译时,编译器将高级语言程序中的执行步骤编译,形成机器可执行的程序代码块,并将程序代码块存储到内存中。其中,程序代码块包含功能指令及该功能指令的存储地址等附属信息。在执行机器语言程序时,处理器按照执行流读取程序代码块,并执行程序代码块中的功能指令。由于程序代码块存储在内存中,而处理器执行机器语言程序时,内存的处理速度无法满足处理器的运行速度,因此,处理器在即将执行某一段程序代码块之前,将该程序代码块预取到高速缓存中,执行时,处理器直接从高速缓存中读取该程序代码块中的功能指令。在本领域中,将程序代码块预取到高速缓存的过程,称为指令预取,同时将程序代码块移出高速缓存的过程,称为高速缓存清理。。
[0003]目前,即时编译技术在编译技术领域已经得到广泛应用,即时编译指在即将执行机器语言程序之前,对高级语言程序进行编译。由于即时编译的编译时刻处于即将执行机器语言程序之前,为了将同一段高级语言程序生成更高效的机器语言程序,处理器在执行机器语言程序的过程中,不断获取优化参数,同时编译器不断的结合优化参数,对高级语言程序进行重复编译。根据上述描述,每次重新编译高级语言程序均结合新的优化数据,因此,每次重新编译得到的新程序代码块相对于原程序代码块可能会有更新,所以,处理器执行每段功能指令时,均需要对包含该功能指令的程序代码块进行指令预取,由于更新的代码块可能已经被预取,为了保证高速缓存和内存的一致性,在指令预取前,需要做高速缓存清理。
[0004]然而,在处理器执行机器语言程序过程中,当程序代码块存在更新时,处理器应当执行新功能指令,也就是说,处理器应当将新程序代码块预取到高速缓存中。如果此时处理器已经将原程序代码块预取到高速缓存中,由于硬件缺陷,导致处理器无法强制放弃已经缓存的原程序代码块,进一步导致无法预取新程序代码块,即无法完成高速缓存清理。处理器只能读取并执行原程序代码块中的原功能指令,从而使机器语言程序执行异常,进一步造成编译过程异常。

【发明内容】

[0005]有鉴于此,本发明实施例提供一种代码定位方法及装置,当功能指令有更新时,处理器即使无法完成高速缓存清理,也能够执行更新后的功能指令,从而能够保证机器语言程序正常执行,进而能够使编译过程正常进行。
[0006]第一方面,本发明实施例提供了一种代码定位方法,所述方法包括:将内存中的第一程序代码块存储至高速缓存中,将所述高速缓存中的第一程序代码块作为目标程序代码;在读取所述目标程序代码时,分别获取所述目标程序代码中的更新参数与当前时刻的第一程序代码块中的更新参数;当所述目标程序代码中的更新参数与所述当前时刻的第一程序代码块中的更新参数不同时,将所述内存中的第二程序代码块存储至所述高速缓存中,将所述高速缓存中的第二程序代码块作为目标程序代码,其中,所述第一程序代码块与所述第二程序代码块为编译同一段高级语言代码所生成。
[0007]在第一方面的第一种可能的实现方式中,将所述内存中的第二程序代码块存储至所述高速缓存中之后,所述方法还包括:在读取所述目标程序代码时,分别获取所述目标程序代码中的更新参数与当前时刻的第二程序代码块中的更新参数;当所述目标程序代码中的更新参数与所述当前时刻的第二程序代码块中的更新参数不同时,将所述内存中第一程序代码块中的功能指令存储到高速缓存中,将所述高速缓存中的功能指令作为目标程序代码的待执行指令。
[0008]结合上述第一方面,在第二种可能的实现方式中,所述获取当前时刻的第二程序代码块中的更新参数,包括:将所述当前时刻的第二程序代码块的起始地址作为基础地址,所述基础地址加上预设偏移量得到所述当前时刻的第二程序代码块中的更新参数的存储地址;从所述更新参数的存储地址中读取所述当前时刻的第二程序代码块中的更新参数。
[0009]结合上述第一方面,在第三种可能的实现方式中,将所述内存中第一程序代码中的功能指令存储到高速缓存中,将所述高速缓存中的功能指令作为目标程序代码的待执行指令,具体包括:根据所述第一程序代码块的起始地址及所述第一程序代码块的数据结构查找所述功能指令的存储地址;将所述存储地址中的所述功能指令存储到高速缓存中;为所述高速缓存中的功能指令分配虚拟地址,以便于所述功能指令作为待执行指令被读取。
[0010]结合上述第一方面,在第四种可能的实现方式中,所述方法还包括:当所述高速缓存中的目标程序代码存储预设时间后,清除所述目标程序代码。
[0011 ] 第二方面,本发明实施例还提供了一种代码定位装置,所述装置包括:第一存储单元:用于将内存中的第一程序代码块存储至高速缓存中;第一获取单元:用于获取所述存储单元存储的目标程序代码中的更新参数;第二获取单元:用于获取当前时刻的第一程序代码块中的更新参数;第二存储单元:用于当所述目标程序代码中的更新参数与所述当前时刻的第一程序代码块中的更新参数不同时,将所述内存中的第二程序代码块存储至所述高速缓存中。
[0012]在第二方面的第一种可能的实现方式中,所述第一获取单元,还用于获取所述第二存储单元存储的目标程序代码中的更新参数;所述第二获取单元:还用于获取当前时刻的第二程序代码块中的更新参数;所述第二存储单元:还用于当所述目标程序代码中的更新参数与所述当前时刻的第二程序代码块中的更新参数不同时,将所述内存中的第一程序代码块中的功能指令存储到高速缓存中。
[0013]结合上述第二方面,在第二种可能的实现方式中,所述第二获取单元包括:偏移模块和读取模块,其中,所述偏移模块:用于将所述当前时刻的第二程序代码块的起始地址作为基础地址,所述基础地址加上预设偏移量得到所述当前时刻的第二程序代码块中的更新参数的存储地址;所述读取模块:用于从所述偏移模块偏移得到的更新参数的存储地址中读取所述当前时刻的第二程序代码块中的更新参数。
[0014]结合上述第二方面,在第三种可能的实现方式中,所述第二存储单元包括:查找模块、存储模块和分配模块,其中,所述查找模块:用于根据所述第一程序代码块的起始地址及所述第一程序代码块的数据结构查找所述功能指令的存储地址;所述存储模块:用于将所述查找模块查找到的存储地址中的所述功能指令存储到高速缓存中;所述分配模块:用于为所述存储模块存储到高速缓存中的功能指令分配虚拟地址。
[0015]结合上述第二方面,在第四种可能的实现方式中,所述装置还包括:清除单元:用于当所述高速缓存中的目标程序代码存储预设时间后,清除所述目标程序代码。
[0016]由以上技术方案可知,本发明所提供的代码定位方法及装置,在编译时,将编译同一段高级语言代码生成的程序代码块,存储至内存中的两个地址内。在执行前,将其中一个地址内的程序代码块作为第一程序代码块存储至高速缓存中,并将高速缓存中的第一程序代码块作为目标程序代码。为了更加准确顺畅的执行机器语言程序,当读取目标程序代码时,首先根据目标程序代码的更新参数,及当前时刻内存中第一程序代码块中的更新参数判断第一程序代码块是否存在更新。由于现有技术中存在硬件缺陷,当第一程序代码块存在更新时,高速缓存无法存储已更新的第一程序代码块,而本发明中,另一个地址内存储的第二程序代码块与第一程序代码块同时更新,因此,将第二程序代码块存储至高速缓存,并将高速缓存中的第二程序代码块作为目标程序代码,从而能够保证机器语言程序正常执行,进一步能够使编译过程正常进行。
【附图说明】
[0017]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本发明的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本发明的主旨。
[0018]图1为本发明实施例提供的代码定位方法的第一种实施方式的方法流程图;
[0019]图2为本发明实施例提供的代码定位方法的第二种实施方
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1