CN102253893A - 一种内存扩展方法 - Google Patents
一种内存扩展方法 Download PDFInfo
- Publication number
- CN102253893A CN102253893A CN2011100829711A CN201110082971A CN102253893A CN 102253893 A CN102253893 A CN 102253893A CN 2011100829711 A CN2011100829711 A CN 2011100829711A CN 201110082971 A CN201110082971 A CN 201110082971A CN 102253893 A CN102253893 A CN 102253893A
- Authority
- CN
- China
- Prior art keywords
- memory
- application program
- block
- internal storage
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Memory System (AREA)
Abstract
本发明涉及一种内存扩展方法,由内存分配方式和数据块使用方式两部分共同实现或单独实现:内存分配方式:系统内存分为多个应用程序内存块用于分配给各种应用程序使用,(1)当系统接收新的应用程序时,系统对其进行分析,并判断是否需要对系统提出申请内存块,(2)重新分配内存块后,将新的应用程序所用的数据分为多个数据块,同时根据数据块实际使用情况判断是否申请新内存数据块,(3)根据数据块的使用频率,通过将部分使用频率低的、暂时未用的内存数据块转移为外存数据块。数据块使用方式:判断所需操作的数据块,当其为内存数据块时,应用程序对其直接执行操作,当其为外存数据块时,先将其转换为内存数据块再对其进行操作。
Description
技术领域:
本发明涉及一种内存扩展方法,尤其涉及一种应用于移动计算装置中的内存扩展方法。
背景技术:
内存管理在移动计算装置中是一个比较重要的问题,如果处理不好内存资源的管理,那么系统的健壮性将会大大降低,严重时系统将会无法正常运行。
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,如果系统空闲空间不能满足要求,则在应用程序内存块内,将使用频率最低的内存数据块转移为外存数据块,将其所占内存空间释放为应用程序内存块空闲空间,如此时应用程序空闲空间仍不满足新的内存数据块容量要求,则继续释放使用频率次低的内存数据块,直至满足新的内存数据块容量要求。将释放的内存空间及空闲碎片整理到应用程序内存块底部,合并为一个空闲空间块。
Claims (4)
1.一种内存扩展方法,其特征是:所述内存扩展方法由内存分配方式和数据块使用方式两部分共同实现或单独实现:
所述内存分配方式为:系统内存分为多个应用程序内存块用于分配给各种应用程序使用,每个应用程序占用1个应用程序内存块,未分配的系统内存则属于系统空闲内存,(1)、当系统接收新的应用程序时,系统对其进行分析,如为新的应用程序则按应用程序内存使用情况并结合系统空闲内存情况对系统提出申请内存块,如为已有应用程序则返回,(2)、重新分配内存块后,将新的应用程序所用的数据分为多个数据块,同时根据数据块实际使用情况判断是申请新的内存数据块还是释放已有数据块,如需要申请新的内存数据块时,则对该应用程序提出申请分配最合适的空闲块给新的内存数据块,(3)、根据数据块的使用频率,通过将部分使用频率低的、暂时未用的内存数据块转移为外存数据块。
所述数据块使用方式为:判断所需操作的数据块为内存数据块还是外存数据块,当其为内存数据块时,应用程序对其直接执行操作,当其为外存数据块时,先将其转换为内存数据块再对其进行操作。
2.根据权利要求1所述的内存扩展方法,其特征是:当系统空闲内存不能满足新的应用程序内存块的申请时,将已有应用程序内最少使用的的数据块转移到外存,或者再缩小已有应用程序内存块大小,而剩余部分归入应用程序内存块空闲区。
3.根据权利要求1所述的内存扩展方法,其特征是:当应用程序释放已有数据块时,如果所释放数据块为外存数据块,则直接将所占用空间归还给系统外存,如果所释放数据块为内存数据块,则将已有数据块内存空间归还到应用程序内存块成为应用程序空闲区碎片,并按空闲碎片大小由低至高排列。
4.根据权利要求1所述的内存扩展方法,其特征是:当应用程序内的空闲块不能满足新的内存数据块时,扩大应用程序内存块或者将应用程序内使用最少使用的内数据块转化为外存数据块,将其所占内存空间释放为应用程序内存块空闲空间,如此时应用程序空闲空间仍不满足内存数据块容量要求,则继续释放使用频率次低的内存数据块,直至满足新的内存数据块容量要求,最后将释放的内存空间及空闲碎片整理到应用程序内存块底部,合并为一个空闲空间块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100829711A CN102253893A (zh) | 2011-04-02 | 2011-04-02 | 一种内存扩展方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011100829711A CN102253893A (zh) | 2011-04-02 | 2011-04-02 | 一种内存扩展方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102253893A true CN102253893A (zh) | 2011-11-23 |
Family
ID=44981168
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011100829711A Pending CN102253893A (zh) | 2011-04-02 | 2011-04-02 | 一种内存扩展方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102253893A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294606A (zh) * | 2013-05-08 | 2013-09-11 | 天脉聚源(北京)传媒科技有限公司 | 一种分配内存及检测内存溢出的方法和装置 |
CN104407981A (zh) * | 2014-10-28 | 2015-03-11 | 小米科技有限责任公司 | 内存管理方法和装置 |
CN105224469A (zh) * | 2014-06-16 | 2016-01-06 | 陈宏达 | 主动式内存管理方式 |
CN105988868A (zh) * | 2015-02-12 | 2016-10-05 | 广东欧珀移动通信有限公司 | 一种转移应用程序的方法及终端 |
CN105988842A (zh) * | 2015-02-12 | 2016-10-05 | 广东欧珀移动通信有限公司 | 一种转移应用程序的方法及终端 |
CN106855829A (zh) * | 2016-10-18 | 2017-06-16 | 珠海格力节能环保制冷技术研究中心有限公司 | 一种扩展内存的方法及装置 |
CN108762919A (zh) * | 2018-05-17 | 2018-11-06 | 桂林长海发展有限责任公司 | 一种程序内存处理系统及方法 |
CN112764930A (zh) * | 2021-01-22 | 2021-05-07 | 山东云海国创云计算装备产业创新中心有限公司 | 一种内存分配方法、装置、设备及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001031454A1 (de) * | 1999-10-27 | 2001-05-03 | Dr. Johannes Heidenhain Gmbh | Verfahren zur dynamischen speicherverwaltung |
CN101149703A (zh) * | 2007-10-10 | 2008-03-26 | 中兴通讯股份有限公司 | 一种固定内存的管理方法 |
CN101221536A (zh) * | 2008-01-25 | 2008-07-16 | 中兴通讯股份有限公司 | 嵌入式系统的内存管理方法及装置 |
CN101833514A (zh) * | 2009-03-12 | 2010-09-15 | 安凯(广州)软件技术有限公司 | 基于微内存系统在与非型闪存介质实现虚拟内存的方法 |
-
2011
- 2011-04-02 CN CN2011100829711A patent/CN102253893A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001031454A1 (de) * | 1999-10-27 | 2001-05-03 | Dr. Johannes Heidenhain Gmbh | Verfahren zur dynamischen speicherverwaltung |
CN101149703A (zh) * | 2007-10-10 | 2008-03-26 | 中兴通讯股份有限公司 | 一种固定内存的管理方法 |
CN101221536A (zh) * | 2008-01-25 | 2008-07-16 | 中兴通讯股份有限公司 | 嵌入式系统的内存管理方法及装置 |
CN101833514A (zh) * | 2009-03-12 | 2010-09-15 | 安凯(广州)软件技术有限公司 | 基于微内存系统在与非型闪存介质实现虚拟内存的方法 |
Non-Patent Citations (1)
Title |
---|
凌震莹,张雷: "一种嵌入式系统虚拟内存管理机制的实现方法", 《科学技术与工程》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103294606A (zh) * | 2013-05-08 | 2013-09-11 | 天脉聚源(北京)传媒科技有限公司 | 一种分配内存及检测内存溢出的方法和装置 |
CN105224469A (zh) * | 2014-06-16 | 2016-01-06 | 陈宏达 | 主动式内存管理方式 |
CN104407981A (zh) * | 2014-10-28 | 2015-03-11 | 小米科技有限责任公司 | 内存管理方法和装置 |
CN105988868A (zh) * | 2015-02-12 | 2016-10-05 | 广东欧珀移动通信有限公司 | 一种转移应用程序的方法及终端 |
CN105988842A (zh) * | 2015-02-12 | 2016-10-05 | 广东欧珀移动通信有限公司 | 一种转移应用程序的方法及终端 |
CN105988842B (zh) * | 2015-02-12 | 2019-06-11 | Oppo广东移动通信有限公司 | 一种转移应用程序的方法及终端 |
CN106855829A (zh) * | 2016-10-18 | 2017-06-16 | 珠海格力节能环保制冷技术研究中心有限公司 | 一种扩展内存的方法及装置 |
CN108762919A (zh) * | 2018-05-17 | 2018-11-06 | 桂林长海发展有限责任公司 | 一种程序内存处理系统及方法 |
CN112764930A (zh) * | 2021-01-22 | 2021-05-07 | 山东云海国创云计算装备产业创新中心有限公司 | 一种内存分配方法、装置、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102253893A (zh) | 一种内存扩展方法 | |
CN108984264B (zh) | 虚拟gpu的实现方法、装置及系统 | |
US9047196B2 (en) | Usage aware NUMA process scheduling | |
US20160110225A1 (en) | System and method for improving memory usage in virtual machines | |
CN101515254B (zh) | 存储空间管理系统和方法 | |
US8453132B2 (en) | System and method for recompiling code based on locality domain and thread affinity in NUMA computer systems | |
US7840775B2 (en) | Storage system in which resources are dynamically allocated to logical partition, and logical division method for storage system | |
CN108038002A (zh) | 一种嵌入式软件内存管理方法 | |
US20120317389A1 (en) | Allocating Heaps in NUMA Systems | |
CN100517240C (zh) | 一种嵌入式操作系统的内存池分配方法 | |
JP2005196602A (ja) | 無共有型データベース管理システムにおけるシステム構成変更方法 | |
CN103297499A (zh) | 一种基于云平台的调度方法及系统 | |
US20160196157A1 (en) | Information processing system, management device, and method of controlling information processing system | |
WO2016112713A1 (zh) | 一种对内存中内存页的处理方法及装置 | |
CN103365726A (zh) | 一种面向gpu集群的资源管理方法和系统 | |
US20100235669A1 (en) | Memory power consumption reduction system, and method and program therefor | |
US10768684B2 (en) | Reducing power by vacating subsets of CPUs and memory | |
CN101894049A (zh) | 一种自适应回收垃圾对象的系统及方法 | |
US11436141B2 (en) | Free memory page hinting by virtual machines | |
Diwase et al. | Survey report on memory allocation strategies for real time operating system in context with embedded devices | |
US10430233B1 (en) | Scheduling computational tasks among multiple classes of storage resources based on job classification | |
CN104182280B (zh) | 面向混合主存嵌入式系统的低能耗rm实时任务调度方法 | |
CN103092677A (zh) | 一种适用于虚拟化平台的内存节能系统和方法 | |
CN102096594A (zh) | 使用内存中系统资源的方法、虚拟机管理器及计算机 | |
CN113010453A (zh) | 一种内存管理的方法、系统、设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20111123 |