CN101149703A - 一种固定内存的管理方法 - Google Patents
一种固定内存的管理方法 Download PDFInfo
- Publication number
- CN101149703A CN101149703A CNA2007101628268A CN200710162826A CN101149703A CN 101149703 A CN101149703 A CN 101149703A CN A2007101628268 A CNA2007101628268 A CN A2007101628268A CN 200710162826 A CN200710162826 A CN 200710162826A CN 101149703 A CN101149703 A CN 101149703A
- Authority
- CN
- China
- Prior art keywords
- memory
- pool
- memory pool
- block
- memory block
- 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
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种固定内存的管理方法,包括如下步骤:步骤1:预先向操作系统中申请一块内存区,并进行内存初始化;步骤2:根据需要的内存块的大小寻找对应的内存池,并从内存池中申请空闲内存块,如果没有空闲的内存块,则向内存块大一级的内存池中寻找是否有空闲内存块,直到找到一个大内存池中的一个空闲内存块;步骤3:将找到的内存块分解成新的内存池,并将新生成的内存池信息记录入内存池链表中,修改内存池描述信息;修改提供新内存池的内存池描述信息;步骤4:从新得到的内存池中分配一个空闲的内存块,并在内存使用完毕后释放内存。本发明实现了内存的动态分配,避免了由于内存分配方案不合理导致内存申请失败和系统异常。
Description
技术领域
本发明涉及计算机领域中嵌入式实时操作系统中的内存管理方法。
背景技术
嵌入式实时操作系统中的内存管理是保障应用实时性的重要因素。为了提高实时性能,避免内存碎片的产生,经常采用固定内存块的内存管理方法。如图1所示,首先向操作系统申请一块大的内存区,然后,将该内存区分为若干子区(内存池1、内存池2、内存池3、内存池4、内存池5),同一内存池由若干大小相同的内存块组成。内存的申请和释放通过系统调用实现。
因此,现有技术内存池分配方法就存在如下的不足之处:
1、各内存池的大小是根据经验估计出来,一旦估计错误,可能导致系统没有足够内存而崩溃;
2、如果内存池分配不合理,只有通过修改代码重新下载程序的方式才能解决问题。
发明内容
本发明所要解决的技术问题在于提供一种固定内存的管理方法,可以通过内存的动态调整来获得最佳内存的分配。
本发明的一种固定内存的管理方法包括如下步骤:
步骤1:预先向操作系统中申请一块内存区,并进行内存初始化;
步骤2:根据需要的内存块的大小寻找对应的内存池,并从内存池中申请空闲内存块,如果没有空闲的内存块,则向内存块大一级的内存池中寻找是否有空闲内存块,直到找到一个大内存池中的一个空闲内存块;
步骤3:将找到的内存块分解成新的内存池,并将新生成的内存池信息记录入内存池链表中,修改内存池描述信息;同时,修改提供新内存池的内存池描述信息;
步骤4:从新得到的内存池中分配一个空闲的内存块,并在内存使用完毕后释放内存。
优选地,还包括步骤3:在系统复位前,将各内存池的配置信息作为最佳配置数据记录入闪存中,供下次启动初始化内存时使用。
优选地,所述步骤1中的内存初始化具体包括如下步骤:
步骤a:系统首先判断是否有最佳分配方案数据,如果有,则按最佳方案分配内存池和内存块;否则,执行步骤b;
步骤b:将所申请的内存区划分为大小不同的内存池,同一内存池中包含有多个大小相同的内存块,同时初始化各内存池描述信息。
优选地,如果在所述步骤2中在所有内存池中没有找到一个内存池中的一个空闲内存块,则内存申请失败。
本发明具有如下的优点:
1、实现了内存的动态分配,避免了由于内存分配方案不合理导致内存申请失败和系统异常;
2、将内存分配的最佳方案记录下来,并在下一次启动时自动采用最佳分配方案。这样做避免了由于内存分配不合理导致频繁调用动态内存机制而导致内存分配效率降低等异常的发生,提高了内存分配效率。同时,针对不同的应用场景,可能内存分配方案需要不一样,这种情况下,采用固定分配内存方式已经不能满足设备差异导致内存分配差异的需求。而本方案把动态分配和静态分配很好的结合在一起,通过动态分配探测出最佳的内存分配方案,再在下次重启动时采用最佳分配方案,使内存分配达到动静结合。
附图说明
图1传统固定长度内存分配方法;
图2内存池描述信息与内存池;
图3申请内存流程图;
图4内存分配前内存池描述信息和内存实施例1;
图5内存分配后内存池描述信息和内存实施例1;
图6内存初始化流程。
具体实施方式
本发明通过如下步骤进行详细的说明。
步骤1:预先向操作系统中申请一块大内存区;
步骤2:内存初始化,如图6所示,即:
将所申请的大内存区划分为大小不同的内存池,同一内存池中包含多个大小相同的内存块(系统首先判断是否有最佳分配方案数据,如果有,则直接按最佳方案分配内存池和内存块就可以了;如果没有,则按照默认配置分配方案分配内存池和内存块,即按前述的方式进行划分);初始化各内存池描述信息;内存池描述信息与内存池关系如图2所示,在内存池1-1中的内存池信息包括:内存池中内存块大小、内存池中内存块数目、内存池首地址、下个内存池描述信息地址,在内存池1-2、1-3(往后依次类推)的内存池信息包括:内存池首地址、下个内存池描述信息地址,最后一个内存池的内存池信息包括:内存池首地址、空地址。
步骤3:申请内存,如图3所示,即:
当需要内存块时,根据需要内存块的大小找到对应的内存池,从内存池中申请空闲内存块(这可能会需要从多个内存池中进行查找);如果申请成功,分配结束;若没有,则对内存池进行动态调整,执行3.1;
3.1内存块大一级的内存池中是否有空闲内存块,如果没有则向更大一级的内存池中查找空闲内存块,直到找到一个更大内存池中的一个空闲内存块,然后执行3.2;
如果所有内存池中都没有,则提示系统内存不足,内存申请以失败结束。
3.2将找到的大的内存块分解成新的内存池,(其中包含若干需要申请的小内存块),将新生成的内存池信息记录入内存池链表中,修改内存池描述信息,包括被分解的内存池和新生成的内存池信息都要修改。同时,修改提供新内存池的大内存池的描述信息。从新得到的内存池中分配一个空闲的内存块。
步骤4:内存使用完之后,释放内存。
步骤5:系统复位前,将各内存池的配置信息(内存块大小和数目)作为最佳配置数据记录入闪存(flash)中,供下次启动初始化内存时使用。
下面通过更具体的申请过程来进一步对本发明进行说明。
内存的初始状态如图4所示:
现在需要申请一个16字节的内存块,由图4中可知,16字节内存应到16字节内存池中申请,但16字节内存池中已经没有空闲内存,此时将按如下方法处理:
步骤1:查找64字节内存池中是否有空闲内存,结果是有空闲内存;
步骤2:将1个空闲的64字节内存改为1个16字节内存块内存池;
步骤3:修改16字节和64字节内存池描述信息;
步骤4:在新的内存池中申请一个16字节内存;
步骤5:申请成功。申请成功后的内存情况如图5所示。
步骤6:一段时间后,系统复位,将新的内存分配方案写入flash中。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,因此,凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种固定内存的管理方法,其特征在于,包括如下步骤:
步骤1:预先向操作系统中申请一块内存区,并进行内存初始化;
步骤2:根据需要的内存块的大小寻找对应的内存池,并从内存池中申请空闲内存块,如果没有空闲的内存块,则向内存块大一级的内存池中寻找是否有空闲内存块,直到找到一个大内存池中的一个空闲内存块;
步骤3:将找到的内存块分解成新的内存池,并将新生成的内存池信息记录入内存池链表中,修改内存池描述信息;同时,修改提供新内存池的内存池描述信息;
步骤4:从新得到的内存池中分配一个空闲的内存块,并在内存使用完毕后释放内存。
2.如权利要求1所述的方法,其特征在于,还包括步骤3:在系统复位前,将各内存池的配置信息作为最佳配置数据记录入闪存中,供下次启动初始化内存时使用。
3.如权利要求2所述的方法,其特征在于,所述步骤1中的内存初始化具体包括如下步骤:
步骤a:系统首先判断是否有最佳分配方案数据,如果有,则按最佳方案分配内存池和内存块;否则,执行步骤b;
步骤b:将所申请的内存区划分为大小不同的内存池,同一内存池中包含有多个大小相同的内存块,同时初始化各内存池描述信息。
4.如权利要求1至3任一所述的方法,其特征在于,如果在所述步骤2中在所有内存池中没有找到一个内存池中的一个空闲内存块,则内存申请失败。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007101628268A CN101149703A (zh) | 2007-10-10 | 2007-10-10 | 一种固定内存的管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007101628268A CN101149703A (zh) | 2007-10-10 | 2007-10-10 | 一种固定内存的管理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101149703A true CN101149703A (zh) | 2008-03-26 |
Family
ID=39250245
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2007101628268A Pending CN101149703A (zh) | 2007-10-10 | 2007-10-10 | 一种固定内存的管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101149703A (zh) |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499034A (zh) * | 2009-03-05 | 2009-08-05 | 北京中星微电子有限公司 | 内存管理方法 |
CN102253893A (zh) * | 2011-04-02 | 2011-11-23 | 赵悦 | 一种内存扩展方法 |
CN102317925A (zh) * | 2009-02-12 | 2012-01-11 | 株式会社东芝 | 存储器系统和控制存储器系统的方法 |
CN102662761A (zh) * | 2012-03-27 | 2012-09-12 | 福建星网锐捷网络有限公司 | 一种多核中央处理器系统中内存池的调度方法以及装置 |
CN102981919A (zh) * | 2012-11-02 | 2013-03-20 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN103064754A (zh) * | 2012-11-14 | 2013-04-24 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN103077126A (zh) * | 2012-12-24 | 2013-05-01 | 中兴通讯股份有限公司 | 一种内存管理方法和装置 |
CN103246608A (zh) * | 2012-02-01 | 2013-08-14 | 联想(北京)有限公司 | 用于分配一存储空间的方法和设备 |
CN103617123A (zh) * | 2013-11-21 | 2014-03-05 | 珠海金山网络游戏科技有限公司 | 一种通过内存块实现内存管理的方法及系统 |
CN103744736A (zh) * | 2014-01-09 | 2014-04-23 | 深圳Tcl新技术有限公司 | 内存管理的方法及Linux终端 |
CN103838677A (zh) * | 2012-11-23 | 2014-06-04 | 腾讯科技(深圳)有限公司 | 一种共享内存的内存块释放方法及设备 |
CN103885569A (zh) * | 2014-04-11 | 2014-06-25 | 珠海全志科技股份有限公司 | 内存的管理方法及装置 |
CN105159615A (zh) * | 2015-09-10 | 2015-12-16 | 上海斐讯数据通信技术有限公司 | 一种动态内存控制方法及系统 |
WO2016112659A1 (zh) * | 2015-01-15 | 2016-07-21 | 深圳市中兴微电子技术有限公司 | 一种信息存储方法、装置及计算机存储介质 |
CN106445835A (zh) * | 2015-08-10 | 2017-02-22 | 北京忆恒创源科技有限公司 | 内存分配方法与装置 |
CN106991010A (zh) * | 2017-03-22 | 2017-07-28 | 武汉虹信通信技术有限责任公司 | 一种用于流媒体服务器的内存集中动态分配方法 |
CN107179997A (zh) * | 2017-06-12 | 2017-09-19 | 合肥东芯通信股份有限公司 | 一种配置存储单元的方法及装置 |
CN109086205A (zh) * | 2018-07-25 | 2018-12-25 | 郑州云海信息技术有限公司 | 基于内存池的内存错误调试方法和装置 |
CN109947560A (zh) * | 2019-02-25 | 2019-06-28 | 深圳市创联时代科技有限公司 | 一种内存管理方法 |
CN111177017A (zh) * | 2018-11-09 | 2020-05-19 | 炬芯(珠海)科技有限公司 | 一种内存分配方法及装置 |
CN111522658A (zh) * | 2020-04-14 | 2020-08-11 | 西云图科技(北京)有限公司 | 一种水务系统的内存管理方法 |
CN112817766A (zh) * | 2021-02-22 | 2021-05-18 | 北京青云科技股份有限公司 | 一种内存管理方法、电子设备及介质 |
-
2007
- 2007-10-10 CN CNA2007101628268A patent/CN101149703A/zh active Pending
Cited By (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102317925B (zh) * | 2009-02-12 | 2014-07-23 | 株式会社东芝 | 存储器系统和控制存储器系统的方法 |
CN102317925A (zh) * | 2009-02-12 | 2012-01-11 | 株式会社东芝 | 存储器系统和控制存储器系统的方法 |
CN101499034A (zh) * | 2009-03-05 | 2009-08-05 | 北京中星微电子有限公司 | 内存管理方法 |
CN102253893A (zh) * | 2011-04-02 | 2011-11-23 | 赵悦 | 一种内存扩展方法 |
CN103246608A (zh) * | 2012-02-01 | 2013-08-14 | 联想(北京)有限公司 | 用于分配一存储空间的方法和设备 |
CN102662761A (zh) * | 2012-03-27 | 2012-09-12 | 福建星网锐捷网络有限公司 | 一种多核中央处理器系统中内存池的调度方法以及装置 |
CN102981919A (zh) * | 2012-11-02 | 2013-03-20 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN102981919B (zh) * | 2012-11-02 | 2015-07-01 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN103064754A (zh) * | 2012-11-14 | 2013-04-24 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN103838677B (zh) * | 2012-11-23 | 2018-07-06 | 腾讯科技(深圳)有限公司 | 一种共享内存的内存块释放方法及设备 |
CN103838677A (zh) * | 2012-11-23 | 2014-06-04 | 腾讯科技(深圳)有限公司 | 一种共享内存的内存块释放方法及设备 |
CN103077126B (zh) * | 2012-12-24 | 2016-08-03 | 中兴通讯股份有限公司 | 一种内存管理方法和装置 |
CN103077126A (zh) * | 2012-12-24 | 2013-05-01 | 中兴通讯股份有限公司 | 一种内存管理方法和装置 |
CN103617123A (zh) * | 2013-11-21 | 2014-03-05 | 珠海金山网络游戏科技有限公司 | 一种通过内存块实现内存管理的方法及系统 |
CN103744736B (zh) * | 2014-01-09 | 2018-10-02 | 深圳Tcl新技术有限公司 | 内存管理的方法及Linux终端 |
CN103744736A (zh) * | 2014-01-09 | 2014-04-23 | 深圳Tcl新技术有限公司 | 内存管理的方法及Linux终端 |
CN103885569A (zh) * | 2014-04-11 | 2014-06-25 | 珠海全志科技股份有限公司 | 内存的管理方法及装置 |
CN103885569B (zh) * | 2014-04-11 | 2017-05-24 | 珠海全志科技股份有限公司 | 内存的管理方法及装置 |
WO2016112659A1 (zh) * | 2015-01-15 | 2016-07-21 | 深圳市中兴微电子技术有限公司 | 一种信息存储方法、装置及计算机存储介质 |
CN106445835A (zh) * | 2015-08-10 | 2017-02-22 | 北京忆恒创源科技有限公司 | 内存分配方法与装置 |
CN106445835B (zh) * | 2015-08-10 | 2020-11-17 | 北京忆恒创源科技有限公司 | 内存分配方法与装置 |
CN105159615A (zh) * | 2015-09-10 | 2015-12-16 | 上海斐讯数据通信技术有限公司 | 一种动态内存控制方法及系统 |
CN106991010B (zh) * | 2017-03-22 | 2019-11-08 | 武汉虹信通信技术有限责任公司 | 一种用于流媒体服务器的内存集中动态分配方法 |
CN106991010A (zh) * | 2017-03-22 | 2017-07-28 | 武汉虹信通信技术有限责任公司 | 一种用于流媒体服务器的内存集中动态分配方法 |
CN107179997A (zh) * | 2017-06-12 | 2017-09-19 | 合肥东芯通信股份有限公司 | 一种配置存储单元的方法及装置 |
CN109086205A (zh) * | 2018-07-25 | 2018-12-25 | 郑州云海信息技术有限公司 | 基于内存池的内存错误调试方法和装置 |
CN111177017A (zh) * | 2018-11-09 | 2020-05-19 | 炬芯(珠海)科技有限公司 | 一种内存分配方法及装置 |
CN109947560A (zh) * | 2019-02-25 | 2019-06-28 | 深圳市创联时代科技有限公司 | 一种内存管理方法 |
CN111522658A (zh) * | 2020-04-14 | 2020-08-11 | 西云图科技(北京)有限公司 | 一种水务系统的内存管理方法 |
CN112817766A (zh) * | 2021-02-22 | 2021-05-18 | 北京青云科技股份有限公司 | 一种内存管理方法、电子设备及介质 |
CN112817766B (zh) * | 2021-02-22 | 2024-01-30 | 北京青云科技股份有限公司 | 一种内存管理方法、电子设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101149703A (zh) | 一种固定内存的管理方法 | |
CN106874031B (zh) | 一种终端设备系统程序的启动方法及装置 | |
US20190332428A1 (en) | Task queues | |
TWI477964B (zh) | 在記憶體中頁面存取之控制系統及方法 | |
US7961544B2 (en) | Storage system and method for managing a plurality of storage devices | |
US20160055097A1 (en) | Heterogeneous unified memory | |
KR102077149B1 (ko) | 메모리 관리 방법 및 장치 | |
CN100382060C (zh) | 用于处理不同类型的存储器命令的仲裁装置和方法 | |
CN101344861B (zh) | 一种智能卡内存管理方法 | |
TW200601040A (en) | Management of non-volatile memory systems having large erase blocks | |
CN102375788A (zh) | 为具有非易失性存储器的系统动态地分配功率预算的方法及装置 | |
CN103377009A (zh) | 管理存储器模块中的操作状态数据 | |
CN102763090A (zh) | 用于利用nand存储器件同时读写的系统和方法 | |
CN103995787A (zh) | 一种摄像头应用的调控方法及装置 | |
CN101859279A (zh) | 一种内存分配、释放方法及装置 | |
WO2017050064A1 (zh) | 共享内存数据库的内存管理方法及装置 | |
CN102184145B (zh) | 重启数据不丢失方法及装置 | |
CN102246151A (zh) | 存储器装置及其控制方法 | |
CN107533435A (zh) | 存储空间的分配方法及存储设备 | |
CN106855788A (zh) | 一种堆空间的内存分配管理方法 | |
US8856425B2 (en) | Method for performing meta block management, and associated memory device and controller thereof | |
US8364894B2 (en) | Data update method and flash memory apparatus utilizing a cache block | |
CN106855845A (zh) | 堆空间的内存分配管理系统及嵌入式芯片 | |
CN101221816B (zh) | 具有预留空间的掩膜编程存储器 | |
US7225291B2 (en) | Storage controlling and judging method of flash memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination |