一种内存扩展方法

阅读: 评论:0

著录项
  • CN201110082971.1
  • 20110402
  • CN102253893A
  • 20111123
  • 赵悦
  • 赵悦
  • G06F12/02
  • G06F12/02

  • 江苏省苏州市苏州工业园区金鸡湖大道1355号国际科技园科技广场2楼
  • 中国,CN,江苏(32)
  • 南京众联专利代理有限公司
  • 赵枫
摘要
本发明涉及一种内存扩展方法,由内存分配方式和数据块使用方式两部分共同实现或单独实现:内存分配方式:系统内存分为多个应用程序内存块用于分配给各种应用程序使用,(1)当系统接收新的应用程序时,系统对其进行分析,并判断是否需要对系统提出申请内存块,(2)重新分配内存块后,将新的应用程序所用的数据分为多个数据块,同时根据数据块实际使用情况判断是否申请新内存数据块,(3)根据数据块的使用频率,通过将部分使用频率低的、暂时未用的内存数据块转移为外存数据块。数据块使用方式:判断所需操作的数据块,当其为内存数据块时,应用程序对其直接执行操作,当其为外存数据块时,先将其转换为内存数据块再对其进行操作。
权利要求

1.一种内存扩展方法,其特征是:所述内存扩展方法由内存分配方式和数 据块使用方式两部分共同实现或单独实现:

所述内存分配方式为:系统内存分为多个应用程序内存块用于分配给各种 应用程序使用,每个应用程序占用1个应用程序内存块,未分配的系统内存则 属于系统空闲内存,(1)、当系统接收新的应用程序时,系统对其进行分析,如 为新的应用程序则按应用程序内存使用情况并结合系统空闲内存情况对系统提 出申请内存块,如为已有应用程序则返回,(2)、重新分配内存块后,将新的应 用程序所用的数据分为多个数据块,同时根据数据块实际使用情况判断是申请 新的内存数据块还是释放已有数据块,如需要申请新的内存数据块时,则对该 应用程序提出申请分配最合适的空闲块给新的内存数据块,(3)、根据数据块的 使用频率,通过将部分使用频率低的、暂时未用的内存数据块转移为外存数据 块。

所述数据块使用方式为:判断所需操作的数据块为内存数据块还是外存数 据块,当其为内存数据块时,应用程序对其直接执行操作,当其为外存数据块 时,先将其转换为内存数据块再对其进行操作。

2.根据权利要求1所述的内存扩展方法,其特征是:当系统空闲内存不能 满足新的应用程序内存块的申请时,将已有应用程序内最少使用的的数据块转 移到外存,或者再缩小已有应用程序内存块大小,而剩余部分归入应用程序内 存块空闲区。

3.根据权利要求1所述的内存扩展方法,其特征是:当应用程序释放已有 数据块时,如果所释放数据块为外存数据块,则直接将所占用空间归还给系统 外存,如果所释放数据块为内存数据块,则将已有数据块内存空间归还到应用 程序内存块成为应用程序空闲区碎片,并按空闲碎片大小由低至高排列。

4.根据权利要求1所述的内存扩展方法,其特征是:当应用程序内的空闲 块不能满足新的内存数据块时,扩大应用程序内存块或者将应用程序内使用最 少使用的内数据块转化为外存数据块,将其所占内存空间释放为应用程序内存 块空闲空间,如此时应用程序空闲空间仍不满足内存数据块容量要求,则继续 释放使用频率次低的内存数据块,直至满足新的内存数据块容量要求,最后将 释放的内存空间及空闲碎片整理到应用程序内存块底部,合并为一个空闲空间 块。

说明书
技术领域

本发明涉及一种内存扩展方法,尤其涉及一种应用于移动计算装置中的内存 扩展方法。

内存管理在移动计算装置中是一个比较重要的问题,如果处理不好内存资 源的管理,那么系统的健壮性将会大大降低,严重时系统将会无法正常运行。

1、malloc内存分配在移动计算装置中存在的问题。

