CN102831178B - 多级存储的重部署方法及装置 - Google Patents

多级存储的重部署方法及装置 Download PDF

Info

Publication number
CN102831178B
CN102831178B CN201210268364.9A CN201210268364A CN102831178B CN 102831178 B CN102831178 B CN 102831178B CN 201210268364 A CN201210268364 A CN 201210268364A CN 102831178 B CN102831178 B CN 102831178B
Authority
CN
China
Prior art keywords
symbol
heavily
district
disposing
treat
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
Application number
CN201210268364.9A
Other languages
English (en)
Other versions
CN102831178A (zh
Inventor
周巍
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201210268364.9A priority Critical patent/CN102831178B/zh
Publication of CN102831178A publication Critical patent/CN102831178A/zh
Priority to PCT/CN2013/072953 priority patent/WO2014019367A1/zh
Application granted granted Critical
Publication of CN102831178B publication Critical patent/CN102831178B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Abstract

本发明的实施例公开了一种多级存储的重部署方法及装置,涉及信息技术领域,可以无需修改源代码实现对重定向文件符号的重部署。本发明的实施方法包括:从重定向文件中获取待重部署的符号的当前位置信息;根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署。本发明的实施例主要用于多级存储的重部署过程中。

Description

多级存储的重部署方法及装置
技术领域
本发明涉及信息技术领域,尤其涉及一种多级存储的重部署方法及装置。
背景技术
在软件代码开发中,存在大量第三方以库形式提供的重定向文件,采用多级存储的方式将重定向文件中的代码部署到不同级别的内存上,在软件代码开发中可以直接使用这些重定向文件提高代码开发效率,由于软件开发目的不同,对重定向文件中提供的符号使用的频率也会不同,直接使用第三方提供的重定向文件,会造成各级内存不能得到高效利用。因此,通常需要重新部署重定向文件中各代码的存储位置,从而充分发挥各级内存在速度、容量、成本方面的优势,达到最优性价比。
为了提高多级存储的性价比,需要调整重定向文件中各符号的存储位置,现有技术提供的多级存储的重部署方法为:首先,在源代码编译时为每个符号指定节区属性,多个符号可以共用一个节区属性,再通过编译器编译成可重定向文件,将节区与内存块的映射关系写入链接脚本,然后生成镜像文件,完成符号的部署。然后,通过修改链接脚本中节区与内存块的映射关系,重新生成镜像文件,完成符号重部署。
在实现上述多级存储的重部署方法时,发明人发现现有技术至少存在如下问题:由于所述重定向文件中符号与节区已绑定,修改链接脚本中节区与内存块的映射关系只能在节区一级做调整,无法对单个符号进行重部署。在编译时为每个符号指定一个不同的节区属性,可以修改单个符号的存储位置,但是需要获取到源代码,并且对源代码的编译需要花费大量人工成本。
发明内容
本发明的实施例提供一种多级存储的重部署方法及装置,可以无需修改源代码实现对重定向文件符号的重部署。
为达到上述目的,本发明的实施例采用如下技术方案:
一方面,本发明实施例提供一种多级存储的重部署方法,包括:从重定向文件中获取待重部署的符号的当前位置信息;根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署。
另一方面,本发明实施例提供一种多级存储的重部署装置,包括:第一获取单元,用于从重定向文件中获取待重部署的符号的当前位置信息;重部署单元,用于根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署。
本发明实施例提供的多级存储的重部署方法及装置,通过从重定向文件中获取待重部署的符号的当前位置信息,根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署,与现有技术中只能在节区一级进行重部署的方法相比,在重定向文件中只剪裁了需要重部署的符号,不需要通过修改源代码删除指定的符号,即可将多级存储重部署的实施对象粒度到符号级别,降低成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一种多级存储的重部署方法流程图;
图2为本发明实施例一种多级存储的重部署方法流程图;
图3为本发明实施例一种多级存储的流程示意图;
图4为本发明实施例一种重定向文件的组成示意图;
图5为本发明实施例一种重定向文件中符号部署的示意图;
图6为本发明实施例一种链接脚本的示意图;
图7为本发明实施例一种重定向文件中符号的重部署示意图
图8为本发明实施例另一种多级存储的重部署方法流程图;
图9为本发明实施例另一种多级存储的重部署方法流程图;
图10为本发明实施例另一种重定向文件的组成示意图;
图11为本发明实施例一种多级存储的重部署装置组成示意图;
图12为本发明实施例另一种多级存储的重部署装置组成示意图;
图13为本发明实施例再一种多级存储的重部署装置组成示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的实施例提供一种多级存储的重部署方法,如图1所示,包括:
101、从重定向文件中获取待重部署的符号的当前位置信息。
其中,所述重定向文件是一种二进制的目标文件,由源代码编译后生成,用于与其他目标文件链接,创建可执行文件或者共享目标文件的代码或数据,任一种多级存储方法,编写源码之后对源代码进行编译,都会生成重定向文件,所述重定向文件可以由提供重定向文件的第三方提供。所述符号可以为源代码中的变量或函数等,在重部署之前可以预先确定待重部署的特定符号,例如提供待重部署的符号对应的符号名。通过所述重定向文件按获取待部署的符号的当前位置信息,可以将已存入电脑硬盘中的重定向文件打开,将所述重定向文件读入内存中,并从所述重定向文件中获取到需要重部署的符号的当前位置信息。
102、根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署。
其中,当所述重定向文件中的符号在生成的程序中没有使用到的时候,或是需要将所述待重部署的符号从当前的存储位置移动到其他存储位置,都可以根据所述待重部署的符号的当前位置信息修改所述待重部署的符号在重定向文件中的存储位置信息,实现对所述待重部署的符号的重部署。
可以理解的是,若在重定向文件中有符号在生成的程序中没有使用到,则可以将所述没有使用到的符号作为待重部署的符号,通过删除所述待重部署的符号实现对所述待重部署的符号的重部署,则在链接之后,所述待重部署的符号就不会被加载到内存中占用内存空间,节约了内存空间。
本发明实施例提供的多级存储的重部署方法,通过解析重定向文件,从重定向文件中获取待重部署的符号的当前位置信息,并根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署。与现有技术中重新修改源代码中符号的归属节区相比,通过解析重定向文件,可直接获取到待重部署的符号的当前位置信息,并且只将需要重部署的符号改变存储位置,对不需要重部署的符号不改变存储位置,不仅能将多级存储的重部署的实施对象粒度到符号级别,而且不需要修改源代码,从而降低了重部署的成本。
本发明的实施例提供另一种多级存储的重部署方法,如图2所示,包括:
201、根据待重部署的符号的符号名,查询所述重定向文件中的符号表,获取所述待重部署的符号的起始地址和符号长度。
其中,所述待重部署的符号名是需要裁剪或改变存储位置的变量或函数的名称,所述待重部署的符号是在编写源代码时定义的。本实施例的重定向文件以可执行链接文件格式(ExecutableandLinkableFormat,ELF)为例说明多级存储的重部署方法。但所述重定向文件不仅限用于ELF文件,对于通用对象文件格式(CommonObjectFileFormat,COFF)及可执行文件格式(PortableExecute,PE)的重定向文件也都可以采用本方法实现多级存储的重部署。
多级存储一般采用如图3(a)所示的方式实现:首先按照软件功能在代码开发平台上生成源代码,如图3(b)所示为按照功能完成的源代码,其中根据功能需要定义了符号,例如图中inta定义了名为a的变量,intfuna()定义了名为funa的函数等。如图3(c)所示为定义节区,图中定义的_attribute_((section(".l1.data")))的作用是将符号放入节区名为l1.data的节区中。再如图3(d)所示符号映射,将符号与节区的关系在源代码中进行映射,图中L1DATAinta表示将变量a放入指定的节区名为l1.data的节区中。将上述所写代码编译成二进制格式的可重定向文件,并如图3(e)所示内存映射,通过修改链接脚本,建立节区与指定内存块的映射关系;最后将可重定向文件与链接脚本通过连接器链接,生成镜像文件。此时,如图3(f)所示,多级存储之后,各个符号都确定了部署的内存位置。
其中,重定向文件的内部组成如图4所示,所述重定向文件中包含文件控制头、节区部分、符号表、节区头部表。每个符号对应符号表中的一个表项,每一个符号表项中包含符号的起始地址、符号长度、符号在其对应节区内的偏移量及符号对应的节区索引号。每个节区对应节区头部表中的一个表项,每一个节区表项中包含节区的起始地址及节区长度。在文件控制头中,也包含每个节区的起始地址。所述根据已知的符号名,查询所述重定向文件中的符号表,例如,假设需要重部署的符号名为a,在符号表中找到待重部署的符号的符号名为a的表项,如图5所示,从所述表项中获取到所述符号a在内存中的起始地址Y和符号a在内存中所占内存空间的长度M。在本发明实施例中,符号的起始地址为符号的起始位置距离文件控制头的偏移量,例如符号a的起始地址Y为符号a的起始位置距离文件控制头的偏移量。
另外,还可以通过所述待重部署的符号的符号名查询所述重定向文件的符号表,获取所述待重部署的符号当前所在节区的节区名为节区A(sectionA)。
202、根据所述待重部署的符号的起始地址和符号长度计算所述待重部署的符号的结束地址。
其中,本发明实施例中所述待重部署的符号的结束地址是待重部署的符号的结束位置距离文件控制头的偏移量,通过所述待重部署的符号的起始地址与所述待重部署的符号所占内存空间长度相加得到。所述待重部署的符号的起始地址与符号所占内存空间长度可以通过步骤201所述的方法获取。
例如,通过步骤201得到待重部署的符号a的起始地址Y和待重部署的符号a的长度M后,将起始地址Y与长度M相加,如图5所示,得到待重部署的符号a的结束地址Z。
203、根据目标内存块名查询链接脚本,获取目标节区名。
其中,所述目标内存块名通常为给出的已知条件,例如,已经确定需要重部署的符号的目标位置具体是内存块中的名为L2TEXTseg的内存块。一个内存块对应一个节区。如图6所示,根据内存块名L2TEXTseg,查询连接脚本,获取所述符号期待部署的目标节区的节区名为节区B(sectionB)。所述链接脚本是已定义的文件,链接脚本中建立了所述节区与指定内存的映射关系,在多级存储中,编写源代码前,对符号与节区的关系在源代码中进行映射,只是在概念上将符号与节区绑定。通过编译源代码,生成重定向文件,为符号分配内存空间,这种内存空间是逻辑上的内存空间,并未将变量放到实际物理内存中,需要通过链接器,将所述重定向文件与所述链接脚本进行链接,生成镜像文件,此时便确定了各个符号部署在内存中的具体位置,这种具体位置是通过节区与内存的映射确定的。
204、根据所述目标节区名查询节区头部表,获取所述目标节区的起始地址和目标节区长度。
其中,所述目标节区名可以通过步骤203所述的方法获取,并且,在所述重定向文件的节区头部表中的与所述目标节区名相对应的节区表项中包括与所述目标节区名相对应的所述目标节区的起始地址和目标节区长度。所述目标节区的起始地址为目标节区起始位置距离所述文件控制头的偏移量。
例如,根据步骤203获取的节区名sectionB,在节区头部表中找到节区名为sectionB对应的节区表项,从sectionB的节区表项中获取到目标节区sectionB的起始地址W和目标节区sectionB在内存中所占内存空间的长度V,具体存储位置如图5所示。。
相应的,根据步骤201所得到的符号当前所在节区的节区名sectionA,也可以通过节区头部表找到节区名为sectionA对应的节区表项,从sectionA的节区表项中获取到所述符号a当前所在节区sectionA的起始地址E,具体存储位置如图5所示。
205、根据所述目标节区的起始地址和目标节区长度,计算所述目标节区的结束地址,作为目标位置信息。
其中,所述目标节区的结束地址为目标节区的结束位置距离文件控制头的偏移量,通过所述目标节区的起始地址与所述目标节区长度相加得到。所述目标节区的起始地址和目标节区长度可以通过步骤204所述的方法获取。
例如,通过步骤204获取目标节区的起始地址W和目标节区在内存中所占内存空间的长度V后,将目标节区的起始地址W与长度V相加,得到所述目标节区的结束地址X,具体存储位置如图5所示。
在本发明实施例中,通过以上步骤201-202确定了所述待重部署的符号的当前位置信息和通过步骤203-205确定了所述待重部署的符号的目标位置信息之后,便可以对重定向文件中的所述待重部署的符号进行重部署了,具体步骤如下:
206、根据所述待重部署的符号的当前位置信息及目标位置信息,将所述待重部署的符号从当前位置移至目标位置。
其中,所述将所述待重部署的符号移至所述目标位置,可以先确定所述目标位置与所述当前位置的相对关系。仍以图5为例,通过步骤201获得待重部署的符号a的起始地址Y,通过步骤204获得所述目标节区sectionB的起始地址W,比较W与Y的大小关系,如果W大于Y,则可判断出所述当前位置在目标位置之后,如果W小于Y,则可判断出所述当前位置在目标位置之前。或者通过步骤204获得所述目标节区sectionB的起始地址W与所述待重部署的符号a当前所在节区sectionA的起始地址E,比较W与E的大小关系,如果W大于E,则也可判断出所述当前位置在目标位置之后,如果W小于E,则也可判断出所述当前位置在目标位置之前。可以理解的是,目标位置与所述当前位置的相对关系,可以通过多种方法获取,本发明实施例对此不做限定。
其中,将所述待部署的符号从当前位置移至目标位置的方法可以为:待重部署的符号的在内存空间的起始地址改成目标节区在内存空间的结束地址,从而将所述待重部署的符号重部署至目标节区的最后位置。例如,如图7所示,假设所述目标位置在所述当前位置之后,将待重部署的符号a所在内存空间起始地址Y改成目标节区sectionB在内存空间中的结束地址X,从而将待重部署的符号a就重部署至目标节区sectionB的最后位置,待重部署的符号a成为部署后的符号a。
207、对关联节区或符号进行重部署。
其中,所述关联节区或符号包括:所述待重部署符号的起始地址与所述目标节区结束地址之间的节区或符号,或者,所述待重部署的符号的结束地址与所述目标节区的结束地址之间的节区或符号。
具体移动为:当所述待重部署的符号的当前位置在目标位置之后时,将所述待重部署符号的起始地址与目标节区结束地址之间的节区或符号向后(向节区头部表方向)移动所述待重部署的符号的符号长度大小;当所述待重部署的符号的当前位置在目标位置之前时,将所述待重部署的符号的结束地址与所述目标节区的结束地址之间的节区或符号向前(向文件控制头方向)移动所述待重部署的符号的符号长度大小。
例如,如图7所示,由于当前位置在目标位置之后,于是将在内存空间中地址X与地址Y之间的符号或节区的依次向后(向节区头部表方向)移动所述待重部署的符号的符号长度大小。所述当前位置与目标位置的相对关系的判断参见步骤206所述,此处不再赘述。
需说明的是,本领域技术人员可以理解,步骤206与步骤207并不是一定要遵循本发明实施例所述顺序,在特定情况下,为了重部署的方便,步骤207也可以在步骤206之前,即先调整关联节区或符号的位置,再调整待重部署的符号的位置。
208、依据重部署后的符号的位置信息及节区的位置信息修改所述重定向文件对应的符号表、节区头部表、文件控制头。
其中,由于重部署符号a后符号a的位置改变,所述重定向文件中重部署后的符号a在符号表中相关信息、目标节区与当前节区在节区头部表中相关信息及所述重定向文件控制头中相关信息都可以对应修改,修改方法如下:
●依据重部署后的符号及节区的位置信息修改符号表:查询符号表,对与符号a的原节区索引号相同的符号(即与符号a原先属于同一节区的符号),对这些符号中在该节区内的偏移量大于符号a在该节区内的偏移量的全部减去符号a在节区内的偏移量;修改符号表中符号a的当前节区索引号为指向所述目标节区的索引号;修改符号表中符号a在当前节区内的偏移量的值为所述目标节区原占有的内存空间大小。
●依据重部署后的符号及节区的位置信息修改节区头部表:修改所述当前节区的控制头中当前节区的长度减去所述符号的长度;修改节区头部表中目标节区控制头中目标节区的长度增加所述符号的长度;查询节区头部表中其他节区的起始地址,判断其他节区是否为关联节区,并相应修改关联节区的起始地址。例如,通过步骤206中所述目标位置与所述当前位置的相对关系,若当前位置在目标位置之后,对于其他节区的起始地址大于等于目标节区的结束地址并且小于符号a的起始地址,将节区头部表中符合条件的符号或节区的起始地址顺次增加符号a的长度M;若当前位置在目标位置之前,对于其他节区的起始地址大于等于符号a的起始地址并且小于目标节区的结束地址,将节区头部表中符合条件的符号或节区的起始地址顺次增加符号a的长度M。
●依据重部署后的符号及节区的位置信息修改文件控制头:查询文件控制头中其他节区的起始地址,通过步骤206中目标位置与当前位置的相对关系,判断其他节区是否为关联节区。若当前位置在目标位置之后,若某节区的起始地址大于等于目标节区的结束地址并且小于符号a起始地址时,将其确定为关联节区,将文件控制头中关联节区(包括关联节区中的关联符号)的起始地址顺次加上符号a的长度M;若当前位置在目标位置之前,若某节区的起始地址大于等于符号a起始地址并且小于目标节区的结束地址,则将其确定为关联节区,将文件控制头中关联节区的起始地址加上所述符号a的长度M。
在本实施例中,修改完所述重定向文件对应的符号表、节区头部表、文件控制头之后,将所述修改过的重定向文件保存,则修改后的信息保存到所述硬盘中,即所述修该信息从内存保存至所述重定向文件中,完成了重定向文件的修改,如图3所示,将所述修改后的重定向文件与所述链接脚本通过链接器链接,则所述待重部署的符号从所述当前位置重部署到了所述目标位置上,重新确定了所部署符号在内存的存储位置。
在本发明实施例的另一种应用场景中,如图8所示,步骤301和302分别与步骤201和步骤202相同,在此不再赘述。
步骤303、新建一个节区。
其中,对于无法确定目标节区位置的场景或者不规定所述符号目标节区位置的场景,可以新建一个节区获得所述目标位置信息。如图10所示,在重定向文件中所有节区的最后,添加一个新的节区,假设新添加的节区名为sectionB,将所述新添加的节区的起始地址与节区大小添加至节区头部表中,增加一个节区头部表项。此时的新添加的节区并没有实际的物理内存空间,要修改所述链接脚本,如图6所示,在链接脚本中添加一条节区规则,建立所述新建节区与内存块的映射关系。所述内存块是通过查看所述链接脚本找到的空闲内存块。
步骤304、并将新建节区的起始地址作为目标位置信息。
其中,将所述新建节区作为所述符号的目标节区,所述新建节区的起始地址作即为目标位置信息。
步骤305至步骤307与步骤206至步骤208分别对应,本领域普通技术人员容易通过步骤206至步骤208获得步骤305至步骤307的实现细节,在此不再赘述。
在本发明的另一种场景应用场景中,如图9所示,若待重部署的符号在生成的程序中没有使用到,则可以将所述待重部署的符号删除,节约内存空间,具体包括:
步骤401、根据所述待重部署的符号的符号名,查询所述重定向文件中的符号表,获取所述待重部署的符号的起始地址和符号长度。
其中,所述待重部署符号的起始地址和符号长度的具体获取方法参考本实施例步骤201所述,此处不再赘述。
步骤402、根据所述待重部署的符号的起始地址和符号长度计算所述待重部署的符号的结束地址。
其中,所述待重部署的符号的结束地址的具体计算方法参考本实施例步骤202所述,此处不再赘述。
另外,还可以通过所述待重部署符号的符号名查询所述重定向文件的符号表,获取所述待重部署的符号当前所在节区的节区名。
需要说明的是,将所述通过步骤201-202获得所述待重部署的符号的起始地址、结束地址及长度作为所述待重部署的符号的当前位置信息。
步骤403、根据所述待重部署的符号的当前位置信息将所述待重部署的符号从当前位置删除。
其中,根据所述待重部署的符号的符号名,找到所述待重部署的符号,并将所述待重部署的符号从内存空间中删除。
步骤404、对关联节区或符号进行重部署。
其中,所述关联节区或符号指与所述待重部署的符号相邻的在所述待重部署符号之前或所述待重部署的符号之后的节区或符号。具体修改方法为:将在内存空间中起始地址大于或等于所述待重部署的符号的结束地址的所有符号及节区的起始地址减去所述待重部署符号的长度。
步骤405、依据重部署后的符号的位置信息及节区的位置信息修改所述重定向文件对应的符号表、节区头部表、文件控制头。
其中,由于待重部署的符号已被删除,所述重定向文件中被删除的符号在符号表中相关信息、节区头部表中相关信息及所述重定向文件控制头中相关信息都可以对应修改,修改方法如下:
查询符号表,修改符号表中与已删除的符号的节区索引号相同的表项中的所有其他符号在节区内的偏移量大于已删除的符号在节区内的偏移量的全部减去已删除符号在节区内的偏移量;删除所述已删除的符号在重定向文件中对应的符号表项。
查询节区头部表,修改节区头部表中已删除的符号所在的节区控制头中当前节区的长度为当前节区长度减去已删除符号的长度;查询节区头部表中起始地址大于已删除符号的结束地址的所有节区的起始地址都顺次减去已删除符号的长度。
查询文件控制头,将文件控制头中起始地址大于已删除符号的结束地址的所有节区的起始地址都顺次减去已删除符号的长度。
本发明实施例提供的多级存储的重部署方法,通过解析重定向文件,从重定向文件中获取待重部署的符号的当前位置信息,并根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署。与现有技术中重新修改源代码中符号的归属节区相比,通过解析重定向文件,可直接获取到待重部署的符号的当前位置信息,并且只将需要重部署的符号改变存储位置,对不需要重部署的符号不改变存储位置,不仅能将多级存储的重部署的实施对象粒度到符号级别,而且不需要修改源代码,从而降低了重部署的成本。
并且,将需要重部署的在生成的程序中会用到的符号添加到目标位置,修改与符号有关的信息,对于链接过程中,内存空间不够而无法链接的场景,可以将所述符号添加至空闲目标位置,完成链接。
本发明实施例还提供一种多级存储的重部署装置,如图11所示,包括:第一获取单元31、重部署单元32。
第一获取单元31,用于从重定向文件中获取待重部署的符号的当前位置信息。
重部署单元32,用于根据所述第一获取单元获取的所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署。
在一种实现方式下,所述当前位置信息包括待重部署的符号的起始地址、结束地址及长度,所述第一获取单元31具体用于:根据所述待重部署的符号的符号名,查询所述重定向文件中的符号表,获取所述待重部署的符号的起始地址和符号长度;根据所述第一获取单元获取的所述待重部署的符号的起始地址和符号长度计算所述待重部署的符号的结束地址,重部署单元32,用于根据所述第一获取单元获取的所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署。
在另一种实现方式下,重部署单元32具体用于:根据所述第一获取单元获取的所述待重部署的符号的当前位置信息将所述待重部署的符号从当前位置删除。
本发明的实施例提供另一种多级存储的重部署装置,如图12所示,该多级存储的重部署装置还可以包括:第二获取单元33。
第二获取单元33,用于对所述待重部署的符号进行重部署之前,获取所述待重部署的符号待部署的目标位置信息。
相应的,重部署单元32具体用于:根据所述第一获取单元获取的所述待重部署的符号的当前位置信息及所述第二获取单元获取的所述目标位置信息,将所述待重部署的符号从当前位置移至目标位置。
进一步的,在一种实现方式下,第二获取单元33具体用于:根据目标内存块名查询链接脚本,获取目标节区名;根据所述目标节区名查询所述重定向文件的节区头部表,获取所述目标节区的起始地址和目标节区长度;根据所述目标节区的起始地址和目标节区长度,计算所述目标节区的结束地址,作为目标位置信息。在另一种实现方式下,第二获取单元33具体用于:新建一个节区;将所述新建模块获取的所述新建节区的起始地址作为目标位置信息。
进一步的,重部署单元32还用于:对关联节区或符号进行重部署,所述关联节区或符号包括:所述待重部署符号的起始地址与所述目标节区的结束地址之间的节区或符号,或者,所述待重部署的符号的结束地址与所述目标节区的结束地址之间的节区或符号。
本发明的实施例提供另一种多级存储的重部署装置,如图13所示,该多级存储装置还包括:修改单元34,用于依据重部署后的符号的位置信息及节区的位置信息修改所述重定向文件中包含的符号表、节区头部表、文件控制头。
在以上装置实施例中,所述重定向文件的格式包括:可执行链接文件格式ELF、通用对象文件格式COFF或可执行文件格式PE。
需要理解的是,本实施例中全部步骤的具体描述可以参考方法实施例中对应的内容,在此不再一一赘述。
本发明实施例提供的多级存储的重部署方法,通过解析重定向文件,从重定向文件中获取待重部署的符号的当前位置信息,并根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署。与现有技术中重新修改源代码中符号的归属节区相比,通过解析重定向文件,可直接获取到待重部署的符号的当前位置信息,并且只将需要重部署的符号改变存储位置,对不需要重部署的符号不改变存储位置,不仅能将多级存储的重部署的实施对象粒度到符号级别,而且不需要修改源代码,从而降低了重部署的成本。
并且,将需要重部署的在生成的程序中会用到的符号添加到目标位置,修改与符号有关的信息,对于链接过程中,内存空间不够而无法链接的场景,可以将所述符号添加至空闲目标位置,完成链接。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (14)

1.一种多级存储的重部署方法,其特征在于,包括:
从重定向文件中获取待重部署的符号的当前位置信息;
根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署;
所述根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署,具体包括:若所述待重部署的符号在生成的程序中没有使用到,则根据所述待重部署的符号的当前位置信息将所述待重部署的符号从当前位置删除;
或者,在对所述待重部署的符号进行重部署之前,所述方法还包括:获取所述待重部署的符号待部署的目标位置信息;
所述根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署,具体包括:根据所述待重部署的符号的当前位置信息及目标位置信息,将所述待重部署的符号从当前位置移至目标位置。
2.根据权利要求1所述的方法,其特征在于,所述当前位置信息包括待重部署的符号的起始地址、结束地址及符号长度,所述从重定向文件中获取待重部署的符号的当前位置信息,具体包括:
根据所述待重部署的符号的符号名,查询所述重定向文件中的符号表,获取所述待重部署的符号的起始地址和符号长度;
根据所述待重部署的符号的起始地址和符号长度计算所述待重部署的符号的结束地址。
3.根据权利要求1所述的方法,其特征在于,所述获取所述待重部署的符号待部署的目标位置信息,具体包括:
根据目标内存块名查询链接脚本,获取目标节区名;
根据所述目标节区名查询所述重定向文件的节区头部表,获取所述目标节区的起始地址和目标节区长度;
根据所述目标节区的起始地址和目标节区长度,计算所述目标节区的结束地址,作为目标位置信息。
4.根据权利要求1所述的方法,其特征在于,所述获取所述待重部署的符号待部署的目标位置信息,包括:
新建一个节区;
并将所述新建的节区的起始地址作为目标位置信息。
5.根据权利要求3所述的方法,其特征在于,在根据所述待重部署的符号的当前位置信息及目标位置信息对所述待重部署的符号进行重部署之后,所述方法还包括:
对关联节区或符号进行重部署,所述关联节区或符号包括:所述待重部署符号的起始地址与所述目标节区的结束地址之间的节区或符号,或者,所述待重部署的符号的结束地址与所述目标节区的结束地址之间的节区或符号。
6.根据权利要求1-5中任一项所述的方法,其特征在于,在根据所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署之后,所述方法还包括:
依据重部署后的符号的位置信息及节区的位置信息修改所述重定向文件中包含的符号表、节区头部表、文件控制头。
7.根据权利要求1-6中任一项所述的方法,其特征在于,所述重定向文件的格式包括:可执行链接文件格式ELF、通用对象文件格式COFF或可执行文件格式PE。
8.一种多级存储的重部署装置,其特征在于,包括:
第一获取单元,用于从重定向文件中获取待重部署的符号的当前位置信息;
重部署单元,用于根据所述第一获取单元获取的所述待重部署的符号的当前位置信息对所述待重部署的符号进行重部署;
其中,所述重部署单元具体用于:在所述待重部署的符号在生成的程序中没有使用到的情况下,根据所述第一获取单元获取的所述待重部署的符号的当前位置信息将所述待重部署的符号从当前位置删除;
或者,所述多级存储的重部署装置还包括:第二获取单元,用于在对所述待重部署的符号进行重部署之前,获取所述待重部署的符号待部署的目标位置信息;所述重部署单元具体用于:根据所述第一获取单元获取的所述待重部署的符号的当前位置信息及所述第二获取单元获取的所述目标位置信息,将所述待重部署的符号从当前位置移至目标位置。
9.根据权利要求8所述的装置,其特征在于,所述当前位置信息包括待重部署的符号的起始地址、结束地址及长度,所述第一获取单元具体用于:根据所述待重部署的符号的符号名,查询所述重定向文件中的符号表,获取所述待重部署的符号的起始地址和符号长度;根据所述第一获取单元获取的所述待重部署的符号的起始地址和符号长度计算所述待重部署的符号的结束地址。
10.根据权利要求8所述的装置,其特征在于,所述第二获取单元具体用于:根据目标内存块名查询链接脚本,获取目标节区名;根据所述目标节区名查询所述重定向文件的节区头部表,获取所述目标节区的起始地址和目标节区长度;根据所述目标节区的起始地址和目标节区长度,计算所述目标节区的结束地址,作为目标位置信息。
11.根据权利要求8所述的装置,其特征在于,所述第二获取单元具体用于:新建一个节区;将所述新建模块获取的所述新建节区的起始地址作为目标位置信息。
12.根据权利要求10所述的装置,其特征在于,所述重部署单元还用于:对关联节区或符号进行重部署,所述关联节区或符号包括:所述待重部署符号的起始地址与所述目标节区的结束地址之间的节区或符号,或者,所述待重部署的符号的结束地址与所述目标节区的结束地址之间的节区或符号。
13.根据权利要求8-12中任一项所述的装置,其特征在于,还包括:
修改单元,用于依据重部署后的符号的位置信息及节区的位置信息修改所述重定向文件中包含的符号表、节区头部表、文件控制头。
14.根据权利要求8-13中任一项所述的装置,其特征在于,所述重定向文件的格式包括以:可执行链接文件格式ELF、通用对象文件格式COFF或可执行文件格式PE。
CN201210268364.9A 2012-07-30 2012-07-30 多级存储的重部署方法及装置 Active CN102831178B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201210268364.9A CN102831178B (zh) 2012-07-30 2012-07-30 多级存储的重部署方法及装置
PCT/CN2013/072953 WO2014019367A1 (zh) 2012-07-30 2013-03-20 多级存储的重部署方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210268364.9A CN102831178B (zh) 2012-07-30 2012-07-30 多级存储的重部署方法及装置

Publications (2)

Publication Number Publication Date
CN102831178A CN102831178A (zh) 2012-12-19
CN102831178B true CN102831178B (zh) 2016-05-25

Family

ID=47334315

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210268364.9A Active CN102831178B (zh) 2012-07-30 2012-07-30 多级存储的重部署方法及装置

Country Status (2)

Country Link
CN (1) CN102831178B (zh)
WO (1) WO2014019367A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102831178B (zh) * 2012-07-30 2016-05-25 华为技术有限公司 多级存储的重部署方法及装置
CN103942078B (zh) * 2014-04-30 2017-11-17 华为技术有限公司 一种加载驱动程序的方法及嵌入式设备
CN105700861A (zh) * 2014-11-27 2016-06-22 迈普通信技术股份有限公司 一种嵌入式程序运行符号表的生成方法及装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101697131A (zh) * 2009-11-04 2010-04-21 中兴通讯股份有限公司 一种可重定位文件动态加载的方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5291601A (en) * 1989-06-01 1994-03-01 Hewlett-Packard Company Shared libraries implemented with linking program loader
CN100489781C (zh) * 2005-03-28 2009-05-20 华为技术有限公司 对目标文件进行定位的方法和装置
KR101281954B1 (ko) * 2006-08-08 2013-07-03 삼성전자주식회사 임베디드 시스템을 위한 점진적 링킹 방법
CN101470619A (zh) * 2007-12-29 2009-07-01 安凯(广州)软件技术有限公司 一种基于微核操作系统的应用程序动态加载方法
CN102831178B (zh) * 2012-07-30 2016-05-25 华为技术有限公司 多级存储的重部署方法及装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101697131A (zh) * 2009-11-04 2010-04-21 中兴通讯股份有限公司 一种可重定位文件动态加载的方法及装置

Also Published As

Publication number Publication date
WO2014019367A1 (zh) 2014-02-06
CN102831178A (zh) 2012-12-19

Similar Documents

Publication Publication Date Title
CN108037946B (zh) 一种应用程序热更新的方法、系统及服务器
US8972960B2 (en) Optimization of an application to reduce local memory usage
CN104809237A (zh) LSM-tree索引的优化方法和装置
CN102831178B (zh) 多级存储的重部署方法及装置
CN103559027A (zh) 一种key与value分开存储的key-value存储系统设计方法
CN104899025A (zh) 一种生成渠道包的方法和装置
US20180268010A1 (en) Computer device for providing tree index
CN105453031A (zh) 指令合并优化
CN104866293A (zh) 一种对Android应用程序扩展功能的方法及装置
CN105264488A (zh) 使用数组对来合并有序列表
CN109783130A (zh) 一种前端项目的打包方法及服务器
CN102446100B (zh) 用于数据类型的类型和长度抽象的系统和方法
US20170168860A1 (en) Dynamically binding data in an application
CN103336812A (zh) 用于提高二次加载效率的网页资源缓存方法及装置
CN103999050A (zh) 用于计算用于在连续分布式构建中有效高速缓存的校验和的方法和装置
CN103514004A (zh) Windows系统下的系统环境管理方法及装置
CN105528183A (zh) 一种存储数据的方法及存储设备
CN112667593B (zh) 一种ETL流程执行hbase快速装载的方法与装置
CN110851434A (zh) 一种数据存储方法、装置及设备
CN104715025A (zh) 用于离线Web应用的数据存储方法和装置
CN105893031A (zh) 一种缓存操作实现方法、业务层方法的调用方法及装置
CN115857914A (zh) 一种自动生成代码的方法、设备和存储介质
Matsuzaki Functional models of hadoop mapreduce with application to scan
Peyret et al. Efficient application mapping on CGRAs based on backward simultaneous scheduling/binding and dynamic graph transformations
CN102867247B (zh) 快速部署文件安全外发的办公自动化系统及方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant