一种linux程序代码加载的方法及装置的制作方法

文档序号:6335179阅读:221来源:国知局
专利名称:一种linux程序代码加载的方法及装置的制作方法
技术领域
本发明属于计算机技术领域,特别涉及一种linux程序代码加载的方法及装置。
背景技术
linux下的软件进程的地址空间主要分为图1所示包括如下的几块内核地址空 间、用户栈地址空间、共享库映射区地址空间、内运行时堆地址空间、可读写的全局数据地 址空间、“只读的代码和数据”地址空间以及保留地址空间,linux下的程序的代码保存在 “只读的代码和数据”段中。在程序启动的时候,操作系统会将可执行文件中的代码全部加 载到“只读的代码和数据”段,然后从程序的入口处(也就是main函数的位置)开始执行。这样做有一个明显的缺点只要linux下的程序做了任何一点修改,就必须关闭 该程序,用新的可执行文件替换旧的可执行文件,然后再启动程序。这样的话会导致服务暂 时中断。对于部署量大的例如cache软件这种服务质量要求高的软件程序来说,中断服务 的问题造成的影响尤为突出。

发明内容
本发明提供一种linux程序代码加载的方法及装置,用以解决现有技术中存在的 修改linux程序就必须重启该程序进而导致服务中断的问题。本发明实施例提供的一种linux程序代码加载的方法包括开始启动linux程序,通过linux操作系统将linux程序中的加载代码加载到地 址空间中;运行地址空间中的加载代码,将linux程序中的其它部分代码加载到地址空间中;linux程序中的其它部分的代码被修改后,对加载代码执行再加载操作,将修改后 的其它部分的代码重新加载到地址空间中。本发明实施例提供的一种linux程序代码加载的装置,包括第一加载模块,用于开始启动linux程序,通过linux操作系统将linux程序中的 加载代码加载到地址空间中;第二加载模块,用于运行地址空间中的加载代码,将linux程序中的其它部分代 码加载到地址空间中;第三加载模块,用于linux程序中的其它部分的代码被修改后,对加载代码执行 再加载操作,将修改后的其它部分的代码重新加载到地址空间中。本发明有益效果如下如果只是修改linux程序中除请求读取部分的代码、请求解析部分的代码、响应 生成部分的代码和加载代码之外的其它部分的代码,不必重启该程序进而避免中断服务。