在移动计算装置中比较可靠的方法是采用静态内存分配。而动态内存分配 的经典方法是调用malloc函数,该函数是C语言中定义的标准内存分配函数, 一般的C语言编译器都会提供该函数,例如在嵌入式应用中常用的编译开发环 境Keil C、CCS以及ADS都会提供此类内存分配函数。

编译器提供的malloc内存分配函数的实现基于堆算法。动态内存区域是一 个堆空间,分配内存时总是从堆的头部向后查,分配一块满足大小的一段空 间,释放资源时检查是否可以与堆空间中的临近空闲资源合并成大块,如果可 以合并,那么堆空间中的连续资源将会增加,否则将会产生一个新块链接在堆 空间中的链表中。

在系统初始化时,动态分配的堆空间为一整块资源,随着内存资源的不断 分配、释放,堆空间将会被不断切分,切分成很多细粒度的空闲块资源。当堆 空间被切分成很多小块时,系统就不可能再为大块需求分配资源了。虽然细粒 度的块聚合起来能够满足应用需求,但是,堆算法已经无能为力了,就会出现 malloc分配失败的情况。

从堆算法的本质出发,可以认识到在移动计算装置中应用malloc存在严 重的问题。由于很多应用程序在运行期间需要进行多次的动态内存分配,当系 统长时间运行之后,内存资源将会变得越来越零散,运行之初大块的内存已经 不复存在,可能只剩下很多小块的资源。所以在大块内存需求的情况下,系统 将会出错,导致系统的健壮性随着系统运行时间的增长而下降。因此,在移动 计算装置应用程序中不建议使用malloc进行内存分配。

2、小型嵌入式系统中的内存管理方法。

小型嵌入式系统中经常采用分块的内存管理方法。其思想比较简单,即将 内存资源分成若干块,当需要内存资源时,获取一个块资源,使用完毕之后再 将块资源释放,归还给系统。采用分块算法的一个问题是:难以确定块的大小。 因为系统中的应用对块大小需求不一样,如果块过大,那么利用率下降,如果 块过小,那么无法满足分配需求。

针对该问题,提出了块资源池的概念,每个池中的块大小都不一样。应用 提出内存资源需求后,系统根据需求到合适的池中得到资源块;释放资源时, 再将资源块释放到对应的池中。在实际的uc/os操作系统中,就采用了这种块 资源算法的内存管理方法。但是分块算法的效率非常低下,并且存在块内碎片, 仅适用于非常简单的、小型的嵌入式应用。

3、大型嵌入式系统中的内存管理方法。

目前,最有效的内存管理方法是虚拟内存技术,通过虚拟内存技术可以将 逻辑内存和物理内存分开,程序运行在逻辑内存空间,对于每个任务而言都能 看到一个很大的内存空间,逻辑内存和实际的物理内存通过页表进行动态映射。 由于虚拟内存技术涉及到页表的映射查,所以如果采用纯软件的手段,那么 实现效率将十分低下,因此往往需要硬件的加速。这个硬件加速单元就是MMU (memory management unit),其本质上就是一个lookup table。因此,采用虚 拟内存技术的嵌入式系统都需要CPU集成MMU,否则该套机制很难实现。

但是,随着移动计算装置的应用程序越来越复杂,单个应用程序需要更大 的内存,而移动计算装置的实际内存是有限的,内存块资源池的方法已不适用, 而移动计算装置所选用的CPU一般都未集成MMU,也就不能使用虚拟内存技术。 由于上述三种方法存在不同的问题,所以需要有新的方法解决移动计算装置的 内存管理问题。

为了解决上述技术问题,本发明提供了一种内存扩展方法。

本发明解决其技术问题所采用的技术方案是:一种内存扩展方法,由内存 分配方式和数据块使用方式两部分共同实现或单独实现:

所述内存分配方式为:系统内存分为多个应用程序内存块用于分配给各种 应用程序使用,每个应用程序占用1个应用程序内存块,未分配的系统内存则 属于系统空闲内存,(1)、与系统接收新的应用程序时,系统对其进行分析,按 应用程序内存使用情况并结合系统空闲内存情况对系统提出申请内存块,将新 的应用程序所用的数据分为多个数据块,(2)、对于应用程序内部的数据块管理, 根据数据块实际使用情况判断是申请新的内存数据块还是释放已有数据块,如 需要申请新的内存数据块时,则对该应用程序提出申请分配最合适的空闲块给 新的内存数据块,(3)、根据数据块的使用频率,通过将部分使用频率低的、暂 时末用的内存数据块转移为外存数据块。

