CN108121603B - 一种嵌入式***内存管理方法 - Google Patents

一种嵌入式***内存管理方法 Download PDF

Info

Publication number
CN108121603B
CN108121603B CN201711379808.5A CN201711379808A CN108121603B CN 108121603 B CN108121603 B CN 108121603B CN 201711379808 A CN201711379808 A CN 201711379808A CN 108121603 B CN108121603 B CN 108121603B
Authority
CN
China
Prior art keywords
memory
pool
block
batch
application
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.)
Active
Application number
CN201711379808.5A
Other languages
English (en)
Other versions
CN108121603A (zh
Inventor
刘东栋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Anhui Wantong Post And Telecommunications Co ltd
Original Assignee
Anhui Wantong Post And Telecommunications Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Anhui Wantong Post And Telecommunications Co ltd filed Critical Anhui Wantong Post And Telecommunications Co ltd
Priority to CN201711379808.5A priority Critical patent/CN108121603B/zh
Publication of CN108121603A publication Critical patent/CN108121603A/zh
Application granted granted Critical
Publication of CN108121603B publication Critical patent/CN108121603B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System (AREA)

Abstract

一种嵌入式***内存管理方法,可解决嵌入式***应用中申请大量小片内存导致内存碎片化和申请效率降低下的问题。包括如下步骤:集中申请、集中释放;通过配置生成一个内存缓冲池,防止管理结构直接从动态内存中去申请小块内存;对批量内存池采用队列化的管理;对程序异常导致的内存坏块做了容错处理,对被破坏的内存块进行隔离。通过本发明可以有效克服传统的内存方法无法避免的内存碎片和内存申请效率问题,具有很好的容错性能,使得程序的运行更加健壮稳定。

Description

一种嵌入式***内存管理方法
技术领域
本发明涉及嵌入式操作***的内存管理技术领域,具体涉及一种嵌入式***内存管理方法。
背景技术
对于嵌入式***中常见的实地址模式(实际的地址和物理地址是一一对应的关系)下的内存管理目前有很多方法,常见内存分配方法及优缺点如下:
(1)首次适应方法。VxWorks操作***采用这种分配方法。使用该方法进行内存分配时,从空闲分区链首开始查找,直至找到一个能满足其大小需求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中。该方法倾向于使用内存中低地址部分的空闲分区,在高地址部分的空闲分区非常少被利用,从而保留了高地址部分的大空闲区。显然为以后到达的大作业分配大的内存空间创造了条件。缺点在于低址部分不断被划分,留下许多难以利用、非常小的空闲区,而每次查找又都从低址部分开始,这无疑会增加查找的开销。同时还会造成内存碎片化的问题。
(2)循环首次适应方法。该方法是由首次适应方法演变而成的。在为进程分配内存空间时,不再每次从链首开始查找,而是从上次找到的空闲分区开始查找,直至找到一个能满足需求的空闲分区,并从中划出一块来分给作业。该方法能使空闲中的内存分区分布得更加均匀,但将会缺乏大的空闲分区。
(3)最佳适应方法。该方法总是把既能满足需求,又是最小的空闲分区分配给作业。为了加速查找,该方法需求将所有的空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足需求的空闲区,必然是最优的。孤立地看,该方法似乎是最优的,但事实上并不一定。因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用的小空闲区。同时每次分配后必须重新排序,这也带来了一定的开销。
(4)最差适应方法。最差适应方法中,该方法按大小递减的顺序形成空闲区链,分配时直接从空闲区链的第一个空闲分区中分配(不能满足需要则不分配)。非常显然,如果第一个空闲分区不能满足,那么再没有空闲分区能满足需要。这种分配方法初看起来不太合理,但他也有非常强的直观吸引力:在大空闲区中放入程式后,剩下的空闲区常常也非常大,于是还能装下一个较大的新程式。最坏适应方法和最佳适应方法的排序正好相反,他的队列指针总是指向最大的空闲区,在进行分配时,总是从最大的空闲区开始查寻。该方法克服了最佳适应方法留下的许多小的碎片的不足,但保留大的空闲区的可能性减小了,而且空闲区回收也和最佳适应方法相同复杂。
嵌入式路由器设备中协议栈(如DHCP、RSVP、LDP等),在大量、多种路由产生和震荡的时候瞬间需要申请、释放大量的大小相等的小片内存,申请的数量随着时间的变化很不稳定,这种情况下申请内存的特点是不定期的申请和释放小片内存,由于一个***中除了有这种方式的申请内存外还有其它的进程也要申请内存,这样就会很容易形成内存碎片,一般情况下操作***都会维护一个空闲内存链表,随着碎片的增加,链的长度也会增加,每申请一块内存就会遍历一次空闲内存链表,链的长度越长申请内存的效率越低下,碎片多到一定程度时会使整个内存碎片化从而导致申请大块的内存失败的情况,而上述几种常见的内存管理方法都不能解决这个问题,需要提出一种新的内存分配策略。
发明内容
本发明提出的一种嵌入式***内存管理方法,可解决嵌入式***应用中申请大量小片内存导致内存碎片化和申请效率降低下的问题。
为实现上述目的,本发明采用了以下技术方案:
一种嵌入式***内存管理方法,包括提供了一个内存批量申请结构的索引,用来索引多个协议的多种批量内存申请应用。该索引给各种批量内存申请应用分配一个索引号,然后记录批量内存管理结构的入口地址。当某个协议进程需要申请内存时就根据索引号找到对应的批量内存管理结构入口地址来申请内存。批量内存管理结构每次获取一批固定大小的内存提供给协议进程使用,这一批内存都被空闲才一起释放,体现了集中申请集中释放的思想。
同时为了防止各个协议进程的内存批量申请结构直接到大块内存中去申请,本发明提供了一个批量内存大池,称之为BLOCK,初始化的时候静态的申请一大块地址连续的内存(为N个BLOCK的大小,N根据实际情况确定),专门供批量内存申请使用,当静态的内存使用完了才会从动态内存中去申请一个BLOCK。这样相当于在批量内存申请管理结构和动态内存之间作了一个缓冲。所有的批量内存申请应用都从这个内存池中申请所需的一批内存,我们称这一批内存为POOL,POOL是一块地址连续的内存,POOL切分成一定数量的小片内存,这些小片内存称作UINT,UINT是批量内存申请的最小单元。
在内存批量申请结构索引中记录了批量内存管理结构的入口地址,该地址指向一个批量内存管理结构。批量内存管理结构管理着某一种类型的批量内存的申请、释放、统计等。批量内存管理结构采用队列化管理,它从BLOCK中获取一个POOL,挂在管理结构的相应队列中,协议应用进程从管理结构的相应队列中获取想要的小片内存。批量内存管理结构通过三个链式队列来管理POOL,根据POOL的三种状态,即空状态、满状态和半满状态(可用状态),用上述三个队列管理起来。申请UINT总是从挂载可用POOL的队列中去申请;申请UNIT导致整个POOL满了,将整个POOL剔除出来挂载到满队列中,确保申请UINT能在第一时间申请到,而无需遍历队列操作;释放UINT导致整个POOL空了就将整个POOL挂载到空队列中去,然后根据一定的策略释放到BLOCK中去。同样BLOCK如果是从动态内存中扩展进来的,当它不再被使用的时候就会释放到动态内存中去。
应用模块初始使用的时候会注册一个内存批量申请结构索引,并初始化对应的内存批量申请结构,初始状态下,对应的内存批量申请结构管理一定数量的BLOCK,BLOCK的初始数量一般视情况而定,以正常使用时内存能够保证为前提,突发情况震荡时,内存批量申请结构再从动态内存中扩展,从而能够提高效率和减少碎片化。
应用模块使用中如果出现某些异常情况导致某一块或者某几块小片内存被破坏,此时申请或释放这块内存时,会校验内存片是否出现了错误,如果有错误则将其进行隔离,避免出现申请不到内存的现象。由于采用了循环队列方式管理小片内存,对坏块的隔离非常方便,只要将指向该小片的指针置为NULL,下次申请到这块内存的时候直接跳过,寻找下一个可用内存,因此实现了坏块隔离,被隔离的内存并不会永远处于隔离状态,当整个POOL都处于空闲状态时,会将整个POOL连同隔离块一起释放。
具体本发明的技术方案包括:
一种嵌入式***内存管理方法,包括如下步骤:
步骤1:集中申请、集中释放;每次集中申请一个批量的大小相等的小片内存给协议进程使用,同样,协议进程需要释放内存时也是一个批量集中释放回动态内存,同时通过建立一个索引号与管理结构一一对应的索引表的方式实现多个协议进程能够同时批量申请内存;
步骤2:通过配置生成一个内存缓冲池,防止管理结构直接从动态内存中去申请小块内存;而小块的内存是导致内存碎片的根源。因此建立内存缓冲池可以极大的减少碎片的产生。
步骤3:对批量内存池采用队列化的管理;能够提高申请释放内存的速度,同时减少从内存缓冲池中频繁申请释放批量内存池的机会,进一步的提高了内存的使用效率。
步骤4:对程序异常导致的内存坏块做容错处理,对被破坏的内存块进行隔离,避免错误的内存影响正常的内存申请和释放,被隔离的坏块最终能够被释放会缓冲池,继续利用。
进一步的,所述步骤1还包括:
步骤11:根据各个业务内存使用大小类和数量别初始化批量内存管理索引结构;
步骤12:批量内存管理索引结构下初始化定制大小的内存块,比如64K,1M字节等,内存块的大小可以根据实际使用需求确定,通过初始化参数传入;
进一步的,所述步骤2还包括:
步骤21:根据业务使用内存大小,在内存块中划分确定大小的内存池,比如内存块为64K字节,划分16个内存池,每个内存池就是4K字节。内存池的划分要根据业务批量申请和释放的特点来进行,尽量避免块内碎片和内存浪费。
进一步的,所述步骤3还包括:
步骤31:当业务需要申请内存时,就根据业务初始化时得到的内存管理索引句柄,从内存池中划分出内存单元块返回给使用者,内存池使用队列管理这些内存单元,分为空闲和使用状态两个队列,当所有的内存单元都处于空闲状态时,所属的内存池就处于空闲状态,可以释放回所属内存块队列中,当动态内存块中所有的内存池都空闲时就释放回***内存池中,如果是静态内存块,就处于空闲状态,等待其他业务初始化批量内存时使用。
进一步的,所述步骤21中内存池分为三种状态:满队列(full list)、可用队列(avail list)和空队列(empty list),根据步骤4中的内存单元使用情况使内存池处于某种状态的队列中。
本发明的有益效果:
1.将集中申请集中释放的内存申请方式应用于嵌入式路由器设备多个协议进程中,可以有效的克服大量申请和释放小片内存带来的内存的碎片化问题;
2.通过分多个队列管理的策略可以有效的克服内存链长度增加带来的内存申请效率降低的问题;
3.克服了个别小片内存长期占用导致整个内存大块回不到内存池中的性能问题。
4.解决了内存出现坏块导致内存申请不到的问题。总之,通过本发明可以有效克服传统的内存方法无法避免的内存碎片和内存申请效率问题,具有很好的容错性能,使得程序的运行更加健壮稳定。
附图说明
图1是本发明的内存管理结构索引数组结构示意图;
图2是本发明的BLOCK内存块管理结构示意图;
图3是本发明的批量内存BLOCK内存块结构;
图4是本发明的POOL管理结构示意图;
图5是本发明的内存池POOL的结构示意图。
具体实施方式
下面结合附图对本发明做进一步说明:
本实施例所述的嵌入式***内存管理方法,图1是内存管理结构索引数组的示意图,要实现的功能如下:
一个***中,可能有好几个协议类型有不同内存大小的批量内存申请需求,如A协议进程需要用到的是32字节的批量内存申请需求,B协议进程需要用到64字节的批量内存申请需求;或者A协议进程的不同的模块也会有不同大小的内存批量申请的需求,这就要求区分每一种大小的批量内存申请需求,对每一种大小的批量内存申请需求,都要对应一个批量内存申请的管理结构。本发明通过定义一个全局的M×2的二维数组称为内存管理结构索引数组来实现,M的大小可以根据实际情况确定。数组的元素[n][0]记录索引值index,[n][1]则记录指向相应的内存批量申请管理结构的指针。内存管理结构索引数组初始化后Index1~IndexM全部赋值为0,其对应的指针都置为空。初始化后的内存管理结构索引数组如图1所示。
当某协议进程需要一种大小的批量内存申请需求的时候,首先就要遍历整个内存管理结构索引数组,找到第一个索引值[i-1][0]为0的元素,将其值置为当前数组的下标加一的值i,作为index。index是唯一标识某一类型批量内存的凭证;然后初始化一个内存批量申请管理结构,将该内存批量申请管理结构的指针,记录到内存管理结构索引数组的第i项的[i][1]中。这个指针就作为某协议进程对应index索引下的申请批量内存的入口地址。同样删除这种类型的批量内存申请管理结构的时候,将相应的索引index值置为0,对应的指针置为空。
如图2所示BLOCK内存块管理结构示意图要实现的功能如下:
批量内存申请方式申请内存池POOL并不是从动态内存中直接申请,而是先从动态内存中申请一个大块内存池BLOCK,大小为64K或者更大(256K或者1M),BLOCK的大小究竟是多少可以根据实际的需要确定,此处只是举例说明。一个BLOCK有若干个大小相等的小内存池POOL,如64K的BLOCK可以切分成16个POOL,每个POOL有4K的大小,一个POOL包含了若干个小片内存UINT,这样一个POOL就是一批内存,作为一个整体被内存批量申请管理结构申请和释放。由于每个POOL的大小是一致的,不同index类型的批量内存申请应用都可以从这个大块内存中申请POOL。初始化的时候从动态内存中申请一大块地址连续的内存(为N个BLOCK的大小,N根据实际情况确定),专门供批量内存申请使用,这N个BLOCK称之为静态的BLOCK,静态的BLOCK永远不释放到动态内存中去;当静态的内存使用完了才会从动态内存中去申请一个BLOCK,称为动态的BLOCK,动态的BLOCK在整个都空闲的时候会释放回动态内存。这样相当于在批量内存申请管理结构和动态内存之间作了一个缓冲。BLOCK内存池之间通过双向链表的方式连接在一起,并定义一个块管理结构来管理。块管理结构用于管理BLOCK的申请、释放和统计工作,其结构如图所示。每一个BLOCK都有一个前向指针指向它的前一个,都有一个后向指针指向它的后一个,这样就形成一个双向的链,可以很方便的找到想要的BLOCK。
如图3所示BLOCK内存块结构,由于一个BLOCK有不同Index对应的批量内存申请,本发明将BLOCK划分成大小相等的POOL(如4K),而不是数量相等的POOL,这样做对通用性来说有很大的好处,如果采用数量相等的POOL,由于大小不等,就会造成POOL的大小各不相等,会造成POOL大小不匹配的问题,如两种应用分别申请3K和5K的POOL,3K的POOL夹在两个5k大小的POOL中间,当3K的POOL被释放时并不能被5K的批量内存申请应用申请到,造成内存的浪费。而采用大小相等的方式时,上一个进程释放的POOL内存别的进程申请的时候仍然是可以使用的,但是采取大小相等的POOL又会导致不同进程使用的POOL中小片内存个数是不一致的,这对于进程使用内存本身来说并没有太大的影响。同一个BLOCK之间的POOL也通过双向链表链接在一起,申请POOL时,可以通过BLOCK管理头结构中的链表入口节点通过指针来获取。
如图4所示内存批量申请管理结构示意图;内存批量申请管理结构是申请批量内存的入口,内存批量管理结构记录内存使用的一些设置和统计信息,如初始化标志、Index校验、内存单元的大小设定、使用的统计信息等。
内存池POOL有3种状态,即满的POOL内存池、部分被使用的POOL内存池和空的内存池。内存批量申请管理结构定义了三个管理队列,分别称为:满队列(full list)、可用队列(avail list)和空队列(empty list),满队列管理满的POOL内存池、可用队列管理部分被使用的POOL内存池,而空队列则管理空的POOL内存池,各个管理队列上的内存池之间用双向链表链接。初始状态满队列和可用队列都是空的,而空队列中挂入一定个数的POOL(一般设为3-6个)。它的管理策略是:(1)申请小片内存UNIT总是从可用队列(avail list)中去申请,一般是找到可用队列中的第一个POOL,当这个POOL被使用完了就转换成满的POOL,从可用队列(avail list)中摘除,挂入满队列(full list)的尾部;(2)当有内存释放的时候,如果释放前POOL的状态是满,处于满队列(full list)中,则将其从满队列中摘除,挂入可用队列(avail list)的尾部;(3)当有内存释放的时候,如果释放前POOL的状态是可用状态,处于可用队列(avail list)中,释放后判断该POOL是否还是可用状态,即判断是否释放空,如果没有则不进行任何操作,如果释放空了,则将其从可用队列(avail list)中摘除,挂入到空闲队列(empty list)中;(4)当空闲队列中的POOL个数大于初始化设定的个数(3-6个)时才会将多余的空闲POOL释放回BLOCK中去。
采用三个链式队列相比只采用一个队列的好处是,管理更加简单方便,申请速度更快。首先增加一个满队列,将使用完的POOL从所有的POOL中剔除出来,剩余可用的POOL则挂到avail队列中,申请内存首先找到可用队列avail list,挂在可用队列avail list上的第一个POOL总是有空闲的小片内存UNIT可供申请,不需要遍历链表查找,大大加快了申请的速度。同时还增加一个空闲队列,只采用一个队列管理时,只要有POOL空闲就会释放到大块内存中去,增加了从BLOCK中申请POOL的次数,当再次从BLOCK中获取POOL的时候需要再次对POOL进行初始化、计算、切分以及填充等操作,这个过程相对耗时,因此过多的进行这种操作会带来性能上的降低。而增加一个空闲队列可以大大减少从BLOCK中申请POOL的机会,首先增加的空闲队列中最多的时候有3-6块POOL可以使用(初始化时设定),只有空闲POOL数超过初始化设定的块数的时候才会释放到大块中,起到一定的缓冲作用,减少了POOL初始化的次数。
采用3个队列管理还可以克服某些小片内存长期占用导致整个大块内存释放不掉的隐性内存碎片问题,由于一种索引一般都只能给一种应用协议使用,从根本上减少了不同占用时长的内存同时使用一块大块内存的可能性,同时由于申请小片内存总是从avail队列中的第一个POOL中申请,也大大减少了内存申请的随机性,从而大大减少由于有小片内存长时间占用而导致的内存碎片问题。
如图5所示内存池POOL的结构示意图;
由于在POOL内存池中,每一块小片内存UNIT的大小都是相同的,POOL中的UNIT个数由初始化时配置的UNIT内存的大小决定,UNIT个数的计算公式如下:
UNIT的个数=(POOL总大小-POOL头部大小)/UNIT内存的大小。
如POOL不能正好被完全划分,则将划分不完的剩余内存填充上特殊值。
POOL管理结构中除了有指向下一POOL的指针和指向上一个POOL的指针外,还有一个指向记录UINT地址区头部的指针和指向记录UINT地址区尾部的指针,同时还有一个计数信号量。其方法是:如申请一个UINT内存,得到当前指向UINT地址区头部记录的UINT内存的首地址,同时指向记录UINT地址区头部的指针递增,计数信号量减一,;如释放一个UINT内存,指向记录UINT地址区尾部的指针递增,计数信号量加一,将指向UINT内存的首地址记录到UINT地址区。
当某块UNIT被破坏时,为了使得申请内存不受到影响,本发明采用了内存坏块隔离技术,如图5所示,当内存申请校验的时候发现内存单元被破坏了,就将POOL管理头结构指针区的指向这一块内存的指针置为NULL,申请的时候head头指针指到这个地址发现是NULL就不申请这一块内存,跳过这一块接着向后寻找可用UNIT,这样就相当于把这块内存隔离了,同时POOL管理结构的统计数据做相应的修改。同时POOL管理结构中增加一个统计内存单元被破坏的个数的字段。POOL中除了被隔离的内存都处于空闲状态时,则释放整块POOL。被隔离的坏块又回到缓冲池中,随着下一次申请时的初始化,这块内存又会被利用。
以上所述的实施例仅仅是对本发明的优选实施方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案作出的各种变形和改进,均应落入本发明的保护范围内。

Claims (5)

1.一种嵌入式***内存管理方法,其特征在于:包括如下步骤:
步骤1:集中申请、集中释放;每次集中申请一个批量的大小相等的小片内存给协议进程使用,同样,协议进程需要释放内存时也是一个批量集中释放回动态内存,同时通过建立一个索引号与管理结构一一对应的索引表的方式实现多个协议进程能够同时批量申请内存;
步骤2:通过配置生成一个内存缓冲池,防止管理结构直接从动态内存中去申请小块内存;批量内存申请方式申请内存池POOL并不是从动态内存中直接申请,而是先从动态内存中申请一个大块内存池BLOCK,大小为64K或者更大,一个BLOCK有若干个大小相等的小内存池POOL,一个POOL包含了若干个小片内存UINT,这样一个POOL就是一批内存,作为一个整体被内存批量申请管理结构申请和释放,由于每个POOL的大小是一致的,不同index类型的批量内存申请应用都可以从这个大块内存中申请POOL;初始化的时候从动态内存中申请一大块地址连续的内存,专门供批量内存申请使用,这N个BLOCK称之为静态的BLOCK,静态的BLOCK永远不释放到动态内存中去;当静态的内存使用完了才会从动态内存中去申请一个BLOCK,称为动态的BLOCK,动态的BLOCK在整个都空闲的时候会释放回动态内存,这样相当于在批量内存申请管理结构和动态内存之间作了一个缓冲;BLOCK内存池之间通过双向链表的方式连接在一起,并定义一个块管理结构来管理,块管理结构用于管理BLOCK的申请、释放和统计工作;
步骤3:对批量内存池采用队列化的管理;
步骤4:对程序异常导致的内存坏块做容错处理,对被破坏的内存块进行隔离,避免错误的内存影响正常的内存申请和释放,被隔离的坏块最终能够被释放会缓冲池,继续利用。
2.根据权利要求1所述的嵌入式***内存管理方法,其特征在于:所述步骤1还包括:
步骤11:根据各个业务内存使用大小类和数量别初始化批量内存管理索引结构;
步骤12:批量内存管理索引结构下初始化定制大小的内存块,内存块的大小可以根据实际使用需求确定,通过初始化参数传入。
3.根据权利要求2所述的嵌入式***内存管理方法,其特征在于:所述步骤2还包括:
步骤21:根据业务使用内存大小,在内存块中划分确定大小的内存池,内存池的划分要根据业务批量申请和释放的特点来进行,尽量避免块内碎片和内存浪费。
4.根据权利要求3所述的嵌入式***内存管理方法,其特征在于:所述步骤3还包括:
步骤31:当业务需要申请内存时,就根据业务初始化时得到的内存管理索引句柄,从内存池中划分出内存单元块返回给使用者,内存池使用队列管理这些内存单元,分为空闲和使用状态两个队列,当所有的内存单元都处于空闲状态时,所属的内存池就处于空闲状态,可以释放回所属内存块队列中,当动态内存块中所有的内存池都空闲时就释放回***内存池中,如果是静态内存块,就处于空闲状态,等待其他业务初始化批量内存时使用。
5.根据权利要求4所述的嵌入式***内存管理方法,其特征在于:所述步骤21中内存池分为三种状态:满队列、可用队列和空队列,根据步骤4中的内存单元使用情况使内存池处于某种状态的队列中。
CN201711379808.5A 2017-12-20 2017-12-20 一种嵌入式***内存管理方法 Active CN108121603B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711379808.5A CN108121603B (zh) 2017-12-20 2017-12-20 一种嵌入式***内存管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711379808.5A CN108121603B (zh) 2017-12-20 2017-12-20 一种嵌入式***内存管理方法

Publications (2)

Publication Number Publication Date
CN108121603A CN108121603A (zh) 2018-06-05
CN108121603B true CN108121603B (zh) 2021-11-02

Family

ID=62229516

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711379808.5A Active CN108121603B (zh) 2017-12-20 2017-12-20 一种嵌入式***内存管理方法

Country Status (1)

Country Link
CN (1) CN108121603B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109508235B (zh) * 2018-09-28 2020-12-15 深圳市紫光同创电子有限公司 一种内存池管理方法、装置及计算机可读存储介质
CN109684232B (zh) * 2018-10-23 2021-09-14 许继集团有限公司 一种嵌入式协议栈内存管理方法
CN110109677B (zh) * 2019-05-07 2023-08-29 北京善讯互动科技有限公司 一种动态对象缓存池分配方法
CN110727514A (zh) * 2019-10-12 2020-01-24 北京无线电测量研究所 一种基于索引队列的内存管理方法以及嵌入式设备
CN111162937B (zh) * 2019-12-20 2023-05-16 北京格林威尔科技发展有限公司 一种在传输设备中实现内存池的方法及装置
CN112231128B (zh) * 2020-09-11 2024-06-21 中科可控信息产业有限公司 内存错误处理方法、装置、计算机设备和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1635482A (zh) * 2003-12-29 2005-07-06 北京中视联数字***有限公司 一种嵌入式***内存管理的方法
CN103631721A (zh) * 2012-08-23 2014-03-12 华为技术有限公司 一种隔离内存中坏块的方法及***
CN106681829A (zh) * 2016-12-09 2017-05-17 上海斐讯数据通信技术有限公司 一种内存管理方法及***

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10108539B2 (en) * 2013-06-13 2018-10-23 International Business Machines Corporation Allocation of distributed data structures
US9740481B2 (en) * 2013-12-03 2017-08-22 Samsung Electronics Co., Ltd. Electronic device and method for memory allocation in electronic device

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1635482A (zh) * 2003-12-29 2005-07-06 北京中视联数字***有限公司 一种嵌入式***内存管理的方法
CN103631721A (zh) * 2012-08-23 2014-03-12 华为技术有限公司 一种隔离内存中坏块的方法及***
CN106681829A (zh) * 2016-12-09 2017-05-17 上海斐讯数据通信技术有限公司 一种内存管理方法及***

Also Published As

Publication number Publication date
CN108121603A (zh) 2018-06-05

Similar Documents

Publication Publication Date Title
CN108121603B (zh) 一种嵌入式***内存管理方法
US20220091739A1 (en) Write type based crediting for block level write throttling to control impact to read input/output operations
CN109154917B (zh) 存储***和固态硬盘
US6757802B2 (en) Method for memory heap and buddy system management for service aware networks
CN104090847B (zh) 一种固态存储设备的地址分配方法
US7536488B2 (en) Buffer controller and management method thereof
US10740006B2 (en) System and method for enabling high read rates to data element lists
US20160132541A1 (en) Efficient implementations for mapreduce systems
US10055153B2 (en) Implementing hierarchical distributed-linked lists for network devices
US10394606B2 (en) Dynamic weight accumulation for fair allocation of resources in a scheduler hierarchy
CN101231619A (zh) 一种基于非连续页的动态内存管理方法
WO2019127104A1 (zh) 高速缓存中资源调整方法、数据访问方法及装置
WO2020199760A1 (zh) 数据存储方法、存储器和服务器
US9785367B2 (en) System and method for enabling high read rates to data element lists
CN109871365A (zh) 一种分布式文件***
CN101610197A (zh) 一种缓冲区管理方法及其***
US9767014B2 (en) System and method for implementing distributed-linked lists for network devices
US9811403B1 (en) Method, apparatus and system for performing matching operations in a computing system
US10067690B1 (en) System and methods for flexible data access containers
CN113127183B (zh) 一种用户态协议栈中的内存分配方法和装置
CN111831397A (zh) 处理io请求的方法、装置、设备及存储介质
US8898419B2 (en) System and method for balancing block allocation on data storage devices

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant