[发明专利]一种程序模块动态装载方法有效
申请号: | 201710585570.5 | 申请日: | 2017-07-18 |
公开(公告)号: | CN107391190B | 公开(公告)日: | 2020-10-13 |
发明(设计)人: | 修志芳;李春强;尚云海;童琪杰;陈林飞 | 申请(专利权)人: | 杭州中天微系统有限公司 |
主分类号: | G06F8/61 | 分类号: | G06F8/61 |
代理公司: | 北京思睿峰知识产权代理有限公司 11396 | 代理人: | 谢建云;赵爱军 |
地址: | 310012 浙江省杭州市*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 程序 模块 动态 装载 方法 | ||
本发明提供一种程序模块动态装载方法,其中包括:步骤一、提供编译系统,用于将程序源码编译生成可动态装载的程序模块,程序模块包括二进制代码段和数据段;步骤二、提供动态装载器,动态装载器包括用于将程序模块安装到程序模块存储空间的安装模块,以及用于在运行时将程序模块装载到运行时数据存储空间的装载模块;步骤三、程序模块的二进制代码段通过运行时数据存储空间中的程序模块数据段基地址映射表计算程序源码中的全局变量地址;步骤四、读写并引用全局变量地址对应的全局变量。本发明能够免除重定位时对存储空间进行备份、擦除、合并写入的操作,提高动态装载的效率。
技术领域
本发明涉及计算机软件技术领域,尤其涉及一种程序模块动态装载方法。
背景技术
动态装载技术能够使得大型程序调用不属于其可执行代码的函数,更新应用于各个模块,而不会影响该程序的其他部分,从而节约应用程序所需的磁盘和内存空间。目前,动态装载技术在PC机上已经有标准化方法,例如Windows平台的动态链接库(DLL)文件装载技术,以及Linux平台的共享库(SO)文件装载技术。通过运行于对应操作系统上的动态装载器,可以识别、装载、运行这些可动态装载的文件。动态装载器通过读取程序模块中的描述信息,为程序模块分配运行内存,将程序装载到内存中,然后读取程序模块中的重定位信息,根据程序模块实际运行地址将程序进行重定位,最终将程序模块运行起来。
但是,在大部分嵌入式系统中,由于其存储资源有限,一般要求程序的代码段和只读数据段存放在例如Flash的只读掉电存储器中直接执行,同时将可读写的数据段拷贝到RAM中。由于数据段只有在程序模块被装载运行时才能确定其地址,要在嵌入式系统中实现程序模块的动态装载,现有技术中通常在程序模块被装载运行时根据数据段地址对代码段相关指令进行重定位修改,这种与数据段地址有关的动态装载机制对代码段数据访问指令的重定位会导致对掉电存储的修改问题,需要低效率的备份、擦除、合并写入的操作;另外,动态装载机制对代码段数据访问指令的重定位需要额外的存储空间来存放程序模块中携带的重定位信息,增加了装载的空间存储成本。
因此,需要寻求一种更为有效的程序模块动态装载方法,用于实现嵌入式系统的动态装载功能。
发明内容
本发明提供的程序模块动态装载方法,能够针对现有技术的不足,实现效率较高、占用空间较小的程序模块动态装载。
本发明提供一种程序模块动态装载方法,其中包括:
步骤一、提供编译系统,用于将程序源码编译生成可动态装载的程序模块,所述程序模块包括二进制代码段和数据段;
步骤二、提供动态装载器,所述动态装载器包括用于将所述程序模块安装到程序模块存储空间的安装模块,以及用于在运行时将所述程序模块装载到运行时数据存储空间的装载模块;
步骤三、所述程序模块的二进制代码段通过所述运行时数据存储空间中的程序模块数据段基地址映射表计算所述程序源码中的全局变量地址;
步骤四、读写并引用所述全局变量地址对应的全局变量。
可选地,上述程序模块存储空间划分为大小相等的存储块,并以存储块大小对齐的方式存放所述程序模块的二进制代码段和数据段。
可选地,上述装载模块在所述运行时数据存储空间中为所述程序模块分配用于存放运行时数据段的运行时数据存储空间。可选地,上述程序模块数据段基地址映射表中的每个表项对应一个程序模块存储空间中的所述存储块以及所述存储块的存储块索引号。
可选地,上述存储块索引号Imodule通过下式
Imodule=(ADDRblock-Bflash)log2(Sblock)
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州中天微系统有限公司,未经杭州中天微系统有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710585570.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:星载软件的在轨编程方法
- 下一篇:一种程序模块动态装载方法