所述数据块使用方式为:判断所需操作的数据块为内存数据块还是外存数 据块,当其为内存数据块时,应用程序对其直接执行操作,当其为外存数据块 时,先将其转换为内存数据块再对其进行操作。

进一步的:

当系统空闲内存不能满足新的应用程序内存块的申请时,将已有用程序内 最少使用的的数据块转移到外存,或者再缩小已有应用程序内存块大小,而剩 余部分归入应用程序内存块空闲区。

当应用程序释放已有数据块时,如果所释放数据块为外存数据块,则直接 将所占用空间归还给系统外存,如果所释放数据块为内存数据块,则将已有数 据块内存空间归还到应用程序内存块成为应用程序空闲区碎片,并按空闲碎片 大小由低至高排列。

当应用程序内的空闲块不能满足新的内存数据块容量要求时,扩大应用程 序内存块或者将应用程序内使用最少使用的内存数据块转移为外存数据块,将 其所占内存空间释放为应用程序内存块空闲空间,如此时应用程序空闲空间仍 不满足新的内存数据块容量要求,则继续将使用频率次低的内存数据块转移为 外存数据块,直至满足新的内存数据块容量要求,最后将释放的内存空间及空 闲碎片整理到新的应用程序内存块底部,合并为一个空闲空间块。

本发明通过对内存进行内存块分配和对应用程序数据进行数据块处理,并 且利用系统闲置空间、应用程序块内空闲块和将数据块在内存和外存之间的转 移,来对系统空间和应用程序内存进行合理分配,从而实现内存扩展的目的, 以使系统能够同时容纳更多的应用程序,并通过将外存“扩展”为内存的一部 分,使得对内存容量要求较高的应用程序仍可正常运行。

图1为本发明中的技术方案所产生的内存和外存映射示意图。

图2为本发明中内存管理方法的系统内存管理流程图。

图3为本发明中内存管理方法的应用程序内存块管理流程图。

图4为本发明中内存管理方法的内存数据块空间分配流程图。

下面结合附图和实施例对本发明进一步说明。

本发明中所述内存扩展方法适用于内存有限的移动计算设备。本发明的实 施可能通过不同的形式来进行,比如所述内存扩展方法可以通过软件、硬件或 者两者的结合来实现成为一种方法或产品,也可以通过计算机程序称为一个系 统的一部分。

请参见图1,移动计算设备的存储空间由系统内存和系统外存两部分组成。 系统内存可分配给多个应用程序直接使用,每个应用程序占用1个应用程序内 存块。未分配的系统内存属于系统空闲内存。在某个应用程序内部,将所用的 数据分为多个数据块,每个数据块的大小可以不相同。根据数据块是在内存中 还是外存中分为内存数据块和外存数据块。应用程序可对内存数据块直接执行 操作。当应用程序所要操作的数据块为外存数据块时,须先将该数据块转移为 内存数据块。这样,该应用程序可使用的数据存储空间是由应用程序内存块中 的内存数据块空间、应用程序内存块中的空闲块空间及位于系统外存的应用程 序外存数据块空间构成,即应用程序可用数据存储空间通过外存得到了“扩展”。

结合图2、图3、图4所示,其示出了本发明一个实施例中的内存扩展方法。

图2的系统内存管理流程图(100)包括:

步骤102,初始化系统内存。

步骤104,判断是系统加载新的应用程序,还是已有应用程序结束运行。

步骤106,如果是要为新的应用程序在系统内存中分配应用程序内存块,则 判断当前系统空闲内存空间大小是否满足新的应用程序内存块所申请的容量。

