CN1556475A - 嵌入式实时操作系统中内存释放的方法 - Google Patents
嵌入式实时操作系统中内存释放的方法 Download PDFInfo
- Publication number
- CN1556475A CN1556475A CNA2004100320129A CN200410032012A CN1556475A CN 1556475 A CN1556475 A CN 1556475A CN A2004100320129 A CNA2004100320129 A CN A2004100320129A CN 200410032012 A CN200410032012 A CN 200410032012A CN 1556475 A CN1556475 A CN 1556475A
- Authority
- CN
- China
- Prior art keywords
- memory
- index
- memory block
- pool
- size
- 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
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
一种嵌入式实时操作系统中内存释放的方法,预先在系统中划出一块内存区;把划出的内存区设置成大小为2km的K种内存池;在系统初始化的时候,建立一个索引;当程序需要内存块时,首先在含有此大小内存块的描述数组中查找有没有空置出来的块,如果有,则按顺序分配给需要的程序;如果没有,则从内存区中按顺序申请内存块。在释放内存的时候,先求得索引的下标,通过索引确定被释放的内存块属于哪个内存池;然后进一步得到被释放内存块在内存池中的位置,最后释放。采用本发明所述的释放方法,解决了内存模块中可能出现的HEAD头被破坏而导致释放失败的情况可以提高系统的效率,降低了释放出错的风险。
Description
技术领域
本发明涉及计算机领域,具体地说,涉及计算机领域中的嵌入式实时多任务操作系统中的内存释放。
背景技术
嵌入式实时操作系统一般由任务调度管理、时间管理、任务同步和通信、内存管理等几部分组成。因为实时操作系统对内存的依赖性很强,因此内存管理作为操作系统的核心就显得很重要。
现在常用的固定大小内存释放方法是使用的HEAD(内存头)释放方法和二分法,其具体方法分别如下:
预先向操作系统申请一块大的内存区,将该内存区划分为若干内存池,每个内存池中内存块的大小固定,各种大小的内存块的数量可根据需要配置。
根据实际情况可以将缓冲池分为64,128,256,512,1024,2048,4096,8192八种大小,每种大小的缓冲池用循环队列来进行管理,提供申请内存和释放内存的接口。申请内存时根据申请内存的大小选择管理队列,从队列的头摘取一个缓冲区返回指针给申请者,释放时将内存追加到队列的尾部。
内存块划分的情况和缓冲池POOL的结构如附图1所示。
附图2所示是内存的操作维护算法图。内存队列是一个简单的循环队列,申请时从队列头取一空闲块,归还时放在列尾。由于内存队列是系统每个任务都会申请和归还的,设置了一个信号量来互斥。为了提高效率,内存队列采用二级索引:内存块的大小经过简单的移位得到一级索引值,一级索引值即为内存队列的编号。
HEAD释放方法:
归还内存时,从内存块的HEAD中找到相应的缓冲池POOL及其对应的内存队列,将要释放的内存的指针值放入相应内存队列的尾指针。
二分法释放方法:
通过对被释放的内存块的地址,采用二分法进行查找比较后,能正确释放所需释放的内存块。
现有技术中的HEAD释放方法,由于必须通过内存块的HEAD才能正确的释放所需要释放的内存块,而HEAD经常由于内存越界而被破坏,这样当HEAD被破坏的时候就会出现释放失败的情况。而采用二分法释放内存时,由于进行查找比较操作,会耗费比较多的时间,这样在实际释放时对释放的效率会产生一定的影响。
发明内容
本发明所要解决的技术问题是提供一种新的内存释放方法,能克服现有技术中的HEAD释放方法因HEAD被破坏导致释放失败的缺点,相对于二分法提高了内存的释放效率,而且具有伸缩性,可适应不同规模的嵌入式系统。
本发明的技术方案为:
1、一种嵌入式实时操作系统中内存释放的方法,包括:
1.1预先在系统中划出一块内存区,设大小为X;
1.2把划出的内存区根据需要设置成大小为m,2m,4m,8m,16m...2km的K种内存池,不同大小的内存池分别有nk块可供分配;
1.3在系统初始化的时候,建立一个索引,索引指向内存块所属的内存池的位置;建立索引的方法可以是:首先根据内存块的大小和块数求K个内存池的最大公约数,即求n0,2n1,4n2,8n3,16n4,32n5...2k-1nk-1这K个数字的最大公约数S,然后根据S和m以及X的值建立一个索引,索引的长度为X/(S×m)。
1.4当程序需要内存块时,根据所需的内存块大小,首先在含有此大小内存块的描述数组中查找有没有空置出来的块,如果有,则按顺序分配给需要的程序;如果没有,则从内存区中按顺序申请内存块,并根据申请内存块的大小在含有此大小的内存块的描述数组尾部添加,然后分配,同时修改描述数组中该块内存标识为已经分配;
1.5在释放内存的时候,先求得索引的下标,通过索引确定被释放的内存块属于哪个内存池;然后进一步得到被释放内存块在内存池中的位置,最后释放。
求得索引的下标的方法可以是:用释放时传入的释放地址*p2减去整个内存区的起始地址*p1所得差值再对(S×m)取模,所得的值就是索引的下标。
得到被释放内存块在内存池中的位置的方法可以是,用被释放内存块的地址减去所属内存池的起始地址,所得的结果对该内存池内存块大小取模,可得到被释放内存块在内存池中的位置。
采用本发明所述的释放方法,与现有技术相比,解决了内存模块中可能出现的HEAD头被破坏而导致释放失败的情况,同时由于S,m一定是一个2的n次方的数,所有的取模运算可以直接通过移位来完成,移位运算在计算机中的运行速度是非常快的,可以大大提高系统的效率,达到了简单性、可伸缩性的效果,降低了释放出错的风险。
附图说明
图1是内存块划分的情况和缓冲池POOL的结构图;
图2是内存的操作维护算法图;
图3是在一块大的内存区设置释放内存块的内存池示例图;
图4是本发明中系统内存的初始设置流程图;
图5是本发明中释放内存块的流程图。
具体实施方式
图3显示了预先向操作系统申请一块大的内存区并设置了大小为64(8块),128(4块),256(2块),512(1块)内存块的内存池(pool)。
图4是本发明中系统内存的初始设置流程图。先划出一块内存区,设大小为X,然后设置如图3所示的内存池。
图5是本发明的释放内存块的流程图。在发明的内容中已有详细描述,此处不再重复。
下面用一个实施例进行说明:
设a为所要释放的内存块位于内存池中的位置(a的值为0表示位于第一个内存池中,a的值为1表示位于第二个内存池中,依此类推)。
1.1预先在系统中划出一块内存区,设大小为2048;
1.2把划出的内存区根据需要设置成大小为64,128,256,512的4种内存池,不同大小的内存池分别有8,4,2,1块可供分配;
1.3在系统初始化的时候,建立一个索引,索引指向内存块所属的内存池的位置;建立索引的方法可以是:首先根据内存块的大小和块数求4个内存池的最大公约数,即求8,2×4,4×2,8×1这4个数字的最大公约数S=8,然后根据8和64以及4的值建立一个索引,索引的长度为4/(8×64)。
1.4当程序需要内存块时,根据所需的内存块大小,首先在含有此大小内存块的描述数组中查找有没有空置出来的块,如果有,则按顺序分配给需要的程序;如果没有,则从内存区中按顺序申请内存块,并根据申请内存块的大小在含有此大小的内存块的描述数组尾部添加,然后分配,同时修改描述数组中该块内存标识为已经分配;
1.5在释放内存的时候,先求得索引的下标,通过索引确定被释放的内存块属于哪个内存池;然后进一步得到被释放内存块在内存池中的位置,最后释放。
求得索引的下标的方法可以是:用释放时传入的释放地址*p2减去整个内存区的起始地址*p1所得差值(64×8+128×2)再对(8×64)取模,所得的值就是索引的下标,即a=1(表明所要释放的内存块位于大小为128的内存池中)。再用被释放内存块的地址减去所属内存池的起始地址的差值(128×2)对该内存池内存块大小值128取模得到值为2,这样就可以知道需释放的内存块的具体位置并释放该块内存,同时修改该块内存标识为没有分配。
综上所述,本发明采用hash释放方法较以前的方法解决了内存模块中可能出现的HEAD头被破坏而导致释放失败的情况,同时提高了释放的效率。
Claims (4)
1、一种嵌入式实时操作系统中内存释放的方法,包括:
1.1预先在系统中划出一块内存区,设大小为X;
1.2把划出的内存区根据需要设置成大小为m,2m,4m,8m,16m...2km的K种内存池,不同大小的内存池分别有nk块可供分配;
1.3在系统初始化的时候,建立一个索引,索引指向内存块所属的内存池的位置;
1.4当程序需要内存块时,根据所需的内存块大小,首先在含有此大小内存块的描述数组中查找有没有空置出来的块,如果有,则按顺序分配给需要的程序;如果没有,则从内存区中按顺序申请内存块,并根据申请内存块的大小在含有此大小的内存块的描述数组尾部添加,然后分配,同时修改描述数组中该块内存标识为已经分配;
1.5在释放内存的时候,先求得索引的下标,通过索引确定被释放的内存块属于哪个内存池;然后进一步得到被释放内存块在内存池中的位置,最后释放。
2、权利要求1所述的嵌入式实时操作系统中内存释放的方法,其特征在于,所述步骤1.3中的建立一个索引的方法为:首先根据内存块的大小和块数求K个内存池的最大公约数,即求n0,2n1,4n2,8n3,16n4,32n5...2k-1nk-1这K个数字的最大公约数S,然后根据S和m以及X的值建立一个索引,索引的长度为X/(S×m)。
3、权利要求1所述的嵌入式实时操作系统中内存释放的方法,其特征在于,所述步骤1.5中的求得索引的下标的方法为:用释放时传入的释放地址*p2减去整个内存区的起始地址*p1所得差值再对(S×m)取模,所得的值就是索引的下标。
4、权利要求1所述的嵌入式实时操作系统中内存释放的方法,其特征在于,所述步骤1.5中的得到被释放内存块在内存池中的位置的方法为,用被释放内存块的地址减去所属内存池的起始地址,所得的结果对该内存池内存块大小取模,可得到被释放内存块在内存池中的位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200410032012 CN1287291C (zh) | 2004-01-02 | 2004-03-25 | 嵌入式实时操作系统中内存释放的方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200410015037 | 2004-01-02 | ||
CN200410015037.8 | 2004-01-02 | ||
CN 200410032012 CN1287291C (zh) | 2004-01-02 | 2004-03-25 | 嵌入式实时操作系统中内存释放的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1556475A true CN1556475A (zh) | 2004-12-22 |
CN1287291C CN1287291C (zh) | 2006-11-29 |
Family
ID=34378874
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200410032012 Expired - Fee Related CN1287291C (zh) | 2004-01-02 | 2004-03-25 | 嵌入式实时操作系统中内存释放的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1287291C (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100395712C (zh) * | 2005-12-22 | 2008-06-18 | 华为技术有限公司 | 软件系统的资源管理方法 |
CN101266575B (zh) * | 2007-03-13 | 2010-05-19 | 中兴通讯股份有限公司 | 一种提高内存池利用率的方法 |
CN103699497A (zh) * | 2013-12-19 | 2014-04-02 | 京信通信系统(中国)有限公司 | 一种缓存分配方法及装置 |
CN102053868B (zh) * | 2009-11-04 | 2016-08-10 | 突触计算机系统(上海)有限公司 | 一种内存泄露检测方法和装置 |
US9424027B2 (en) | 2013-07-29 | 2016-08-23 | Ralph Moore | Message management system for information transfer within a multitasking system |
CN107391253A (zh) * | 2017-06-08 | 2017-11-24 | 珠海金山网络游戏科技有限公司 | 一种降低系统内存分配释放冲突的方法 |
CN107977265A (zh) * | 2016-10-25 | 2018-05-01 | 中兴通讯股份有限公司 | 内存初始化方法、装置和内存分配方法、装置 |
CN109298888A (zh) * | 2018-10-31 | 2019-02-01 | 杭州迪普科技股份有限公司 | 队列的数据存取方法及装置 |
CN109508235A (zh) * | 2018-09-28 | 2019-03-22 | 深圳市紫光同创电子有限公司 | 一种内存池管理方法、装置及计算机可读存储介质 |
CN110008020A (zh) * | 2019-03-05 | 2019-07-12 | 平安科技(深圳)有限公司 | 内存管理方法、装置、电子设备及计算机可读存储介质 |
CN111104347A (zh) * | 2019-12-23 | 2020-05-05 | 北京东土军悦科技有限公司 | 堆内存块查找方法、装置、设备及存储介质 |
-
2004
- 2004-03-25 CN CN 200410032012 patent/CN1287291C/zh not_active Expired - Fee Related
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100395712C (zh) * | 2005-12-22 | 2008-06-18 | 华为技术有限公司 | 软件系统的资源管理方法 |
CN101266575B (zh) * | 2007-03-13 | 2010-05-19 | 中兴通讯股份有限公司 | 一种提高内存池利用率的方法 |
CN102053868B (zh) * | 2009-11-04 | 2016-08-10 | 突触计算机系统(上海)有限公司 | 一种内存泄露检测方法和装置 |
US9424027B2 (en) | 2013-07-29 | 2016-08-23 | Ralph Moore | Message management system for information transfer within a multitasking system |
CN103699497A (zh) * | 2013-12-19 | 2014-04-02 | 京信通信系统(中国)有限公司 | 一种缓存分配方法及装置 |
CN107977265A (zh) * | 2016-10-25 | 2018-05-01 | 中兴通讯股份有限公司 | 内存初始化方法、装置和内存分配方法、装置 |
CN107391253A (zh) * | 2017-06-08 | 2017-11-24 | 珠海金山网络游戏科技有限公司 | 一种降低系统内存分配释放冲突的方法 |
CN107391253B (zh) * | 2017-06-08 | 2020-12-08 | 珠海金山网络游戏科技有限公司 | 一种降低系统内存分配释放冲突的方法 |
CN109508235A (zh) * | 2018-09-28 | 2019-03-22 | 深圳市紫光同创电子有限公司 | 一种内存池管理方法、装置及计算机可读存储介质 |
CN109298888A (zh) * | 2018-10-31 | 2019-02-01 | 杭州迪普科技股份有限公司 | 队列的数据存取方法及装置 |
US11385900B2 (en) | 2018-10-31 | 2022-07-12 | Hangzhou Dptech Technologies Co., Ltd. | Accessing queue data |
CN110008020A (zh) * | 2019-03-05 | 2019-07-12 | 平安科技(深圳)有限公司 | 内存管理方法、装置、电子设备及计算机可读存储介质 |
CN110008020B (zh) * | 2019-03-05 | 2024-04-09 | 平安科技(深圳)有限公司 | 内存管理方法、装置、电子设备及计算机可读存储介质 |
CN111104347A (zh) * | 2019-12-23 | 2020-05-05 | 北京东土军悦科技有限公司 | 堆内存块查找方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN1287291C (zh) | 2006-11-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1287291C (zh) | 嵌入式实时操作系统中内存释放的方法 | |
CN106104483B (zh) | 微处理器系统、操作微处理器系统的方法、可读介质 | |
CN1266590C (zh) | 面向构件基于系统内核的进程池/线程池管理方法 | |
CN101882089B (zh) | 一种采用多线程处理业务会话应用的方法及装置 | |
WO2020026158A2 (zh) | 基于卷积神经网络加速器的数据重用方法 | |
CN101493787A (zh) | 一种内存操作的管理方法及系统 | |
CN1818868A (zh) | 嵌入式操作系统多任务并行启动优化实现方法 | |
CN103927305B (zh) | 一种对内存溢出进行控制的方法和设备 | |
BR0112180A (pt) | Sistema de execução em computador conectado a uma rede de computador e acessìvel através de uma pluralidade de usuários simultâneos para especificação e determinação dos sistemas de moldagem a injeção, método automatizado para especificação e determinação dos sistemas de moldagem a injeção, sistema de execução em computador conectado a uma rede de computador para a produção de sistemas de moldagem a injeção, método empregado em um processo de execução em computador para a produção de sistemas de moldagem a injeção, e método para especificar e determinar remotamente um sistema de moldagem a injeção | |
CN1271524C (zh) | 一种静态内存管理方法 | |
CN114996077B (zh) | 一种多核并行仿真方法及实现多核并行仿真的平台架构 | |
CN110874271B (zh) | 一种海量建筑图斑特征快速计算方法及系统 | |
CN102331950A (zh) | 基于Linux定时任务的守护进程实现方法和系统 | |
CN1740974A (zh) | 一种线程调度管理方法和系统 | |
CN108765142B (zh) | 电子装置、多区块链整合控制方法和计算机可读存储介质 | |
CN1287290C (zh) | 嵌入式实时操作系统中非缓冲内存动态分配方法 | |
CN1740973A (zh) | 一种实时任务管理与调度方法 | |
CN105302602A (zh) | 一种云平台应用程序平滑在线升级方法 | |
CN106776072A (zh) | 消息推送方法及系统 | |
CN101056204A (zh) | 一种统计单板可靠性指标的方法和系统 | |
CN1946225A (zh) | 一种全分布式资源管理方法和系统 | |
CN1710598A (zh) | 一种能够避免打印越界错误的打印控制方法 | |
CN113703929B (zh) | 一种任务调度方法、系统、计算设备和存储介质 | |
CN107015883B (zh) | 一种动态数据备份方法及装置 | |
CN105354084A (zh) | 一种基于带宽调度的cpu任务迁移方法及系统 |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20170825 Address after: 136400 Jilin city of Shuangliao Province town village four Tun first Double Happiness Patentee after: Qiao Shuang Address before: 518057 Nanshan District, Guangdong high tech Industrial Park, science and Technology Industrial Park, ZTE building, block A, layer 6, layer Patentee before: ZTE Corporation |
|
TR01 | Transfer of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20061129 Termination date: 20180325 |
|
CF01 | Termination of patent right due to non-payment of annual fee |