一种嵌入式系统内存动态分配方法及装置的制作方法

文档序号:6582476阅读:198来源:国知局
专利名称:一种嵌入式系统内存动态分配方法及装置的制作方法
技术领域
本发明涉及嵌入式技术领域,具体描述了具有BOOTLOAD以 及需加载的映4象的嵌入式系统,在映像里的内存一种动态分配方法。
背景技术
嵌入式系统中,由于操作系统提供的内存管理模块往往功能比 较单一,这时候用户往往开发自己的内存管理模块,增加定位诊断 信息,乂人系统资源利用率来i兌,因为应用禾呈序基本上都是用户所编 写的,所以这时往往除了操作系统所需要的基本内存外,其余都是 划分《会用户管理的。而由于用户的代/马以及全局变量的不确定寸生, 对于操作系统与用户管理内存的分界线不好确定,给用户管理的内 存太多的话,由于代码量与全局变量资源变大后导致操作系统内存 资源不够,^^而不能启动,经常需要测试手动^f务改,并且对于一个 开发新手来i兌,往往不知原因,而内核部分往往是不能调试的,需 耗费时间和精力添加打印来诊断,并且修改正常后,还是不能防止 这类问题以后再发生,而如果给操作系统内存太大,则给用户的内 存会少,会限制应用程序的开发,影响系统功能的实现。

发明内容
有鉴于此,本发明的主要目的在于提出一种内存自适应的映像 内存动态分配方法,使得通过BOOTLOADER加载到映像片反本后,所需库毛费内存,然后传递 给映^f象版本,从而可以确定才乘作系统所需内存与用户内存的分界点。
本发明4是出了一种嵌入式系统内存动态分配方法,包4舌以下步
骤确定嵌入式系统的操作系统所消耗的内存大小;将操作系统所 消耗的内存大小和一个预定值相加;将相加的值赋给用于动态分配 所述嵌入式系统内存的分界值变量;以分界值变量的值作为操作系 统内存和用户内存的分界来初始化操作系统及用户程序。
其中,确定嵌入式系统的操作系统所消耗的内存大小具体包括 确定映像版本中的代码段、数据段和以符号开始的块BSS段所消耗 的内存大小;确定嵌入式系统初始化文件系统、4壬务管理、消息管 理、内存管理和设备管理所消耗的内存大小;将上述两项相力口,从 而得出所述嵌入式系统的操作系统所消耗的内存大小。
其中,如果嵌入式系统具有内存管理单元MMU,则在确定映 像版本中的代码段、数据段和BSS段所消耗的内存大小的步骤之前, 还包括获取嵌入式系统的物理内存大小;根据所获取的系统物理 内存大小确定MMU表所占的内存;另外,在将相加的值赋给映像 版本中的分界值变量的步骤中,还将所述相加的值加上MMU表所 占的内存来赋《合映^象版本中的分界值变量。
其中,嵌入式系统的物理内存可以是固定形式的,也可以是可 插拔的内存条。
其中,在将相加的值赋给所述映像版本中的分界值变量的步骤 中,具体包括将相加的值存储在引导装载器操作系统管理之外的 内存位置;运行映像版本程序;从内存位置获取存储的相加的值, 并将相加的值赋给映像版本中的分界值变量。其中,在确定映像版本中的代码段、数据段和BSS段所消耗的 内存大小的步骤之前,还包括以下步骤将映像版本加载到内存中, 其中加载的方法包括网络加载、串口力口载、和FLASH加载。
其中,确定嵌入式系统初始化文件系统、任务管理、消息管理、 内存管理和设备管理所消耗的内存大小是通过编译测试版本测试、 用户估计、和打4庄全局相加中^f壬一种方式来完成的。
本发明还提出了一种嵌入式系统内存动态分配装置,包括确 定模块,嵌入式系统的操作系统所消耗的内存大小;计算模块,将 才乘作系统所消库毛的内存大小和一个预定^直相力口;贝武^直才莫块,a夺相加 的值赋给用于动态分配所述嵌入式系统内存的分界值变量;初始化 模块,以分界值变量的值作为操作系统内存和用户内存的分界来初 始化才喿作系统及用户程序。
其中,还包括确定模块确定映像版本中的代码段、数据段 和以符号开始的块BSS段所消耗的内存大小;确定嵌入式系统初始 化文件系统、任务管理、消息管理、内存管理和设备管理所消耗的 内存大小;计算模块将上述两项相加,从而得出嵌入式系统的操 作系统所消库毛的内存大小。
其中,如果嵌入式系统具有MMU,则装置还包括获取模块, 获耳又所述嵌入式系统的物理内存大小;确定才莫块才艮据所获耳又的系统 物理内存大小确定MMU表所占的内存;以及计算模块将相加的值 与MMU表所占的内存相力口 。
由以上的4支术方案可见,本发明l是出了一种嵌入式系统中动态 分配映像版本内存分布的方法,能够有效的动态适应代码、数据段 的扩展而不影响版本的正常运行,并能提高系统用户程序可用内存 利用率。附图"^兑明
此处所说明的附图用来提供对本发明的进一步理解,构成本申
请的一部分,本发明的示意性实施例及其il明用于解释本发明,并 不构成对本发明的不当限定。在附图中


