CN1570883A - 嵌入式实时操作系统中非缓冲内存动态分配方法 - Google Patents
嵌入式实时操作系统中非缓冲内存动态分配方法 Download PDFInfo
- Publication number
- CN1570883A CN1570883A CN 03132075 CN03132075A CN1570883A CN 1570883 A CN1570883 A CN 1570883A CN 03132075 CN03132075 CN 03132075 CN 03132075 A CN03132075 A CN 03132075A CN 1570883 A CN1570883 A CN 1570883A
- Authority
- CN
- China
- Prior art keywords
- memory
- array
- operating system
- describe
- unbuffered
- 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.)
- Granted
Links
Images
Landscapes
- Memory System (AREA)
Abstract
一种嵌入式实时操作系统中非缓冲内存动态分配方法,包括如下步骤,预先向操作系统申请一块大的内存区;将申请的内存区设定为用户保留区;设置非缓冲描述数组;在所述非缓冲描述数组中查找已经释放空置出来、标识为没有分配的非缓冲块,按顺序分配给需要的程序,同时修改所述非缓冲描述数组中该块内存标识为已经分配;在非缓冲描述数组中查找该内存块的位置并释放,同时修改描述数组中该内存块标识为没有分配。本发明解决以前算法中必须存在的统计操作和空间浪费的缺点,一定程度上提高了内存的利用,而且具有伸缩性,可适应不同规模的嵌入式系统。
Description
技术领域
本发明涉及计算机领域,具体地说,涉及一种嵌入式实时多任务操作系统中的内存动态分配方法。
背景技术
嵌入式实时操作系统一般由任务调度管理、时间管理、任务同步和通信、内存管理等几部分组成。因为实时操作系统对内存的依赖性很强,因此内存管理作为操作系统的核心就显得很重要。
现在常用的固定大小内存分配算法是使用的UB(Unbuffer,非缓冲)块分配算法其具体算法如下:
预先向操作系统申请一块大的内存区,它预先把大块自由空间定义为用户保留空间,不能把全部空间都定义为用户保留空间,因为操作系统本身以及一些协议栈运行也需要一些空间。再将该内存区划分为若干内存池,每个内存池中内存块的大小固定,各种大小的内存块的数量可根据需要配置。为了能够最大程度上令初始配置与实际使用UB数量吻合,在程序中可以增加各种UB峰值使用的统计,以此数据调整各种UB的数量。
根据实际情况可以将缓冲池分为64,128,256,512,1024,2048,4096,8192八种大小,每种大小的缓冲池用循环队列来进行管理,提供申请内存和释放内存的接口。内存管理提供其调试信息和状态统计信息。申请内存时根据申请内存的大小选择管理队列,从队列的头摘取一个缓冲区返回指针给申请者,释放时将内存追加到队列的尾部。
每种大小的内存块都有一个内存管理结构,记录下该种内存的使用情况(空闲内存个数、最大利用个数和累计申请该种内存的次数)。内存队列使用一级索引,申请内存的大小直接映射到队列的编号。
内存划分和缓冲池结构及内存的操作维护算法:
图1所示是内存块划分的情况和缓冲池POOL的结构图。图2所示是内存的操作维护算法图,内存队列是一个简单的循环队列,申请时从队列头取一空闲块,归还时放在列尾。由于内存队列是系统每个任务都会申请和归还的,设置了一个信号量来互斥。为了提高效率,内存队列采用二级索引:内存块的大小经过简单的移位得到一级索引值,一级索引值即为内存队列的编号。
申请和释放内存算法
(1)申请内存时,根据所需内存数值的移位,得到一级索引值,找到相应的POOL及其对应的内存队列,根据队列的头,将可用数据块的指针值返回给调用者。如附图3所示。
(2)归还内存时,从HEAD找到相应的缓冲池POOL及其对应的内存队列,将要释放的内存的指针值放入相应内存队列的尾指针。
内存UB的配置表如下:
/*内存UB的配置表*/
T_UBCT g_aUBPoolConfigTable[]=
{
/*尺寸 总计 保留*/
{0, 0, 0},
{1, 120, 40},
{4, 100, 30},
{8, 80, 20},
{16, 50, 10},
{32, 20, 5},
{64, 10, 0},
{0, 0, 0}
};
综上所述,UB块分配算法由于实际运用中首先需要根据平时使用量统计不同大小的固定大小内存块的使用数量进行静态配置,所以会出现面对新的上层应用的时候需要重新配置静态配置表,这样就会需要一定的时间统计不同大小的内存块的使用量。而且可能由于对不同UB块数量需求的变化而修改配置表。另外如果配置的UB块数量不能满足需求会出现内存申请失败的情况。
发明内容
本发明所要解决的技术问题是提供一种基于现在所用的UB内存分配算法的动态分配算法,解决以前算法中必须存在的统计操作和空间浪费的缺点,一定程度上提高了内存的利用,而且具有伸缩性,可适应不同规模的嵌入式系统。
本发明所述的非缓冲内存动态分配方法,包括:
(1)预先向操作系统申请一块大的内存区;
(2)将申请的内存区设定为用户保留区;
(3)设置64,128,256,512,1024,2048,4096,8192八种UB的描述数组;
(4)当程序需要内存块时,根据所需的内存块大小首先在此大小UB的描述数组中查找有没有已经释放空置出来的UB块(标识为没有分配),如果有,则按顺序分配给需要的程序;如果没有,则从内存区中按顺序申请内存块,并根据申请内存块的大小在此大小的UB描述数组尾部添加,然后分配,同时修改描述数组中该块内存标识为已经分配;
(5)当释放内存块的时候,根据内存块的大小在UB描述数组中查找该内存块的位置并释放,同时修改描述数组中该块内存标识为没有分配。
采用本发明所述的UB的内存动态分配方法,与现有技术相比,解决了内存模块必须有的静态配置问题,同时解决了当静态配置数目不正确而导致的内存申请失败的情况,从而达到了简单性、可伸缩性的效果,节省了嵌入式系统的内存管理所需的统计静态配置数量的问题,降低了配置数目不正确的风险。
附图说明
图1所示是内存块划分的情况和缓冲池POOL的结构图;
图2所示是内存的操作维护算法图;
图3所示是申请内存的算法图;
图4是申请的内存区以及不同大小的UB描述数组示意图;
图5是内存申请的示意图;
图6是内存释放的示意图;
图7是本发明所述内存申请的流程图。
具体实施方式
下面结合附图,对本发明的具体实施作进一步的详细描述。
图4显示了预先向操作系统申请一块大的内存区1,如图中灰色所示,并设置了64,128,256,512,1024,2048,4096,8192八种UB的描述数组。
当需要操作系统分配一块64字节的内存时,根据所需的内存块大小首先在此64字节UB的描述数组中查找有没有已经释放空置出来的UB块(标识为没有分配),在图5,申请的内存区b和c中以小点4和斜杠3表示,在64字节的描述数组中以小点4表示,如果有,则按顺序分配;如果没有,则从内存区中按顺序申请内存块,图5申请的内存区d中小点4表示,并根据申请内存块的大小在此大小的UB描述数组尾部添加,图5中64字节的描述数组中以竖杠5表示,然后分配,同时修改描述数组中该块内存标识为已经分配。
由图6所知释放64字节内存的时候,在64字节UB描述数组中查找该内存块的位置并释放,同时修改描述数组中该块内存标识为没有分配,图6中用斜杠6来描述释放后的内存块。
图7是内存申请的流程图。根据需要分配的内存块大小到相应的描述数组中查找是否有可分配的内存块,有,就按顺序分配内存块;没有,就在内存区中申请相同大小的一块内存,如果申请不成功,即没有可给予的内存空间,则分配内存失败;如果申请成功则在此大小的UB描述数组尾部添加然后分配该内存块。
综上所述,本发明采用UB内存动态分配算法较以前的UB算法节省了嵌入式系统的内存管理所需的统计静态配置数量的问题,降低了配置数目不正确的风险。
Claims (4)
1.一种嵌入式实时操作系统中非缓冲内存动态分配方法,包括如下步骤:
(1)预先向所述嵌入式实时操作系统申请一块大的内存区;
(2)将申请的内存区设定为用户保留区;
其特征在于,还包括:
(3)在用户保留区中设置不同内存大小的UB描述数组;
(4)需要内存块时,根据所需内存大小,在相应大小的所述UB描述数组中查找已经释放空置出来、标识为没有分配的非缓冲块,按顺序分配给需要的程序,同时修改所述非缓冲描述数组中该块内存标识为已经分配;
(5)释放内存块时,根据内存块的大小,在相应大小的所述非缓冲描述数组中查找该内存块的位置并释放,同时修改描述数组中该内存块标识为没有分配。
2.如权利要求1所述的嵌入式实时操作系统中非缓冲内存动态分配方法,其特征在于,步骤(3)所述不同内存大小的非缓冲描述数组可为64,128,256,512,1024,2048,4096,8192八种。
3.如权利要求1所述的嵌入式实时操作系统中非缓冲内存动态分配方法,其特征在于,步骤(4)还包括,如果没有已经释放空置出来的非缓冲块,则从内存区中按顺序申请内存块,并根据申请内存块的大小在相应大小的所述非缓冲描述数组尾部添加,然后分配,同时修改所述非缓冲描述数组中该块内存标识为已经分配。
4.如权利要求3所述的嵌入式实时操作系统中非缓冲内存动态分配方法,其特征在于,内存区中没有可给予的内存空间,分配内存失败。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 03132075 CN1287290C (zh) | 2003-07-15 | 2003-07-15 | 嵌入式实时操作系统中非缓冲内存动态分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 03132075 CN1287290C (zh) | 2003-07-15 | 2003-07-15 | 嵌入式实时操作系统中非缓冲内存动态分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1570883A true CN1570883A (zh) | 2005-01-26 |
CN1287290C CN1287290C (zh) | 2006-11-29 |
Family
ID=34469861
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 03132075 Expired - Fee Related CN1287290C (zh) | 2003-07-15 | 2003-07-15 | 嵌入式实时操作系统中非缓冲内存动态分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1287290C (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012034322A1 (zh) * | 2010-09-14 | 2012-03-22 | 中兴通讯股份有限公司 | 嵌入式系统内存池配置方法及装置 |
CN102981919A (zh) * | 2012-11-02 | 2013-03-20 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN103064754A (zh) * | 2012-11-14 | 2013-04-24 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN103502906A (zh) * | 2011-03-30 | 2014-01-08 | 讯宝科技公司 | 运行操作系统的处理器核的动态分配 |
CN104090848A (zh) * | 2014-07-16 | 2014-10-08 | 云南大学 | 一种周期性大数据处理的内存管理方法及装置 |
CN105183542A (zh) * | 2015-08-13 | 2015-12-23 | 上海斐讯数据通信技术有限公司 | 一种内存管理方法及系统 |
CN105700952A (zh) * | 2014-11-26 | 2016-06-22 | 中兴通讯股份有限公司 | 嵌入式系统内存统计方法及装置 |
CN109298888A (zh) * | 2018-10-31 | 2019-02-01 | 杭州迪普科技股份有限公司 | 队列的数据存取方法及装置 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103399831B (zh) * | 2013-08-14 | 2015-11-18 | 江西航天海虹测控技术有限责任公司 | Nandflash存储器自动循环存储的实现方法 |
-
2003
- 2003-07-15 CN CN 03132075 patent/CN1287290C/zh not_active Expired - Fee Related
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012034322A1 (zh) * | 2010-09-14 | 2012-03-22 | 中兴通讯股份有限公司 | 嵌入式系统内存池配置方法及装置 |
CN103502906B (zh) * | 2011-03-30 | 2016-02-03 | 讯宝科技公司 | 运行操作系统的处理器核的动态分配 |
CN103502906A (zh) * | 2011-03-30 | 2014-01-08 | 讯宝科技公司 | 运行操作系统的处理器核的动态分配 |
CN102981919A (zh) * | 2012-11-02 | 2013-03-20 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN102981919B (zh) * | 2012-11-02 | 2015-07-01 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN103064754A (zh) * | 2012-11-14 | 2013-04-24 | 福建升腾资讯有限公司 | 快速定位错误源头的内存管理方法 |
CN104090848B (zh) * | 2014-07-16 | 2017-03-08 | 云南大学 | 一种周期性大数据处理的内存管理方法及装置 |
CN104090848A (zh) * | 2014-07-16 | 2014-10-08 | 云南大学 | 一种周期性大数据处理的内存管理方法及装置 |
CN105700952A (zh) * | 2014-11-26 | 2016-06-22 | 中兴通讯股份有限公司 | 嵌入式系统内存统计方法及装置 |
CN105183542A (zh) * | 2015-08-13 | 2015-12-23 | 上海斐讯数据通信技术有限公司 | 一种内存管理方法及系统 |
CN105183542B (zh) * | 2015-08-13 | 2019-07-12 | 上海斐讯数据通信技术有限公司 | 一种内存管理方法及系统 |
CN109298888A (zh) * | 2018-10-31 | 2019-02-01 | 杭州迪普科技股份有限公司 | 队列的数据存取方法及装置 |
US11385900B2 (en) | 2018-10-31 | 2022-07-12 | Hangzhou Dptech Technologies Co., Ltd. | Accessing queue data |
Also Published As
Publication number | Publication date |
---|---|
CN1287290C (zh) | 2006-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1276361C (zh) | 一种嵌入式系统内存管理的方法 | |
CN1271524C (zh) | 一种静态内存管理方法 | |
CN1287290C (zh) | 嵌入式实时操作系统中非缓冲内存动态分配方法 | |
CN1604051A (zh) | 用于通过面向对象的程序执行动态内存管理的方法和设备 | |
CN1266590C (zh) | 面向构件基于系统内核的进程池/线程池管理方法 | |
US20050149686A1 (en) | Method and apparatus for dynamic incremental defragmentation of memory | |
CN1722106A (zh) | 一种嵌入式实时操作系统中内存分配的方法 | |
CN1874538A (zh) | 一种呼叫事件并发处理方法 | |
CN1815629A (zh) | 一种闪存装置的脏块回收方法 | |
CN1684040A (zh) | 能够使用过去处理空间的信息处理器 | |
CN100351792C (zh) | 一种实时任务管理与调度方法 | |
CN1770125A (zh) | 一种分配内存的方法 | |
CN103488577A (zh) | 一种基于用途编号的用户程序内存分配及批量回收的方法及装置 | |
CN1851671A (zh) | 一种节省全局变量内存空间的方法 | |
CN1851676A (zh) | 一种嵌入式系统缓冲式内存分配方法 | |
CN1553693A (zh) | 一种通用的计费方法 | |
CN1881895A (zh) | 一种网络管理系统中的设备操作方法 | |
CN1946225A (zh) | 一种全分布式资源管理方法和系统 | |
CN1556475A (zh) | 嵌入式实时操作系统中内存释放的方法 | |
CN1866218A (zh) | 软件系统的资源管理方法 | |
CN1567249A (zh) | 计算机系统的内存管理方法 | |
CN1489334A (zh) | 一种静态动态结合的存储区管理的方法 | |
CN1315046C (zh) | 一种机群作业管理系统中分配计算结点的方法 | |
CN1430366A (zh) | 一种用于码分多址系统连续信道单元调度的方法及装置 | |
CN101059774A (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20061129 Termination date: 20190715 |