步骤108,如果当前系统空闲内存空间大小不满足新的应用程序内存块的容 量要求,则计算新的应用程序内存块申请值与当前系统空闲内存空间的差j,将 现有应用程序空闲区由大到小排列,寻最接近但大于j值的应用程序空闲区。 如果存在这样的应用程序内存块Ax,则将Ax的应用程序块中j大小的应用程序 空闲区归还给系统,成为系统空闲内存,并将Ax的内存块大小减去j。如果不 存在这样的应用程序内存块,则将现有的各应用程序的各内存数据块按使用频 率由低至高排列,在这个排列中寻最接近但大于j值的应用程序内存数据块, 设这个数据块为Ax.Dk,则将Ax.Dk的内容转移到系统外存成为Ax.Ek。

步骤110,重新整理Ax的内存块,将Ax内的空闲区碎片整理为内存块底部 的完整空闲区,将Ax的内存块大小减去Ax.Dk的大小。

步骤112,将Ax底部相应大小的应用程序空闲区归还系统成为系统空闲内 存。重新整理系统空闲内存,将系统内存空闲区碎片整理为系统内存底部的完 整空闲区。

步骤114,在系统内存空闲区内为新的应用程序分配指定大小的应用程序内 存块。

步骤116,将应用程序内存块所占用系统内存归还给系统,成为系统空闲内 存。

图3的应用程序内存块管理流程图(200)包括:

步骤202,在应用程序运行过程中,判断应用程序是申请新的数据块还是释 放已有数据块,或者是使用数据块。

步骤204,应用程序申请新的数据块,则调用图4(300)所示内存管理方 法的内存数据块空间分配流程图,完成数据块在内存中的分配。

步骤206,应用程序释放已有数据块,如果所释放数据块为外存数据块,则 直接将所占用空间归还给系统外存。如果所释放数据块为内存数据块,则将已 有数据块内存空间归还到应用程序内存块成为应用程序空闲区碎片,并按空闲 碎片大小由低至高排列。

步骤208,如果应用程序要使用数据块,则判断所要使用的数据块是否为内 存数据块,即是否已在系统内存中。

步骤210,如果应用程序所要使用的数据块为内存数据块,则该数据块使用 频率加1。

步骤212,如果应用程序所要使用的数据块为外存数据块,即该数据块当前 并未在内存中,则调用则图4(300)所示内存数据块分配子例程,在内存中为 该数据块分配空间。

步骤214,将该外存数据块转移到为其分配的内存空间中,成为内存数据块。

图4内存管理方法的内存数据块空间分配流程图(300)包括:

步骤302,如果应用程序要申请新的内存数据块,则判断应用程序内存块中 现有空闲区中是否满足新的内存数据块容量要求的空闲碎片。

步骤304,如果存在满足新的内存数据块容量要求的空闲块,则到最接近 但不低于该容量要求的空闲块例如Ax.Rs。将该内存数据块容量要求大小的内存 空闲空间分配给该内存数据块,将多余的空闲空间归还给应用程序空闲区。

步骤306,如果在应用程序内存块中的空闲块均不满足新的内存数据块容量 要求,则计算应用程序内存块中的空闲空间碎片总合是否满足新的内存数据块 大小要求。

步骤308,如果应用程序内存块中的空闲空间碎片总合满足新的内存数据块 大小要求,则将各空闲空间碎片移动到应用程序内存块底部,合并为一个完整 的空闲内存块。

步骤310,如果应用程序内存块中的空闲空间碎片总合不满足新的内存数据 块容量要求,则计算新的内存数据块容量与已有应用程序内存块空闲空间容量 的差,查系统空闲空间是否大于这个差。

步骤312,如果系统空闲空间大于新的内存数据块大小与已有应用程序内存 块空闲空间大小的差,则在系统空闲空间内分配该值大小的空间。将新分配的 系统空闲空间与已有应用程序内存块空闲空间合并,并扩大应用程序内存块。

步骤314,如果系统空闲空间不能满足要求,则在应用程序内存块内,将使 用频率最低的内存数据块转移为外存数据块,将其所占内存空间释放为应用程 序内存块空闲空间,如此时应用程序空闲空间仍不满足新的内存数据块容量要 求,则继续释放使用频率次低的内存数据块,直至满足新的内存数据块容量要 求。将释放的内存空间及空闲碎片整理到应用程序内存块底部,合并为一个空 闲空间块。

本文发布于:2023-04-14 13:12:24,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/86500.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图