CN105225204A - 代码定位方法及装置 - Google Patents
代码定位方法及装置 Download PDFInfo
- Publication number
- CN105225204A CN105225204A CN201410295556.8A CN201410295556A CN105225204A CN 105225204 A CN105225204 A CN 105225204A CN 201410295556 A CN201410295556 A CN 201410295556A CN 105225204 A CN105225204 A CN 105225204A
- Authority
- CN
- China
- Prior art keywords
- code block
- program code
- speed cache
- undated parameter
- program
- 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.)
- Granted
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开的代码定位方法,包括:将内存中的第一程序代码块存储至高速缓存中;分别获取所述目标程序代码中的更新参数与当前时刻的第一程序代码块中的更新参数;当所述目标程序代码中的更新参数与所述当前时刻的第一程序代码块中的更新参数不同时,将所述内存中的第二程序代码块存储至所述高速缓存中。本发明还提供了代码定位装置。本发明所提供的代码定位方法及装置,当第一程序代码块存在更新时,另一个地址内存储的第二程序代码块与第一程序代码块同时更新,因此,将第二程序代码块存储至高速缓存,并将高速缓存中的第二程序代码块作为目标程序代码,从而能够保证机器语言程序正常执行,进一步能够使编译过程正常进行。
Description
技术领域
本发明涉及移动通信技术领域,更具体而言,涉及一种编译过程中的代码定位方法及装置。
背景技术
编译器是将高级语言程序转化为处理器可执行的机器语言程序的桥梁。通常,编译时,编译器将高级语言程序中的执行步骤编译,形成机器可执行的程序代码块,并将程序代码块存储到内存中。其中,程序代码块包含功能指令及该功能指令的存储地址等附属信息。在执行机器语言程序时,处理器按照执行流读取程序代码块,并执行程序代码块中的功能指令。由于程序代码块存储在内存中,而处理器执行机器语言程序时,内存的处理速度无法满足处理器的运行速度,因此,处理器在即将执行某一段程序代码块之前,将该程序代码块预取到高速缓存中,执行时,处理器直接从高速缓存中读取该程序代码块中的功能指令。在本领域中,将程序代码块预取到高速缓存的过程,称为指令预取,同时将程序代码块移出高速缓存的过程,称为高速缓存清理。。
目前,即时编译技术在编译技术领域已经得到广泛应用,即时编译指在即将执行机器语言程序之前,对高级语言程序进行编译。由于即时编译的编译时刻处于即将执行机器语言程序之前,为了将同一段高级语言程序生成更高效的机器语言程序,处理器在执行机器语言程序的过程中,不断获取优化参数,同时编译器不断的结合优化参数,对高级语言程序进行重复编译。根据上述描述,每次重新编译高级语言程序均结合新的优化数据,因此,每次重新编译得到的新程序代码块相对于原程序代码块可能会有更新,所以,处理器执行每段功能指令时,均需要对包含该功能指令的程序代码块进行指令预取,由于更新的代码块可能已经被预取,为了保证高速缓存和内存的一致性,在指令预取前,需要做高速缓存清理。
然而,在处理器执行机器语言程序过程中,当程序代码块存在更新时,处理器应当执行新功能指令,也就是说,处理器应当将新程序代码块预取到高速缓存中。如果此时处理器已经将原程序代码块预取到高速缓存中,由于硬件缺陷,导致处理器无法强制放弃已经缓存的原程序代码块,进一步导致无法预取新程序代码块,即无法完成高速缓存清理。处理器只能读取并执行原程序代码块中的原功能指令,从而使机器语言程序执行异常,进一步造成编译过程异常。
发明内容
有鉴于此,本发明实施例提供一种代码定位方法及装置,当功能指令有更新时,处理器即使无法完成高速缓存清理,也能够执行更新后的功能指令,从而能够保证机器语言程序正常执行,进而能够使编译过程正常进行。
第一方面,本发明实施例提供了一种代码定位方法,所述方法包括:将内存中的第一程序代码块存储至高速缓存中,将所述高速缓存中的第一程序代码块作为目标程序代码;在读取所述目标程序代码时,分别获取所述目标程序代码中的更新参数与当前时刻的第一程序代码块中的更新参数;当所述目标程序代码中的更新参数与所述当前时刻的第一程序代码块中的更新参数不同时,将所述内存中的第二程序代码块存储至所述高速缓存中,将所述高速缓存中的第二程序代码块作为目标程序代码,其中,所述第一程序代码块与所述第二程序代码块为编译同一段高级语言代码所生成。
在第一方面的第一种可能的实现方式中,将所述内存中的第二程序代码块存储至所述高速缓存中之后,所述方法还包括:在读取所述目标程序代码时,分别获取所述目标程序代码中的更新参数与当前时刻的第二程序代码块中的更新参数;当所述目标程序代码中的更新参数与所述当前时刻的第二程序代码块中的更新参数不同时,将所述内存中第一程序代码块中的功能指令存储到高速缓存中,将所述高速缓存中的功能指令作为目标程序代码的待执行指令。
结合上述第一方面,在第二种可能的实现方式中,所述获取当前时刻的第二程序代码块中的更新参数,包括:将所述当前时刻的第二程序代码块的起始地址作为基础地址,所述基础地址加上预设偏移量得到所述当前时刻的第二程序代码块中的更新参数的存储地址;从所述更新参数的存储地址中读取所述当前时刻的第二程序代码块中的更新参数。
结合上述第一方面,在第三种可能的实现方式中,将所述内存中第一程序代码中的功能指令存储到高速缓存中,将所述高速缓存中的功能指令作为目标程序代码的待执行指令,具体包括:根据所述第一程序代码块的起始地址及所述第一程序代码块的数据结构查找所述功能指令的存储地址;将所述存储地址中的所述功能指令存储到高速缓存中;为所述高速缓存中的功能指令分配虚拟地址,以便于所述功能指令作为待执行指令被读取。
结合上述第一方面,在第四种可能的实现方式中,所述方法还包括:当所述高速缓存中的目标程序代码存储预设时间后,清除所述目标程序代码。
第二方面,本发明实施例还提供了一种代码定位装置,所述装置包括:第一存储单元:用于将内存中的第一程序代码块存储至高速缓存中;第一获取单元:用于获取所述存储单元存储的目标程序代码中的更新参数;第二获取单元:用于获取当前时刻的第一程序代码块中的更新参数;第二存储单元:用于当所述目标程序代码中的更新参数与所述当前时刻的第一程序代码块中的更新参数不同时,将所述内存中的第二程序代码块存储至所述高速缓存中。
在第二方面的第一种可能的实现方式中,所述第一获取单元,还用于获取所述第二存储单元存储的目标程序代码中的更新参数;所述第二获取单元:还用于获取当前时刻的第二程序代码块中的更新参数;所述第二存储单元:还用于当所述目标程序代码中的更新参数与所述当前时刻的第二程序代码块中的更新参数不同时,将所述内存中的第一程序代码块中的功能指令存储到高速缓存中。
结合上述第二方面,在第二种可能的实现方式中,所述第二获取单元包括:偏移模块和读取模块,其中,所述偏移模块:用于将所述当前时刻的第二程序代码块的起始地址作为基础地址,所述基础地址加上预设偏移量得到所述当前时刻的第二程序代码块中的更新参数的存储地址;所述读取模块:用于从所述偏移模块偏移得到的更新参数的存储地址中读取所述当前时刻的第二程序代码块中的更新参数。
结合上述第二方面,在第三种可能的实现方式中,所述第二存储单元包括:查找模块、存储模块和分配模块,其中,所述查找模块:用于根据所述第一程序代码块的起始地址及所述第一程序代码块的数据结构查找所述功能指令的存储地址;所述存储模块:用于将所述查找模块查找到的存储地址中的所述功能指令存储到高速缓存中;所述分配模块:用于为所述存储模块存储到高速缓存中的功能指令分配虚拟地址。
结合上述第二方面,在第四种可能的实现方式中,所述装置还包括:清除单元:用于当所述高速缓存中的目标程序代码存储预设时间后,清除所述目标程序代码。
由以上技术方案可知,本发明所提供的代码定位方法及装置,在编译时,将编译同一段高级语言代码生成的程序代码块,存储至内存中的两个地址内。在执行前,将其中一个地址内的程序代码块作为第一程序代码块存储至高速缓存中,并将高速缓存中的第一程序代码块作为目标程序代码。为了更加准确顺畅的执行机器语言程序,当读取目标程序代码时,首先根据目标程序代码的更新参数,及当前时刻内存中第一程序代码块中的更新参数判断第一程序代码块是否存在更新。由于现有技术中存在硬件缺陷,当第一程序代码块存在更新时,高速缓存无法存储已更新的第一程序代码块,而本发明中,另一个地址内存储的第二程序代码块与第一程序代码块同时更新,因此,将第二程序代码块存储至高速缓存,并将高速缓存中的第二程序代码块作为目标程序代码,从而能够保证机器语言程序正常执行,进一步能够使编译过程正常进行。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本发明的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本发明的主旨。
图1为本发明实施例提供的代码定位方法的第一种实施方式的方法流程图;
图2为本发明实施例提供的代码定位方法的第二种实施方式的方法流程图;;
图3为本发明实施例提供的程序代码块的数据结构示例图;
图4为本发明实施例提供的代码定位装置的第一种实施方式的结构示意图;
图5为本发明实施例提供的代码定位装置的第一种实施方式的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
参见图1,该图为本发明实施例提供的代码定位方法的第一种实施方式的方法流程图,本实施例中,将同一段程序代码块存储在内存中的两个地址内,当程序代码块存在更新时,两个地址内所存储的程序代码块同时更新。当已经将其中一个地址内的程序代码块存储至高速缓存中后,如果程序代码块在执行之前产生更新,则能够将另一地址内已更新的程序代码块存储到高速缓存中,保证程序正常执行。所述方法包括以下步骤:
步骤S101:将内存中的第一程序代码块存储至高速缓存中。
本实施例可以应用于多个场景,其中,高级语言程序可以为任意汇编语言编写的程序,例如:使用C语言、Java、.net等语言编写的程序,无论高级语言程序采用哪种汇编语言编写形成,经过编译后均形成机器语言程序。
其中,编译器对高级语言程序进行编译时,将高级语言程序的每一个执行步骤对应编译形成一个程序代码块,在本实施例中,每一段高级语言代码编译生成程序代码块被存储在内存的两个地址内,在执行前,可以根据预先设定的执行流,将任意一个地址中的程序代码块作为第一程序代码块存储至高速缓存中,高速缓存中的第一程序代码块作为被读取并执行的目标程序代码。当然,当将其中一个地址内的程序代码块作为第一程序代码块时,则将另一个地址内的程序代码块作为第二程序代码块,本发明对此不做限制。
需要说明的,第一程序代码块与第二程序代码块在内存中的存储地址在编译时设定,因此,每次重复编译,第一程序代码块与第二程序代码块的存储地址也可能发生变化,因此,本发明对第一程序代码块及第二程序代码块的存储地址不做限制。此外,当将第一程序代码块存储到高速缓存中时,第二程序代码块中的数据无法被读取到,也就是说,第一程序代码块的存储地址与第二程序代码块的存储地址之间的距离不小于阈值,该阈值为高速缓存每次所存储的数据所占的空间大小。
步骤S102:分别获取目标程序代码中的更新参数与当前时刻的第一程序代码块中的更新参数。
为了将同一段高级语言程序生成更高效率的机器语言程序,通过即时跟踪机器语言程序的执行过程,发现更多的语义特征,采集优化数据,编译器结合所采集的优化数据对高级语言程序重新编译,随着机器语言程序的不断执行,编译器不断的进行重新编译。重复编译的具体实现过程为本领域技术人员所熟知的技术,本发明此处不再赘述。
由于重复编译过程由编译器执行,而机器语言程序的执行过程由处理器执行,因此,为了在执行时能够明确识别出程序代码块是否存在更新,在编译时,每个程序代码块对应设置有更新参数。在本发明的一个优选实施例中,更新参数可以是布尔变量,程序代码块每更新一次,更新参数在上次的基础上跳变一次,若无更新产生,则维持上次的更新参数不变。例如,如果上次第一程序代码块的更新参数为0,若本次重新编译第一程序代码块未产生更新,则更新参数依然为0;若产生更新,则更新参数变为1。
本实施例中,目标程序代码从被预取到高速缓存中,至被处理器读取之前,在高速缓存中不会产生变化。而这段时间内,编译器依然在重复编译,因此,内存中的第一程序代码块可能会产生更新。因此,在处理器读取目标程序代码时,通过比较目标程序的代码的更新参数及当前时刻第一程序代码块的更新参数,能够判断出当前时刻第一程序代码块是否存在更新,进而能够准确的获知处理器应当执行的程序代码。
步骤S103:将内存中的第二程序代码块存储至高速缓存中。
由上述描述可知,当目标程序代码中的更新参数与当前时刻的第一程序代码块中的更新参数相同时,说明当前时刻内存中的第一程序代码块没有更新,因此,处理器能够直接读取并执行高速缓存中的目标程序代码;当目标程序代码中的更新参数与当前时刻的第一程序代码块中的更新参数不相同时,说明当前时刻内存中的第一程序代码块已经被更新,处理器应当执行当前时刻第一程序的代码块的内容,因此,应当将已更新的第一程序代码块存储到高速缓存中。
由于第一程序代码块与第二程序代码块为编译同一段高级语言代码所生成,因此,第一程序代码块与第二程序代码块相同,如果当前时刻的第一程序代码块已经被更新时,第二程序代码块同样已经被更新,所以,可以将第二程序代码块存储至高速缓存中,并将高速缓存中的第二程序代码块作为目标程序代码,这样,处理器就能够读取并执行最新的程序代码块。
本实施例所提供的代码定位方法,在编译时,将编译同一段高级语言代码生成的程序代码块,存储至内存中的两个地址内。在执行前,将其中一个地址内的程序代码块作为第一程序代码块存储至高速缓存中,并将高速缓存中的第一程序代码块作为目标程序代码。为了更加准确顺畅的执行机器语言程序,当读取目标程序代码时,首先根据目标程序代码的更新参数,及当前时刻内存中第一程序代码块中的更新参数判断第一程序代码块是否存在更新。由于现有技术中存在硬件缺陷,当第一程序代码块存在更新时,高速缓存无法存储已更新的第一程序代码块,而本发明中,另一个地址内存储的第二程序代码块与第一程序代码块同时更新,因此,将第二程序代码块存储至高速缓存,并将高速缓存中的第二程序代码块作为目标程序代码,从而能够保证机器语言程序正常执行,进一步能够使编译过程正常进行。
实施例二
参见图2,该图示出了本发明实施例提供的代码定位方法的第二种实施方式,本实施例为实施例一的扩充,关于本实施例方法步骤中与实施例一重复性的内容可参见实施例一的内容,在本实施例中不再赘述。本实施例中,所述方法包括以下步骤:
步骤S201:将内存中的第一程序代码块存储至高速缓存中。
步骤S202:分别获取目标程序代码中的更新参数与当前时刻的第一程序代码块中的更新参数。
步骤S203:将内存中的第二程序代码块存储至高速缓存中。
步骤S204:分别获取目标程序代码中的更新参数与当前时刻的第二程序代码块中的更新参数。
在上述实施例的基础上,当再次执行该功能代码时,重复执行根据更新参数判断程序代码块是否有更新的操作。由于本步骤中的目标程序代码为存储在高速缓存中的第二程序代码块,因此,本实施例中,可以比较当前时刻第二程序代码块中的更新参数与目标代码块中的更新参数。
其中,由于目标程序代码的所有数据均被存储在高速缓存中,而且目标程序代码作为待执行功能模块被锁定,所以,目标程序代码中的更新参数可以直接从高速缓存中读取。而内存中存储有多个程序代码块,因此,获取当前时刻的第二程序代码块中的更新参数,需要查找更新参数的存储地址。获取过程具体可以包括以下步骤:将当前时刻第二程序代码块的起始地址作为基础地址,基础地址加上预设偏移量得到当前时刻的第二程序代码块中的更新参数的存储地址,从该存储地址中读取所述当前时刻的第二程序代码块中的更新参数。
需要指出的,第二程序代码块中的数据满足一定的数据结构,因此,可以先确定第二程序代码块中第一条指令的存储地址,本发明中将第二程序代码块中第一条指令的存储地址称为第二程序代码块的起始地址。由于第二程序代码块中的数据满足一定的数据结构,因此,在确定起始地址之后,将该起始地址作为基础地址,可以采用相对寻址的方式查找更新参数的存储地址,上述偏移量即为相对寻址时所加的量。当然,偏移量根据数据结构的不同而不同,本发明此处不做限制。
步骤S205:将内存中第一程序代码中的功能指令存储到高速缓存中。
处理器执行目标程序代码具体为,执行目标程序代码中的功能性指令,目标程序代码中的其他数据为代码对象头,跳转指令等附加信息数据。即使第一程序代码块存在更新,主要更新的部分为第一程序代码块中的功能指令,而代码对象头,跳转指令等无太大修改,因此,在向高速缓存中存储第一程序代码块时,可以直接将第一程序代码块中的功能指令进行存储。高速缓存中的功能指令作为待执行指令,与目标程序代码的中代码对象头及其他附加数据共同形成新的目标代码。其中,将第一程序代码中的功能指令存储到高速缓存中,具体包括:根据第一程序代码块的起始地址及第一程序代码块的数据结构查找功能指令的存储地址;将存储地址中的功能指令存储到高速缓存中。本步骤中,仅仅将功能指令存储到高速缓存中,能够很大程度的节省高速缓存的存储空间。
需要指出的,由于高速缓存中同一时间内存储有多个功能指令,为了明确当前的待执行指令,高速缓存中每存储一段功能指令,为该功能指令分配一个虚拟地址,处理器执行时,根据该虚拟地址读取并执行待执行指令。
此外,由于高速缓存的存储空间有限,当高速缓存中的目标程序代码存储预设时间后,该目标程序代码可能已经失效,因此,可以通过覆盖的方式清除该目标程序代码。当然,上述仅为本发明的一个优选示例,本发明对清除目标程序代码的方式不做限制。
本实施例中,只将存在更新的功能指令存储到高速缓存中,随着执行流程的不断进行,能够很大程度的节省高速缓存的存储空间,而且处理器能够直接明确的读取到待执行指令。
实施例三
为了使本领域技术人员更加详细、清楚的了解本发明的技术方案,本发明通过下述具体实施例对本发明的技术方案进行详细描述。
在本实施例中,M表示一段高级语言程序块,N11和N12表示编译M形成的机器语言程序代码块,其数据结构如图3所示。其中,N11在内存中的存储地址编号为0-30,N12在内存中的存储地址编号为80-110。当处理器即将执行M所对应的机器代码块时,根据预先设置的执行流,首先,跳到内存中N11的第一条指令的存储地址处,本实施例中可以为0-5的地址处,以存储地址0-5为起始地址,将存储地址0-50内的数据到高速缓存中。即将N11从内存中存储到高速缓存中,高速缓存中的N11为即将被执行的目标程序代码。
在处理器从高速缓存中读取到N11的代码对象头之后,首先根据跳转程序获取高速缓存中N11的原更新参数,假设原更新参数为0;同时,以N11的起始地址0-5作为基础地址,通过相对寻址的方式查找当前时刻内存中N11的更新参数存储区域,在本实施例中为21-25,并从存储地址21-25中读取当前时刻内存中N11的更新参数。若更新参数为0,表示N11并未被更新,处理器可以直接执行高速缓存中N11的功能指令;若更新参数为1,说明更新参数发生跳变。如果内存中的N11更新为N21,同时N12更新为N22,此时处理器应当执行N21中的功能指令,而非高速缓存中已存储的N11中的功能指令。
此时,程序跳转到N22的第一条指令所存储的地址处,在本实施例中为80-85处,结合地址80-85及N22的数据结构,查找N22中功能指令的存储地址,在本实施例中为86-110,将86-110中的功能指令存储至高速缓存中。由于N22中功能指令的代码对象头、跳转程序及其他附加信息与N11中功能指令的相同,因此,可以和N11中功能指令的附加信息共同构成目标程序代码。在N22中的功能指令存储在高速缓存中后,处理器为已存储的功能指令分配一个虚拟地址,当处理器执行该功能指令时,通过虚拟地址读取并执行该功能指令。
需要说明的,上述仅为一个优选示例,当内存中的N11更新为N21时,可以将程序代码块N22全部存储到高速缓存中,也可以只存储N22中的功能指令,本发明对此不做限制。
当处理器再次执行M对应的机器代码块时,判断当前时刻内存中的N22相对于高速缓存中存储的N22是否有更新,如果有,此时N22更新为N32,N21更新为N31,那么处理器应当执行N31中的功能指令。具体的执行流程与上述流程类似,本发明此处不再赘述。
当然,由于高速缓存的存储空间有限,因此,当处理器执行N22中的功能指令时,高速缓存中已存储的N11中的功能指令已经失效,因此,可以通过覆盖的形式清除N11中的功能指令。
当然,上述仅为本发明的一个优选示例,对本发明的技术方案不构成任何限制。
由上述实施例可知,本发明实施例所提供的代码定位方法,在编译时,将编译同一段高级语言代码生成的程序代码块,存储至内存中的两个地址内。在执行前,将其中一个地址内的程序代码块作为第一程序代码块存储至高速缓存中,并将高速缓存中的第一程序代码块作为目标程序代码。为了更加准确顺畅的执行机器语言程序,当读取目标程序代码时,首先根据目标程序代码的更新参数,及当前时刻内存中第一程序代码块中的更新参数判断第一程序代码块是否存在更新。由于现有技术中存在硬件缺陷,当第一程序代码块存在更新时,高速缓存无法存储已更新的第一程序代码块,而本发明中,另一个地址内存储的第二程序代码块与第一程序代码块同时更新,因此,将第二程序代码块存储至高速缓存,并将高速缓存中的第二程序代码块作为目标程序代码,从而能够保证机器语言程序正常执行,进一步能够使编译过程正常进行。
实施例四
与上述实现方法相对应的,本发明实施例还提供了代码定位装置,如图4所示,该图示出了本发明实施例提供的代码定位装置的第一种实施方式的结构示意图。所述装置包括:第一存储单元11、第一获取单元12、第二获取单元13及第二存储单元14,其中,所述第一存储单元11,用于将内存中的第一程序代码块存储至高速缓存中;所述第一获取单元12,用于获取所述存储单元11存储的目标程序代码中的更新参数;所述第二获取单元13,用于获取当前时刻的第一程序代码块中的更新参数;所述第二存储单元14,用于当所述目标程序代码中的更新参数与所述当前时刻的第一程序代码块中的更新参数不同时,将所述内存中的第二程序代码块存储至所述高速缓存中。
所述装置中各个单元的功能和作用的实现过程详见上述方法中对应的实现过程,在此不再赘述。
本实施例所提供的代码定位装置,在编译时,将编译同一段高级语言代码生成的程序代码块,存储至内存中的两个地址内。在执行前,将其中一个地址内的程序代码块作为第一程序代码块存储至高速缓存中,并将高速缓存中的第一程序代码块作为目标程序代码。为了更加准确顺畅的执行机器语言程序,当读取目标程序代码时,首先根据目标程序代码的更新参数,及当前时刻内存中第一程序代码块中的更新参数判断第一程序代码块是否存在更新。由于现有技术中存在硬件缺陷,当第一程序代码块存在更新时,高速缓存无法存储已更新的第一程序代码块,而本发明中,另一个地址内存储的第二程序代码块与第一程序代码块同时更新,因此,将第二程序代码块存储至高速缓存,并将高速缓存中的第二程序代码块作为目标程序代码,从而能够保证机器语言程序正常执行,进一步能够使编译过程正常进行。
实施例五
如图5所示,在上述实施例的基础上,本发明实施例还提供了代码定位装置的第二种实施例方式。所述装置包括:第一存储单元21,第一获取单元22、第二获取单元23、第二存储单元24及清除单元25,其中,所述第一存储单元21、所述第一获取单元22、第二获取单元23与所述第二存储单元24的功能及作用与实施例四中相似,本实施例此处不再赘述,所述清除单元25,用于当所述高速缓存中的目标程序代码存储预设时间后,清除所述目标程序代码。
在本实施例中,所述第一获取单元22,还用于获取所述第二存储单元24存储的目标程序代码中的更新参数;所述第二获取单元23:还用于获取当前时刻的第二程序代码块中的更新参数;所述第二存储单元24:还用于当所述目标程序代码中的更新参数与所述当前时刻的第二程序代码块中的更新参数不同时,将所述内存中的第一程序代码块中的功能指令存储到高速缓存中。
其中,所述第二获取单元23包括:偏移模块和读取模块,所述偏移模块:用于将所述当前时刻的第二程序代码块的起始地址作为基础地址,所述基础地址加上预设偏移量得到所述当前时刻的第二程序代码块中的更新参数的存储地址;所述读取模块:用于从所述偏移模块偏移得到的更新参数的存储地址中读取所述当前时刻的第二程序代码块中的更新参数。
本实施例中,所述第二存储单元24包括:查找模块、存储模块和分配模块,其中,所述查找模块:用于根据所述第一程序代码块的起始地址及所述第一程序代码块的数据结构查找所述功能指令的存储地址;所述存储模块:用于将所述查找模块查找到的存储地址中的所述功能指令存储到高速缓存中;所述分配模块:用于为所述存储模块存储到高速缓存中的功能指令分配虚拟地址。
所述装置中各个单元的功能和作用的实现过程详见上述方法中对应的实现过程,在此不再赘述。
综合上述,本发明实施例所提供的代码定位方法及装置,在编译时,将编译同一段高级语言代码生成的程序代码块,存储至内存中的两个地址内。在执行前,将其中一个地址内的程序代码块作为第一程序代码块存储至高速缓存中,并将高速缓存中的第一程序代码块作为目标程序代码。为了更加准确顺畅的执行机器语言程序,当读取目标程序代码时,首先根据目标程序代码的更新参数,及当前时刻内存中第一程序代码块中的更新参数判断第一程序代码块是否存在更新。由于现有技术中存在硬件缺陷,当第一程序代码块存在更新时,高速缓存无法存储已更新的第一程序代码块,而本发明中,另一个地址内存储的第二程序代码块与第一程序代码块同时更新,因此,将第二程序代码块存储至高速缓存,并将高速缓存中的第二程序代码块作为目标程序代码,从而能够保证机器语言程序正常执行,进一步能够使编译过程正常进行。
可以理解的是,本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种代码定位方法,其特征在于,所述方法包括:
将内存中的第一程序代码块存储至高速缓存中,将所述高速缓存中的第一程序代码块作为目标程序代码;
在读取所述目标程序代码时,分别获取所述目标程序代码中的更新参数与当前时刻的第一程序代码块中的更新参数;
当所述目标程序代码中的更新参数与所述当前时刻的第一程序代码块中的更新参数不同时,将所述内存中的第二程序代码块存储至所述高速缓存中,将所述高速缓存中的第二程序代码块作为目标程序代码,其中,所述第一程序代码块与所述第二程序代码块为编译同一段高级语言代码所生成。
2.如权利要求1所述的方法,其特征在于,将所述内存中的第二程序代码块存储至所述高速缓存中之后,所述方法还包括:
在读取所述目标程序代码时,分别获取所述目标程序代码中的更新参数与当前时刻的第二程序代码块中的更新参数;
当所述目标程序代码中的更新参数与所述当前时刻的第二程序代码块中的更新参数不同时,将所述内存中第一程序代码块中的功能指令存储到高速缓存中,将所述高速缓存中的功能指令作为目标程序代码的待执行指令。
3.如权利要求2所述的方法,其特征在于,所述获取当前时刻的第二程序代码块中的更新参数,包括:
将所述当前时刻的第二程序代码块的起始地址作为基础地址,所述基础地址加上预设偏移量得到所述当前时刻的第二程序代码块中的更新参数的存储地址;
从所述更新参数的存储地址中读取所述当前时刻的第二程序代码块中的更新参数。
4.如权利要求2所述的方法,其特征在于,将所述内存中第一程序代码中的功能指令存储到高速缓存中,将所述高速缓存中的功能指令作为目标程序代码的待执行指令,具体包括:
根据所述第一程序代码块的起始地址及所述第一程序代码块的数据结构查找所述功能指令的存储地址;
将所述存储地址中的所述功能指令存储到高速缓存中;
为所述高速缓存中的功能指令分配虚拟地址,以便于所述功能指令作为待执行指令被读取。
5.如权利要求1至4中任一权项所述的方法,其特征在于,所述方法还包括:
当所述高速缓存中的目标程序代码存储预设时间后,清除所述目标程序代码。
6.代码定位装置,其特征在于,所述装置包括:
第一存储单元:用于将内存中的第一程序代码块存储至高速缓存中;
第一获取单元:用于获取所述存储单元存储的目标程序代码中的更新参数;
第二获取单元:用于获取当前时刻的第一程序代码块中的更新参数;
第二存储单元:用于当所述目标程序代码中的更新参数与所述当前时刻的第一程序代码块中的更新参数不同时,将所述内存中的第二程序代码块存储至所述高速缓存中。
7.如权利要求6所述的装置,其特征在于,
所述第一获取单元,还用于获取所述第二存储单元存储的目标程序代码中的更新参数;
所述第二获取单元:还用于获取当前时刻的第二程序代码块中的更新参数;
所述第二存储单元:还用于当所述目标程序代码中的更新参数与所述当前时刻的第二程序代码块中的更新参数不同时,将所述内存中的第一程序代码块中的功能指令存储到高速缓存中。
8.如权利要求7所述的装置,其特征在于,所述第二获取单元包括:偏移模块和读取模块,其中,
所述偏移模块:用于将所述当前时刻的第二程序代码块的起始地址作为基础地址,所述基础地址加上预设偏移量得到所述当前时刻的第二程序代码块中的更新参数的存储地址;
所述读取模块:用于从所述偏移模块偏移得到的更新参数的存储地址中读取所述当前时刻的第二程序代码块中的更新参数。
9.如权利要求7所述的装置,其特征在于,所述第二存储单元包括:查找模块、存储模块和分配模块,其中,
所述查找模块:用于根据所述第一程序代码块的起始地址及所述第一程序代码块的数据结构查找所述功能指令的存储地址;
所述存储模块:用于将所述查找模块查找到的存储地址中的所述功能指令存储到高速缓存中;
所述分配模块:用于为所述存储模块存储到高速缓存中的功能指令分配虚拟地址。
10.如权利要求6至9所述的装置,其特征在于,所述装置还包括:
清除单元:用于当所述高速缓存中的目标程序代码存储预设时间后,清除所述目标程序代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410295556.8A CN105225204B (zh) | 2014-06-26 | 2014-06-26 | 代码定位方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410295556.8A CN105225204B (zh) | 2014-06-26 | 2014-06-26 | 代码定位方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105225204A true CN105225204A (zh) | 2016-01-06 |
CN105225204B CN105225204B (zh) | 2018-04-13 |
Family
ID=54994156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410295556.8A Active CN105225204B (zh) | 2014-06-26 | 2014-06-26 | 代码定位方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105225204B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1495610A (zh) * | 2002-09-13 | 2004-05-12 | 国际商业机器公司 | 用于固件更新的方法和装置 |
CN1550994A (zh) * | 2003-04-24 | 2004-12-01 | �Ҵ���˾ | 局部化高速缓存块刷新指令 |
CN1879083A (zh) * | 2003-02-25 | 2006-12-13 | 英特尔公司 | 基于优先权的代码高速缓存管理 |
US20070271555A1 (en) * | 2000-12-13 | 2007-11-22 | Esmertec Ag | Combined verification and compilation of bytecode |
US20110035567A1 (en) * | 2008-08-15 | 2011-02-10 | Apple Inc. | Actual instruction and actual-fault instructions for processing vectors |
-
2014
- 2014-06-26 CN CN201410295556.8A patent/CN105225204B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070271555A1 (en) * | 2000-12-13 | 2007-11-22 | Esmertec Ag | Combined verification and compilation of bytecode |
CN1495610A (zh) * | 2002-09-13 | 2004-05-12 | 国际商业机器公司 | 用于固件更新的方法和装置 |
CN1879083A (zh) * | 2003-02-25 | 2006-12-13 | 英特尔公司 | 基于优先权的代码高速缓存管理 |
CN1550994A (zh) * | 2003-04-24 | 2004-12-01 | �Ҵ���˾ | 局部化高速缓存块刷新指令 |
US20110035567A1 (en) * | 2008-08-15 | 2011-02-10 | Apple Inc. | Actual instruction and actual-fault instructions for processing vectors |
Also Published As
Publication number | Publication date |
---|---|
CN105225204B (zh) | 2018-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3491569B1 (en) | Updating virtual memory addresses of target application functionalities for an updated version of application binary code | |
Peled et al. | Semantic locality and context-based prefetching using reinforcement learning | |
US9798528B2 (en) | Software solution for cooperative memory-side and processor-side data prefetching | |
KR101107797B1 (ko) | 프로그램 코드 변환을 위한 공유 코드 캐싱 방법 및 장치 | |
CN103744709B (zh) | 补丁加载方法及装置 | |
CA2684441C (en) | May-constant propagation | |
CN105493053A (zh) | 多核处理器中的高速缓存划分 | |
CN102099786A (zh) | 程序优化方法 | |
US9250939B2 (en) | Information processing device, profile target determining program, and method | |
US8839219B2 (en) | Data prefetching and coalescing for partitioned global address space languages | |
US8359435B2 (en) | Optimization of software instruction cache by line re-ordering | |
JP4177681B2 (ja) | コンパイル方法、コンパイラ、およびコンパイル装置 | |
US20090037690A1 (en) | Dynamic Pointer Disambiguation | |
KR101537725B1 (ko) | 워크 그룹 크기 결정 방법, 시스템 및 컴퓨터 판독가능 기록매체 | |
Sharma et al. | Data layout optimization for portable performance | |
CN105225204A (zh) | 代码定位方法及装置 | |
CN114546401A (zh) | 基于循环折叠的二进制程序体积优化器 | |
Kim et al. | WCET-aware function-level dynamic code management on scratchpad memory | |
Mielikainen et al. | Optimizing zonal advection of the Advanced Research WRF (ARW) dynamics for Intel MIC | |
Ashraf et al. | Intra-application data-communication characterization | |
Meng et al. | Profile-guided, multi-version binary rewriting | |
Lionas | Runtime Object Lifetime Profiler for the Virtual Machine GraalVM | |
Sumikawa et al. | Global load instruction aggregation based on array dimensions | |
Li | Software update management in wireless sensor networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200529 Address after: 310051 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province Patentee after: Alibaba (China) Co.,Ltd. Address before: 100080, No. 28, Fu Cheng Road, 12, Beijing, Haidian District Patentee before: UC MOBILE Ltd. |
|
TR01 | Transfer of patent right |