图1为现有技术中linux下的软件进程的地址空间分配示意图2为本发明第一实施例提供的方法流程图;图3为本发明第一实施例提供的linux下的软件进程的地址空间分配示意图;图4为本发明第二实施例提供的装置结构图。
具体实施例方式为了解决现有技术中存在的linux下的程序做了任何一点修改必须再启动该程 序的问题,本发明的第一实施例提供一种linux程序代码加载的方法,本实施例提供方法 如图2所示包括如下步骤步骤101、开始启动应用程序1。应用程序1是cache软件程序,或其它基于linux下的程序。步骤102、通过linux操作系统仅将应用程序1代码的框架部分代码加载到内存地 址空间的框架段中。框架部分代码(“只读的代码和数据”段中的框架段的代码)包括请求读取部分 的代码、请求解析部分的代码、响应生成部分的代码和加载代码,其中加载代码是必须的, 请求读取部分的代码、请求解析部分的代码、响应生成部分的代码是可选的,地址空间的框 架段是一段预定的内存地址空间,可根据不同的应用需求在全部地址空间中选取,本实施 例不对此进行限定。步骤103、运行框架部分代码中的加载代码,将模块1代码和模块2代码分别加载 到地址空间的模块1段和模块2段中。在本实施例中的模块1代码(“只读的代码和数据”段的模块1段中的代码)和 模块2代码(“只读的代码和数据”段的模块1段中的代码)是,整个的程序代码中(即整 个“只读的代码和数据”段的代码)除框架部分代码之外的所有其它部分的代码。地址空间 的模块1段、地址空间的模块2段和地址空间的框架段一样,是一段预定的内存地址空间, 当然如图3所示模块1段、模块2段和框架段的地址空间彼此不同。本实施例中的模块1 代码和模块2代码是执行应用程序1过程中修改请求的数据时,需要调用部分的代码。模 块1代码和模块2代码在被加载到地址空间之前,需要被编译打包后分别存储于动态链接 库文件1. so文件和2. so文件中,这样在运行加载代码时,加载代码会将1. so文件中的模 块1代码链接到地址空间的模块1段,将2. so文件中的模块2代码链接到地址空间的模块 2段。当然也可以将模块1代码和模块2代码一起编译打包后存储在一个so文件中,加 载代码会将该SO文件中的代码链接到地址空间中。步骤104、对模块1代码进行修改且添加模块3代码后,对加载代码执行reload再 加载操作,加载代码将模块1代码、模块2代码和模块3代码重新加载到地址空间的模块1 段、模块2段和模块3段中。是对模块1代码进行修改且添加模块3代码只是本实施例中是对其它部分的代码 进行修改的一个优选的方案,当然也可以是只对模块1代码进行修改而不添加模块3代码, 或者未对模块1代码和模块2代码进行修改而只是添加模块3代码。无论是上述的那种情 况,都可以视为对其它部分的代码进行修改。与步骤104类似,首先模块3代码被被编译打 包后存储于3. so文件中,在执行reload操作后,加载代码会自动检测所有的.so文件,将1. so文件、2. so文件和3. so文件中的代码分别链接到地址空间的模块1段、模块2段和模 块3段中。由此可见一旦应用程序1需要修改,开发人员可以修改和/或添加相应的模块代 码,并将修改后的代码编译为一个SO文件,然后将这个so文件部署到cache服务器上,对 框架代码执行reload操作,框架代码将同启动时一样,自动检测所有的so文件,并加载执 行其代码,这样就不需要再启动程序,进而造成服务中断。本发明的第二实施例提供一种linux程序代码加载的装置,如图4所示,包括第一加载模块201,用于开始启动linux程序,通过linux操作系统将linux程序 中的请求读取部分的代码、请求解析部分的代码、响应生成部分的代码和加载代码加载到 地址空间中;第二加载模块202,用于运行地址空间中的加载代码,将linux程序中的其它部分 代码加载到地址空间中;第三加载模块203,用于linux程序中的其它部分的代码被修改后,对加载代码执 行再加载操作,将修改后的其它部分的代码重新加载到地址空间中。进一步,第二加载模块202,还用于将linux程序中的其它部分的代码加载到地址 空间中,其它部分代码为执行linux程序过程中修改请求的数据时,需要调用部分的代码。进一步,还包括编译模块204,用于将linux程序中的其它部分的代码编译打包 后存储于动态链接库文件中;第二加载模块202,还用于运行加载代码,将动态链接库文件中的代码链接到地址 空间中。进一步,编译模块204,还用于将多段其它部分的代码编译打包后,对应存储于不 同的动态链接库文件中;第二加载模块202,还用于运行加载代码,将各动态链接库文件中的代码分别链接 到不同的地址空间中。进一步,第三加载模块203,还用于linux程序中的其它部分的代码被修改后,对 加载代码执行再加载操作,加载代码检测当前所有动态链接库文件,将当前所有动态链接 库文件中的代码分别链接到不同的独立地址空间中,当前所有动态链接库文件中的代码包 括,原有动态链接库文件中修改后的代码,和/或新增动态链接库文件中的代码。第一加载模块201,还用于通过1 inux操作系统将1 inux程序中的请求读取部分的 代码、请求解析部分的代码、响应生成部分的代码和加载代码加载到地址空间中。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精 神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围 之内,则本发明也意图包含这些改动和变型在内。
权利要求
一种linux程序代码加载的方法,其特征在于,包括开始启动linux程序,通过linux操作系统将linux程序中的加载代码加载到地址空间中;运行地址空间中的加载代码,将linux程序中的其它部分代码加载到地址空间中;linux程序中的其它部分的代码被修改后,对加载代码执行再加载操作,将修改后的其它部分的代码重新加载到地址空间中。
2.如权利要求1所述的方法,其特征在于,将linux程序中的其它部分的代码加载到地 址空间中具体为将linux程序中的其它部分的代码加载到地址空间中,其它部分代码为执行linux程 序过程中修改请求的数据时,需要调用部分的代码。
3.如权利要求1所述的方法,其特征在于,将linux程序中的其它部分的代码加载到地 址空间中之前还包括将linux程序中的其它部分的代码编译打包后存储于动态链接库文件中; 将linux程序中的其它部分的代码加载到地址空间中具体为 运行加载代码,将动态链接库文件中的代码链接到地址空间中。
4.如权利要求3所述的方法,其特征在于,将linux程序中的其它部分的代码编译打包 后存储于动态链接库文件中具体为将多段其它部分的代码编译打包后,对应存储于不同的动态链接库文件中; 将动态链接库文件中的代码链接到地址空间中具体为 运行加载代码,将各动态链接库文件中的代码分别链接到不同的地址空间中。
5.如权利要求4所述的方法,其特征在于,linux程序中的其它部分的代码被修改后, 对加载代码执行再加载操作,将修改后的其它部分的代码重新加载到地址空间中具体为linux程序中的其它部分的代码被修改后,对加载代码执行再加载操作,加载代码检测 当前所有动态链接库文件,将当前所有动态链接库文件中的代码分别链接到不同的独立地 址空间中,当前所有动态链接库文件中的代码包括,原有动态链接库文件中修改后的代码, 和/或新增动态链接库文件中的代码。
6.如权利要求1所述的方法,其特征在于,通过linux操作系统将linux程序中的加载 代码加载到地址空间中具体为通过linux操作系统将linux程序中的请求读取部分的代码、请求解析部分的代码、响 应生成部分的代码和加载代码加载到地址空间中。
7.—种linux程序代码加载的装置,其特征在于,包括第一加载模块,用于开始启动linux程序,通过linux操作系统将linux程序中的加载 代码加载到地址空间中;第二加载模块,用于运行地址空间中的加载代码,将linux程序中的其它部分代码加 载到地址空间中;第三加载模块,用于linux程序中的其它部分的代码被修改后,对加载代码执行再加 载操作,将修改后的其它部分的代码重新加载到地址空间中。
8.如权利要求7所述的装置,其特征在于,第二加载模块,还用于将linux程序中的其 它部分的代码加载到地址空间中,其它部分代码为执行linux程序过程中修改请求的数据时,需要调用部分的代码。
9.如权利要求7所述的装置,其特征在于,还包括编译模块,用于将linux程序中的 其它部分的代码编译打包后存储于动态链接库文件中;第二加载模块,还用于运行加载代码,将动态链接库文件中的代码链接到地址空间中。
10.如权利要求8所述的装置,其特征在于,编译模块,还用于将多段其它部分的代码 编译打包后,对应存储于不同的动态链接库文件中;第二加载模块,还用于运行加载代码,将各动态链接库文件中的代码分别链接到不同 的地址空间中。
11.如权利要求9所述的装置,其特征在于,第三加载模块,还用于linux程序中的其它 部分的代码被修改后,对加载代码执行再加载操作,加载代码检测当前所有动态链接库文 件,将当前所有动态链接库文件中的代码分别链接到不同的独立地址空间中,当前所有动 态链接库文件中的代码包括,原有动态链接库文件中修改后的代码,和/或新增动态链接 库文件中的代码。
12.如权利要求7所述的装置,其特征在于,第一加载模块,还用于通过linux操作系统 将linux程序中的请求读取部分的代码、请求解析部分的代码、响应生成部分的代码和加 载代码加载到地址空间中。
全文摘要
本发明公开了一种linux程序代码加载的方法及装置,用以解决现有技术中存在的修改linux程序就必须重启该程序进而导致服务中断的问题,该方法包括开始启动linux程序,通过linux操作系统仅将linux程序代码的加载代码加载到地址空间中,运行加载代码,将其它部分的代码加载到地址空间中,其它部分的代码被修改后,对加载代码执行再加载操作,将修改后的其它部分的代码重新加载到地址空间中,当只是修改linux程序中其它部分的代码时,不必重启该程序进而避免中断服务。
文档编号G06F9/445GK101984408SQ201010531328
公开日2011年3月9日 申请日期2010年11月3日 优先权日2010年11月3日
发明者刘研, 周东树, 张蕴锋, 斯文, 栗伟, 田江波, 钟东, 黄勇, 黄超生 申请人:蓝汛网络科技(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1