嵌入式系统的内存管理方法及装置的制作方法

文档序号:6460211阅读:163来源:国知局
专利名称:嵌入式系统的内存管理方法及装置的制作方法
200810056741.6说明书第2/10页这个问题,但是同时存在目标机器必须安装虚拟机软件,启动时间长, 对机器性能要求高等缺点。发明内容本发明的目的是提供一种利用移动存储设备在计算机上重现用 户配制环境的方法,能够将与用户个性化配置环境相关的配置信息提 取出来并存放于移动存储设备上,在目标计算机上把对这些配置信息 的操作重定向到移动存储设备上,从而重现用户自己的个性化配置环 境。本发明的技术方案是利用移动存储设备在计算机上重现用户配 制环境的方法,其特征在于包括以下步骤—-提取用户的个性化配置环境相关信息即私有配置信息,存储 于移动存储设备上;—-对存储在移动设备上的私有配置信息进行初始化,它包括根据移动存储设备的盘符重新设置用户环境变量;根据移动存储 设备的盘符修改私有配置信息中与盘符相关的信息项;一-使用预置的包裹程序将目标应用程序的注册表操作进行包 裹,即在目标程序执行文件中插入代码,以重写所要包裹的注册表系 统调用在执行文件中的入口;_一检测应用程序是否访问配制信息,当检测到应用程序访问配 置信息时进行如下步骤若为读操作,包括打开、查询、枚举,先判断读的信息是否存在 于私有配置信息中,如果是,则读取私有配置信息中的内容;否则读 取计算机中配置信息的内容;若为写操作若为修改包括增加操作,则无论操作的对象存不存 在于私有配置信息中,都操作私有配置信息;若为删除操作,则无论 操作的对象存不存在于私有配置信息中,都操作私有配置信息,并增 加判断标志表明该操作对象已被删除;一-当检测到应用程序没有访问配置信息时继续检测;若应用程 序退出,保存用户的个性化配置信息。本发明的效果是目前,便携式移动存储设备(如移动硬盘,U 盘)的使用越来越广泛,同时,越来越多的数码设备(如手机,MP3,4置,以解决嵌入式系统中的内存碎片问题,保证应用程序的需求,同时避免应 用程序内存泄漏引起内存不足。为了实现上述目的,本发明提供了一种嵌入式系统的内存管理方法,用于 为应用程序分配内存,包括步骤一,将内存划分成多个存储容量不等的大内存区;步骤二,当一应用程序开始运行时,为所述应用程序分配一与所述应用程 序的最大内存需求值相匹配的大内存区;步骤三,利用堆方式在所述匹配的大内存区中,为所述应用程序分配一小 内存;步骤四,所述应用程序利用堆方式释放所述小内存时,将所述小内存与其 相邻且空闲的小内存进行合并,所述应用程序运行结束时释放所述匹配的大内 存区。步骤一还包括:所述大内存区的个数取决于所述嵌入式系统的应用程序的 最大并发数。步骤一还包括根据各个应用程序所需的最大内存需求值,确定各个大内 存区的大小。步骤二进一步包括设置一链表,指向所述匹配的大内存区,用以记录所 述匹配的大内存区中的每个小内存的大小以及标志每个小内存的状态是否空 闲。步骤二进一步包括标记所述匹配的大内存区为被占用,且记录所述应用 程序与所述匹配的大内存区的对应关系。步骤三进一步包括在所述小内存中截取实际需要的内存大小,利用所述 链表的一链表项记录所述小内存的大小以及状态为被使用,生成另一链表项记 录所述小内存中剩余的连续空闲部分的大小,且标记为空闲。步骤四进一步包括将所释放的小内存的链表项中的状态修改为空闲,判 断与该链表项相邻的链表项的状态是否为空闲,如果是,将两个链表项的小内 存的大小相加,删除其中一链表项。本发明还公开了一种嵌入式系统的内存管理装置,用于为应用程序分配内 存,包括一大内存区划分模块,用于将内存划分成多个存储容量不等的大内存区;一大内存区分配模块,用于当一应用程序开始运行时,为所述应用程序分 配一与所述应用程序的最大内存需求值相匹配的大内存区;一小内存分配模块,利用堆方式在所述匹配的大内存区中,为所述应用程 序分配一小内存;一内存合并回收模块,用于当所述应用程序利用堆方式释放所述小内存 时,将所述小内存与所释放的小内存相邻且空闲的小内存进行合并,以及在所 述应用程序运行结束时,回收所述应用程序释放的所述匹配的大内存区。所述大内存区的个数取决于所述嵌入式系统的应用程序的最大并发数,各 个大内存区的大小是根据各个应用程序所需的最大内存需求值确定的。所述的装置,还包括一链表生成模块,用于生成一链表,利用链表项记录 所述匹配的大内存区中每个小内存的大小以及是否被使用。本发明的效果在于,避免了大量的内存碎片,加快了内存碎片整理工作的 速度。避免了内存池方式中需要统计每个应用程序的每块需要动态分配内存的 大小、个数。即使应用程序存在少量内存泄漏,随着应用程序生命周期自动消 失,对系统运行不造成影响。另外,由于内存分区考虑到应用程序对内存数量 的需求的极值,保证了应用程序在峰值输入的情况下,都可以申请得到任何大 小的内存资源。


图1所示为本发明的嵌入式系统结构示意图; 图2所示为本发明的内存管理流程图。
具体实施方式
以下配合实施例以及附图,详细描述本发明的技术特征。 在本发明中,为了更好的解决内存碎片的问题,满足应用程序的内存需求, 避免内存泄露导致的内存不足,本发明提出了一种新的内存管理方法。把系统 的整个堆内存划出少量几个大小不等的大内存区(A、 B……Z),在应用程序实际运行前申请到某一大内存区后,再用堆方式来申请、释放应用程序中所需要 的各个小块内存,释放的过程中进行前后紧靠的空闲内存的合并整理,应用程 序退出时释放整个大内存区。请参阅图1所示为本发明的嵌入式系统结构示意图。嵌入式系统100包括内存管理模块101以及内存102。其他现有技术中的 必要模块暂不赘述。内存管理模块101对内存102进行统一管理,利用链表管理每个大内存区 中可分配的动态内存,实现内存的分配与回收。其中,该内存管理模块101进一步包括一大内存区划分模块11、 一大内 存区分配模块12、 一小内存分配模块13、 一内存合并回收模块14、 一链表生 成模块15。在系统运行前,需利用大内存区划分模块11,对整个堆内存进行统一规 划,把内存102划分成N个存储容量不等的大内存区。大内存区的个数N取决 于嵌入式系统应用程序的最大并发数,例如,N等于或者大于最大并发数。同 时,根据各个应用程序的峰值性能指标,特别是各个应用程序所需的最大内存 需求值,确定各个大内存区的大小。即,每个大内存区都对应于一个应用程序, 每个大内存区等于或大于该应用程序的最大内存需求值。大内存区分配模块12用于当一应用程序开始运行时,根据所述应用程序 的最大内存需求值,为所述应用程序分配一匹配的大内存区;小内存分配模块13用于根据所述应用程序实际需要的内存大小,在所述 匹配的大内存区中,为所述应用程序分配一小内存;内存合并回收模块14用于当所述应用程序释放所述小内存时,将所述小 内存与所释放的小内存相邻且空闲的小内存进行合并,以及在所述应用程序运 行结束时,回收所述应用程序释放的所述匹配的大内存区。链表生成模块15用于生成一链表,利用链表项记录该匹配的大内存区中 每个小内存的信息,包括小内存的大小以及是否被使用,各个链表项连接在一 起。请参阅图2所示为本发明的内存管理流程图,以下将根据图2详细说明本 发明的操作过程。步骤201, 一应用程序开始运行时,首先向该内存管理模块101发出大内 存区请求,该请求中包括该应用程序所需的最大内存M以及该应用程序的标识符S;随着应用程序的多个进程的顺序执行,该应用程序在运行过程中所需要的内存可具有一取值范围,可通过预先估计或者程序设定,获得该最大内存M;步骤202,内存管理模块101的大内存区分配模块12根据最大内存M,在 N个大内存区中寻找一内存大小最为匹配且为空闲的大内存区A,找到后,标 识该大内存区A为被使用,并记录大内存区A与应用程序S的对应关系; 如果没有找到,说明已达到系统应用程序的最大并发数,返回失败; 步骤203,利用链表生成模块15生成并初始化一链表,指向该空闲的大 内存区A;该链表可以以单向链表或双向链表实现,以下以双向链表为例进行说明。 初始化时,只包括一个双向链表头结点,其指针指向该大内存区A的起点,代 表该整个大内存区A皆为空闲状态;事实上,在后续的对大内存区的进一步分配、释放的过程中,会将大内存 区划分为多个小内存,每个小内存皆由双向链表管理并与一个链表项对应。每 个链表项包括两个指针域,分别指向当前动态内存的前后动态内存,还包括一 个数据域,具有一是否占用标志,用于标示当前动态内存是被占用或是空闲,以及当前小内存的大小;步骤204,应用程序S将根据运行需求向内存管理模块101发出小内存请求;该请求中包括应用程序的标识符S以及请求分配的小内存大小X;步骤205,内存管理模块101的小内存分配模块13根据应用程序的标识 符S找到与之对应的大内存区A,遍历双向链表,寻找大于X且空闲的小内存 对应的链表项;步骤206,如果找到,在该链表项对应的小内存中截取一X大小的小内存 供该应用程序S使用,剩余的空闲部分由一新生成的链表项进行记录,并挂接 在该链表中,并返回该新分配的空闲的内存指针,如果没找到,返回失败;其中,被截取的该小内存对应的链表项被标志为被占用,右指针指向剩余 的空闲部分的首地址,内存大小为X,该新生成的链表项的左指针指向被截取 的X大小的内存段的末尾地址,标志为空闲,右指针保持不变,仍指向未截取 前的该动态内存的末尾地址;如果应用程序S不断申请小内存,则小内存分配模块13依照该步骤204 —206不断寻找标志为空闲的链表项,在进行分配后,不断扩展该双向链表;步骤207,当应用程序S需要释放该小内存时,将发出一释放请求,其中 包括应用程序的标识符S以及指向要求释放的小内存的指针;步骤208,内存管理模块101的内存合并回收模块14根据该标识符S找 到大内存区A,根据该要求释放的小内存的指针定位该链表项,释放该链表项 对应的小内存,将该链表项的是否占用标志修改为空闲以进行回收;步骤209,内存合并回收模块14检查与刚释放的小内存紧邻的前后小内 存是否也为空闲,如果是,将相连并且空闲的动态内存合并,并删除其中一链 表项,如果不是,继续执行步骤210;其中,如果是,将相连的两个链表项的小内存大小相加并删除其中一链表项。步骤210,应用程序S结束运行,则向该内存管理模块101释放该大内存 区A,内存合并回收模块14清除该大内存区A的被使用的标识及对应的应用 程序标识。无论应用程序S是否释放所有的动态内存,该大内存区A作为下次应用程 序的连续的空内存区堆栈使用,内存管理模块101将依照图2所述步骤,查找 空闲的动态内存进行分配。本发明的有益效果是1、 本发明中应用程序退出时,将释放连续的相当自动碎片整理过的内存 区,避免了大量的内存碎片。2、 本发明对内存进行了分区,使得应用程序运行中必须进行的内存碎片 整理工作的速度得以加快。3、 避免了内存池方式中需要统计每个应用程序的每块需要动态分配内存 的大小、个数。4、 即使应用程序存在少量内存泄漏,随着应用程序生命周期自动消失, 对系统运行不造成影响。5、 由于内存分区考虑到应用程序对内存数量的需求的极值,保证了应用 程序在峰值输入的情况下,都可以申请得到任何大小的内存资源。当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情 况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但 这些相应的改变和变形都应属于本发明所附的权力要求的保护范围。
权利要求
1、一种嵌入式系统的内存管理方法,用于为应用程序分配内存,其特征在于,包括步骤一,将内存划分成多个存储容量不等的大内存区;步骤二,当一应用程序开始运行时,为所述应用程序分配一与所述应用程序的最大内存需求值相匹配的大内存区;步骤三,利用堆方式在所述匹配的大内存区中,为所述应用程序分配一小内存;步骤四,所述应用程序利用堆方式释放所述小内存时,将所述小内存与其相邻且空闲的小内存进行合并,所述应用程序运行结束时释放所述匹配的大内存区。
2、 如权利要求1所述的方法,其特征在于,步骤一还包括 所述大内存区的个数取决于所述嵌入式系统的应用程序的最大并发数。
3、 如权利要求2所述的方法,其特征在于,步骤一还包括根据各个应用程序所需的最大内存需求值,确定各个大内存区的大小。
4、 如权利要求1所述的方法,其特征在于,歩骤二进一步包括.-设置一链表,指向所述匹配的大内存区,用以记录所述匹配的大内存区中 的每个小内存的大小以及标志每个小内存的状态是否空闲。
5、 如权利要求l、 2、 3或4所述的方法,其特征在于,步骤二进一步包括标记所述匹配的大内存区为被占用,且记录所述应用程序与所述匹配的大内存区的对应关系。
6、 如权利要求4所述的方法,其特征在于,步骤三进一步包括在所述小内存中截取实际需要的内存大小,利用所述链表的一链表项记录所述小内存 的大小以及状态为被使用,生成另一链表项记录所述小内存中剩余的连续空闲 部分的大小,且标记为空闲。
7、 如权利要求4或6所述的方法,其特征在于,步骤四进一步包括将所释放的小内存的链表项中的状态修改为空闲,判断与该链表项相邻的 链表项的状态是否为空闲,如果是,将两个链表项的小内存的大小相加,删除其中一链表项。
8、 一种嵌入式系统的内存管理装置,用于为应用程序分配内存,其特征 在于,包括一大内存区划分模块,用于将内存划分成多个存储容量不等的大内存区; 一大内存区分配模块,用于当一应用程序开始运行时,为所述应用程序分 配一与所述应用程序的最大内存需求值相匹配的大内存区;一小内存分配模块,利用堆方式在所述匹配的大内存区中,为所述应用程序分配一小内存;一内存合并回收模块,用于当所述应用程序利用堆方式释放所述小内存 时,将所述小内存与所释放的小内存相邻且空闲的小内存进行合并,以及在所 述应用程序运行结束时,回收所述应用程序释放的所述匹配的大内存区。
9、 如权利要求8所述的装置,其特征在于,所述大内存区的个数取决于所述嵌入式系统的应用程序的最大并发数,各 个大内存区的大小是根据各个应用程序所需的最大内存需求值确定的。
10、 如权利要求8所述的装置,其特征在于,还包括一链表生成模块,用 于生成一链表,利用链表项记录所述匹配的大内存区中每个小内存的大小以及 是否被使用。
全文摘要
本发明公开了一种嵌入式系统的内存管理方法及装置。方法包括步骤一,将内存划分成多个存储容量不等的大内存区;步骤二,当一应用程序开始运行时,为所述应用程序分配一与所述应用程序的最大内存需求值相匹配的大内存区;步骤三,利用堆方式在所述匹配的大内存区中,为所述应用程序分配一小内存;步骤四,所述应用程序利用堆方式释放所述小内存时,将所述小内存与其相邻且空闲的小内存进行合并,所述应用程序运行结束时释放所述匹配的大内存区。本发明避免了大量的内存碎片,加快了内存碎片整理工作的速度。避免了内存池方式中需要统计每个应用程序的每块需要动态分配内存的大小、个数。
文档编号G06F12/06GK101221536SQ20081005689
公开日2008年7月16日 申请日期2008年1月25日 优先权日2008年1月25日
发明者毅 惠, 飞 殷, 童晓演, 薛晨曦 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1