图1为本发明的映^象的内存分布示意图; 图2为系统内存动态分配自适应流程图3为根据本发明的装置。
具体实施例方式
本发明的4支术方案如下
1. BOOTLOADER初始化内存硬件,动态获得系统物理内存 的实际大小。
2. 加载版本映像到内存里面。
3. 确定映像版本里代码段、数据段、BSS段的所消耗内存。
4. 如果系统是具有MMU管理的功能,才艮才居物理内存确定出 MMU表的所占内存,如果没有,则所占内存为零。
5. 才喿作系统内核初始化其余功能所消库毛内存(因为BSP功能 相对稳定,可以通过编i奪一个测试版本测定,这个不需在程序里完 成)。
6. 3、4、 5里面的内存总^_就是4乘作系统所需^>费的最小内存。7. 将6步的内存再添个估测余量,可根据各系统自己的经-睑值。
8. 将7步得到的操作系统所耗费的内存量存入一个未被才喿作系 统管理内存的位置(比如可存BOOTLOADER的操作系统管理内存 之上)。
9. 运行映像版本程序。
10. 从8步骤存储的位置获得7步骤存入的数据,赋给映^^版 本里的分界值变量。
11. 映傳_版本以该分界值变量为边界分别初始化才喿作系统以及 应用考呈序。
上述步骤1中的内存可以是固定形式的,也可以是可插拔的内 存条。
上述步骤2中的BOOTLOADER加载映像版本的方法可以有多 种方式,包4舌^f旦不P艮于网纟各力口载、串口力口载、FLASH力口载等。
上述步骤3中映像版本文件格式可以是多种方式,包括但不限 于ELF格式、AOUT格式、COFF格式等。
在上述步骤4中的MMU只是可选的CPU可具有的功能,不一
定都需要。
上述步骤5中获得操作系统所需其余内存的方法也可以是多 种,包括4旦不限于编i奪测试版本测试;自己估测;打桩全局相力口等。
上述步骤7估测余量可结合各系统实际情况来提供。上述步骤8的存储分界线大小的位置只要是不,皮 BOOTLOADER揭:作系纟充管5里到#尤可以。
另外,文中的嵌入式才喿作系统包括^旦不限于vxWorks、 pSos、 Linux等。
下面结合附图和具体实施方式
对本发明作进 一 步的说明。 如图2所示,自适应分配内存范围包含以下具体实施步^^: 步骤IOI, BOOT LOADER 4刀始^f匕内存。 步-骤102,获得实际物理内存大小。 步骤103,加载版本映像到内存里面。
步骤104,确定版本映像中的代码段、数据段、BSS段的位置 及长度。
步骤105,确定出MMU表所占内存及BOOT系统初始4匕的其
余内存,包括嵌入式系统初始化文件系统、任务管理、消息管理、 内存管理和设备管理所消耗的内存大小。
步骤106,统计步骤104与步骤105以及自定义冗余量的总值。
步骤107,将步骤106得到的数据存入BOOT LOADER才乘
作系统管理外的内存处。
步骤108,运行版本映像程序,将CPU控制权交由版本控制。 步骤109,从107步内存位置读出内存分界值,赋给分界值变量。步骤110,映像版本以分界值变量的值作为边界范围,初始化
才喿4乍系统以及用户#呈序。
在某分布式的系统中,应用了本发明方法作测试代码验i正。
主控与线卡分别应用上本发明方法,操作系统是vxWorks,主控 的CPU是PPC750FX或PPC8540,线卡的CPU是PPC8270或 PPC8347。可以动态的一艮据程序的代码和全局变量,合适的调整梯: 作系统与用户程序管理内存的范围,l是高了系统内存的利用率以及 自适应性。
另外,本发明还提出了一种嵌入式系统内存动态分配装置,包 括确定模块,嵌入式系统的操作系统所消耗的内存大小;计算模 块,将操作系统所消耗的内存大小和一个预定值相加;赋值才莫块, 将相加的值赋给用于动态分配所述嵌入式系统内存的分界值变量; 初始化模块,以分界值变量的值作为操作系统内存和用户内存的分 界来初始4U喿作系统及用户程序。
其中,确定模块确定映像版本中的代码段、数据段和以符号 开始的块BSS段所消耗的内存大小;确定嵌入式系统初始化文件系 统、任务管理、消息管理、内存管理和设备管理所消耗的内存大小; 计算模块将上述两项相加,从而得出嵌入式系统的操作系统所消 ^^的内存大小。
如果嵌入式系统具有MMU,则装置还包4舌获取才莫块,获取 所述嵌入式系统的物理内存大小;确定才莫块才艮据所获耳又的系统物理 内存大小确定MMU表所占的内存;以及计算才莫块将相加的值与 MMU表所占的内存相力口 。本发明提出了 一种嵌入式系统中动态分配映像版本内存分布的 方法,能够有效的动态适应代码、数据段的扩展而不影响版本的正 常运行,并能提高系统用户程序可用内存利用率。
本领域的技术人员应该明白,上述的本发明的各模块或各步骤 可以用通用的计算装置来实现,它们可以集中在单个的计算装置上, 或者分布在多个计算装置所组成的网全各上,可选地,它们可以用计 算装置可执行的程序代码来实现,从而,可以将它们存储在存储装 置中由计算装置来执行,或者将它们分别制作成各个集成电鴻4莫块, 或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。 这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明, 对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在 本发明的精神和原则之内,所作的任何修改、等同替换、改进等, 均应包含在本发明的保护范围之内。
权利要求
1.一种嵌入式系统内存动态分配方法,其特征在于,所述方法包括以下步骤确定所述嵌入式系统的操作系统所消耗的内存大小;将所述操作系统所消耗的内存大小和一个预定值相加;将所述相加的值赋给用于动态分配所述嵌入式系统内存的分界值变量;以所述分界值变量的值作为操作系统内存和用户内存的分界来初始化操作系统及用户程序。
2. 根据权利要求1所述的方法,其特征在于,确定所述嵌入式系 统的才乘作系统所消耗的内存大小具体包括确定映像版本中的代码,殳、数据段和以符号开始的块BSS 段所消耗的内存大小;确定所述嵌入式系统初始化文件系统、4壬务管理、消息管 理、内存管理和设备管理所消耗的内存大小;S夺上述两项相加,乂人而得出所述嵌入式系统的才喿作系统所 消耗的内存大小。
3. 根据权利要求2所述的方法,其特征在于,如果所述嵌入式系 统具有内存管理单元MMU,则在确定映像版本中的代码段、 数据段和BSS段所消耗的内存大小的步骤之前,还包括获耳又所述嵌入式系统的物理内存大小;才艮据所获:f又的系统物理内存大小确定MMU表所占的内存;另外,在将所述相加的值赋给所述映像版本中的分界值变量的步-银中,还将所述相加的^f直加上所述MMU表所占的内存 来赋给所述映傳_版本中的分界值变量。
4. 根据权利要求3所述的方法,其特征在于,所述嵌入式系统的 物理内存可以是固定形式的,也可以是可插拔的内存条。
5. 根据权利要求2所述的方法,其特征在于,在将所述相加的值 赋给所述映像版本中的分界值变量的步骤中,具体包括将所述相加的值存储在引导装载器操作系统管理之外的 内存位置;运4亍所述映<象; 反本程序;从所述内存位置获取存储的所述相加的值,并将所述相加 的值赋给所述映像版本中的分界值变量。
6. 根据权利要求2所述的方法,其特征在于,在确定映4象版本中 的代码段、数据段和BSS段所消耗的内存大小的步骤之前, 还包4舌以下步骤将所述映傳j反本加载到内存中,其中所述加载的方法包 4舌网纟各力口载、串口力口载、禾口 FLASH力口载。
7. 根据权利要求2所述的方法,其特征在于,确定所述嵌入式系 统初始化文件系统、任务管理、消息管理、内存管理和"i殳备管 理所消寿毛的内存大小是通过编i奪测试片反本测试、用户估计、和 打桩全局相加中4壬一种方式来完成的。
8. —种嵌入式系统内存动态分配装置,其特4正在于,包括确定模块,确定所述嵌入式系统的操作系统所消耗的内存 大小;计算才莫块,将所述操作系统所消耗的内存大小和一个预定^f直才目力口;赋值模块,将所述相加的值赋给用于动态分配所述嵌入式 系统内存的分界值变量;初始化才莫块,以所述分界值变量的4直作为才喿作系统内存和 用户内存的分界来初始化才喿作系统及用户程序。
9. 根据权利要求8所述的装置,其特征在于,还包括所述确定纟莫块确定映〗象版本中的代码,殳、H据,史和以符号开始的 块BSS 4殳所消耗的内存大小;确定所述嵌入式系统初始化文件系统、《壬务管理、 消息管理、内存管理和设备管理所消耗的内存大小;所述计算模块将上述两项相加,乂人而得出所述嵌入式系统的4喿作 系统所消耗的内存大小。
10. 根据权利要求9所述的装置,其特征在于,如果所述嵌入式系 统具有MMU,则所述装置还包括获取才莫块,获取所述嵌入式系统的物理内存大小;所述确定才莫块才艮据所获取的系统物理内存大小确定 MMU表所占的内存;以及所述计算模块将所述相加的值与所述MMU表所占的内 #才目力口。
全文摘要
本发明提供了一种嵌入式系统内存动态分配方法,包括确定所述嵌入式系统的操作系统所消耗的内存大小;将所述操作系统所消耗的内存大小和一个预定值相加;将所述相加的值赋给用于动态分配所述嵌入式系统内存的分界值变量;以所述分界值变量的值作为操作系统内存和用户内存的分界来初始化操作系统及用户程序。应用该方法能够有效的动态适应代码、数据段的扩展而不影响版本的正常运行,并能提高系统用户程序可用内存利用率。
文档编号G06F12/08GK101661436SQ20091020409
公开日2010年3月3日 申请日期2009年9月30日 优先权日2009年9月30日
发明者周玉辉, 李仁杰, 陈惠林 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1