一种多线程处理器动态内存管理系统及方法

文档序号:6609048阅读:183来源:国知局
专利名称:一种多线程处理器动态内存管理系统及方法
技术领域
本发明涉及数据处理领域,具体地说,涉及一种多线程处理器动态内存管理系统及方法。
背景技术
随着对处理能力和实时性要求的提高,单核处理器越来越难以满足通讯设备对高性能处理能力的需求,仅仅通过提高频率和增大缓存只能小幅提升性能,随之而来的是功耗和成本的增加。而多核多线程处理器是将两个或者更多个处理核心集成在一个处理器当中,从而提高了处理能力。以RMI公司的XLR系列处理器为例,该系列处理器集成了高达8个RMI增强型MIPS64RISC CPU内核,每个内核支持4个线程,因此XLR处理器最高可支持32个线程,即一个多核多线程处理器的处理能力相当于32个并行的单核处理器。
由于多核多线程处理器将多个内核集成到处理器内部,多核多线程处理器的多个内核线程之间可以通过处理器内部消息机制进行通讯,极大程度地提高了内核线程之间的通讯能力,例如XLR系列处理器采用了RMI公司独特的FMN(Fast Message Network)技术把XLR中的多个内核线程连接起来。FMN是64bit宽度的消息环,带宽=核的主频×64bit(举例1Ghz的XLR,FMN的带宽为64Gbps)。FMN可以使得各个内核线程之间在同一时间各自并行的传递数据,避免了通常的总线所必须的“仲裁”阶段,使得效率极大的提高。
多核多线程处理器多个内核的不同线程可以分为主控内核线程和非主控内核线程,每个内核线程都可以独立运行Linux或VxWorks等嵌入式操作系统,因此通常需要根据不同线程上运行的嵌入式操作系统任务和进程的数量完成内存在多个内核线程之间的静态分配,保证各内核线程程序运行对内存的基本需求。
在嵌入式系统中对内存的分配要求实时性、可靠性和高效性,嵌入式系统内存是一种有限的资源,可配置的内存容量也是很有限的,如果内存在多核处理器的多个内核线程之间进行静态分配,由于不同时刻不同内核线程对内存的需求不同,可能会导致某一时刻空闲内核线程占有较多的空闲内存,而初始分配较少的内核线程需要更多的内存却无法申请,造成内存资源的浪费。在多核处理器的内核线程之间开辟共享内存只是一个解决多核处理器共享局部数据的方法,在中国专利CN200510087321和中国专利CN200510032308中有阐述,但并没有解决如何在多个内核线程之间动态分配内存,提高嵌入式系统的内存使用效率的问题。

发明内容
本发明要解决的技术问题是提供一种多线程处理器动态内存管理系统及方法,避免某一时刻空闲内核线程占有较多的空闲内存,而初始分配较少的内核线程需要更多的内存却无法申请的情况,提高系统的内存使用效率。
为了解决上述技术问题,本发明提供了一种多线程处理器动态内存管理系统,在所有内核线程中包括主控内核线程,用于对系统主存储器中的内存进行分配,还包括消息处理模块,用于接收所有内核线程发送的申请内存消息、释放内存消息,并发送至主控内核线程;并且接收来自主控内核线程的分配内存消息、回收内存消息,并发送至相应内核线程;主控内存管理模块,运行在主控内核线程,与系统主存储器及所述消息处理模块连接,用于接收来自所述消息处理模块的申请内存消息,从系统主储存器的内存中分配内存后发送分配内存消息至所述消息处理模块,并且接收来自所述消息处理模块的释放内存消息;内存监控模块,运行在主控内核线程,与所述消息处理模块和所述主控内存管理模块分别连接,用于查询各内核线程的内存使用情况,根据使用情况对内存进行回收,并且定期发送回收内存消息至所述消息处理模块。
进一步,所有内核线程分别包括消息处理模块,所述消息处理模块彼此相互连接。
进一步,所有内核线程分别包括内存管理模块,与系统主存储器及运行在同一内核线程的消息处理模块连接。
本发明还提供了一种多线程处理器动态内存管理方法,包括以下步骤(1)主控内核线程从系统内存中申请一段内存作为内存池;(2)所有内核线程向所述主控内核线程发送申请内存消息,主控内核线程收到所述申请内存消息后,从所述内存池中分配空闲的内存给申请内存的内核线程,并向申请内存的内核线程发送分配内存消息;(3)所述主控内核线程查询内核线程已申请的内存的使用情况,定期发送回收内存消息;(4)内核线程收到所述回收内存消息后,对内存进行归还,并向主控内核线程发送释放内存消息。
进一步,步骤(1)中,所述内存池由主控内存管理模块维护。
进一步,在步骤(3)中,由内存监控模块查询内核线程已申请的内存的使用情况,定期发送回收内存消息。
进一步,在步骤(4)中发送释放内存消息给所述主控内存管理模块。
进一步,步骤(1)中所述内存池的大小大于等于各内核线程的内存需求和维护内存管理信息的开销总和。
进一步,步骤(1)中所述主控内存管理模块将所述内存池划分成内存块,所述内存块的大小为2的N次方字节,N大于等于20。
进一步,在步骤(2)中,内核线程通过消息处理模块向主控内核线程发送申请内存消息,分配内存后,主控内存管理模块向申请内存的内核线程发送内存分配消息,同时记录各内存块的使用信息;所述内存分配消息包括内存块首地址的物理地址、内存块大小、内存块数量、内存块类型。
进一步,步骤(1)和步骤(2)之间还包括以下步骤
(1a)划分完内存块之后,所述主控内存管理模块向各内核线程发送广播消息,通知各内核线程内存初始化完成。
进一步,步骤(2)中还包括,各内核线程收到分配消息后,判断当前内存块是否在该内核线程的内存访问空间中,如内存块为私有内存块,则将内存块映射到当前内核线程的地址空间;如内存块为共享内存块,则向需要共享该内存块的内核线程发送消息,增加内存块映射。
进一步,步骤(2)中还包括,内核线程对申请到的内存块进行二次划分成更小的内存单元,每个内存单元的使用信息由划分该内存块的内核线程的内存管理模块维护,所述内存单元大小为2的M次方字节,M大于等于5且小于等于15。
进一步,步骤(3)中还包括,内存监控模块根据轮转算法依次对各内核线程定期发送回收内存消息,如无法回收足够数量的内存,则主控线程从系统内存中再申请一段内存作为内存池。
进一步,步骤(4)中还包括,如内存块为私有内存块,同时清除该内存块在该内核线程地址空间的映射关系;如内存块为共享内存块,则发送消息通知所有使用该共享内存的内核线程清除该内存块在该内核线程地址空间的映射关系。
进一步,步骤(4)中还包括,所述内存监控模块定期对每个内存块进行超时检查,如发现内存块信息错误,则主动收回该内存块。
进一步,还包括步骤(5)内核线程继续向主控内核线程发送申请内存消息。
采用本发明所述方法,通过利用处理器的强大的内部消息机制,由主控内核线程管理系统的内存池,并进行内存的分配和回收,将多核处理器并行申请内存的问题串行化,避免了硬件仲裁器,很好地解决了多核多线程处理器内核线程间的内存静态分配问题。同时由于将内存块划分为共享内存块和私有内存块,以及各内核线程将申请到的内存块继续划分为更小的内存单元,极大地提高了系统内存资源在各个内核线程之间的使用效率,增强了处理器内存管理的可靠性,减轻了操作系统分配内存、释放内存的系统调用的消耗。


图1是多核多线程处理器的结构示意图;图2是本发明内存池、内存块、内存单元的划分示意图;图3是本发明第一实施例多线程处理器动态内存管理方法流程图;图4是本发明第二实施例多核多线程处理器动态内存管理系统示意图;图5是本发明第二实施例多线程处理器动态内存管理方法流程图;图6是本发明内存初始化及分配方法流程图;图7是本发明内存申请方法流程图;图8是本发明内存回收方法流程图;图9是本发明内存块定期检查方法流程图。
具体实施例方式
本发明通过利用多核处理器的内部消息机制作为不同内核线程的内存获取和释放的消息通路,将空闲的内核线程占用的空闲内存进行回收,完成内存在各个内核线程之间的动态共享使用,克服在内存资源受限的嵌入式系统中,在各内核线程静态分配内存后导致空闲的内核线程占有较多的内存无法给其他内核线程使用的缺点。
下面结合附图对本发明的优选实施例作进一步的详细说明参照图1所示,为多核多线程处理器的结构示意图。多核处理器系统包括系统主存储器100、多核处理器110。多核处理器110进一步包括内核114、快速消息网络112、二级缓存(L2 Cache)115。内核114进一步包括一级缓存(L1 Cache)111、内核线程113。
每个多核处理器110包括多个内核114,每个内核114同时包含多个内核线程113。多个内核114共享二级缓存115,多个内核线程113共享一级缓存111。每个内核线程113拥有完全独立的寄存器组资源,在线程调度时不需要进行上下文切换,从而保证每个内核线程113的高效、独立运行。
优选实施例一参照图2所示,为本发明内存池、内存块、内存单元的划分示意图。系统主存储器100被主控内核线程划分为多个内存池210,如图中内存池0、内存池1直至内存池S。每个内存池210被进一步划分为多个空闲内存块211,如图中内存池0的情形所示。实际使用中有些空闲内存块211被内核线程申请占用,转变为分配内存块212,由获得该分配内存块212的内核线程负责管理和维护,如图中内存池1的情形所示。内核线程获得分配内存块212之后,将分配内存块进一步划分为空闲内存单元233,实际使用中有些空闲内存单元233被申请占用,转变为分配内存单元234,如图中内存池S的情形所示。当然,图中仅实例性的示出了内存池、内存块、内存单元的划分,具体应用中内存池210的具体情形可能与图中所示并不相同,要视具体情形而定。图2所示的内存池、内存块、内存单元的划分对于实施例二也是同样适用的。
参照图3所示,为本发明第一实施例多线程处理器动态内存管理方法流程图。该方法包括以下步骤步骤301主控内核线程从系统内存中申请一段内存作为内存池;步骤302所有内核线程向所述主控内核线程发送申请内存消息,主控内核线程收到所述申请内存消息后,从所述内存池中分配空闲的内存给申请内存的内核线程,并向申请内存的内核线程发送分配内存消息;步骤303所述主控内核线程查询内核线程已申请的内存的使用情况,定期发送回收内存消息;步骤304内核线程收到所述回收内存消息后,对内存进行归还,并向主控内核线程发送释放内存消息。
优选实施例二
参照图4所示,为本发明第二实施例多核多线程处理器动态内存管理系统示意图。多核多线程处理器110的动态内存管理系统包括多个内核线程,其中有主控内核线程403、并实例性的标示出了一个其他内核线程404。主控内核线程403进一步包括内存监控模块400、主控内存管理模块401、消息处理模块402。从图中可以明显地看出,内存管理模块和消息处理模块也同时在其他内核线程运行,如运行在其他内核线程404的内存管理模块405、消息处理模块406。除内核线程404外,其他的内核线程的模块结构可以依此类推,此处不再赘述。
运行在各个内核线程的内存管理模块与系统主存储器100相连;运行在各个内核线程的消息处理模块与内存管理模块相连;运行在主控内核线程403的内存监控模块400与运行在主控内核线程403的消息处理模块402、主控内存管理模块401分别相连。主控内核线程403通过运行在其上的主控内存管理模块401管理系统主存储器100中内存的分配和回收,主控内核线程403和其他内核线程404通过基于快速消息网络112的消息处理模块402、消息处理模块406通讯,完成系统主存储器100的使用和管理。为了叙述方便,图中仅对两个消息处理模块做了附图标记,由图中可以明显看出,其他消息处理模块同样通过快速消息网络112相互连接,进而,所有内核线程通过基于快速消息网络112连接起来的所有消息处理模块进行通讯。
参照图5所示,为本发明第二实施例多线程处理器动态内存管理方法流程图。该方法采用图4所示的动态内存管理系统进行内存管理,包括以下步骤步骤501确定主控内核线程;由主控内核线程统一管理系统内存的分配和回收,所有其他线程通过消息处理模块向主控内存管理模块申请和释放内存;步骤502上电后主控内核线程首先从系统内存中申请一段内存作为内存池,此段内存池一旦申请成功即由主控内存管理模块负责维护;内存池的大小必须大于等于各内核线程的内存需求和维护内存管理信息的开销总和;
步骤503主控内存管理模块将申请到的这段内存划分成一定数量的内存块,以块为单位负责在各内核线程分配和回收;考虑分配和回收效率,划分的内存块大小为2的N次方字节(通常N≥20),每个内存块的使用信息都由主控内存管理模块维护;步骤504初始化完成后,主控内存管理模块向各内核线程发送广播消息,通知各内核线程内存初始化完成;步骤505收到主控内核线程发送的内存初始化完成消息后,包括主控内核线程在内的所有内核线程通过消息处理模块向主控内核线程发送申请内存消息,申请内存块;主控内存管理模块收到申请内存消息后,根据申请内存块的大小、类型从内存池中分配空闲的内存块;同时,主控内存管理模块向申请内存块的内核线程发送分配内存消息,记录各内存块的使用信息;主控内核线程发送的分配内存消息应包含各内存块首地址的物理地址、内存块大小、内存块数量、内存块类型等信息;步骤506各内核线程收到主控内核线程的分配消息后,判断当前内存块是否在该内核线程的内存访问空间中,如内存块类型为私有内存块,则将内存块映射到当前内核线程的地址空间中即可;如内存块类型为共享内存块,则应向需要共享该内存块的内核线程发送消息,增加内存块映射,即可作为共享内存使用;步骤507内核线程根据实际需要对申请到的内存块进行二次划分成更小的内存单元,每个内存单元的使用信息由划分该内存块的内核线程的内存管理模块维护;考虑分配和回收效率,划分的内存单元大小通常为2的M次方字节(通常5≤M≤15);步骤508内存监控模块定期查询各内核线程已申请的内存块的使用情况,当主控内存管理模块维护的内存块数量下降到较低水平时,根据轮转算法依次对各内核线程拥有的内存块定期发送回收内存消息,避免同一内核线程申请和释放内存块的振荡效应;
如无法回收足够数量的内存块,则主控线程需要从系统内存中再申请一段内存作为内存池,保证其他内核线程的申请;步骤509收到内存监控模块发送的回收内存块消息的内核线程根据实际情况,对已申请但目前暂未使用的内存块进行归还,并发送释放内存消息给主控内存管理模块。
如内存块类型为私有内存块,同时清除该内存块在该内核线程地址空间的映射关系;如内存块类型为共享内存块,则发送消息通知所有使用该共享内存的内核线程清除该内存块在该内核线程地址空间的映射关系;同时内存监控模块为防止内存泄漏定期对每个内存块进行超时检查,一旦发现内存块信息错误,则主动收回该内存块;步骤510释放内存块后,如需继续申请内存块,则内核线程继续向主控内核线程发送申请内存块消息。
展开来说,本发明的动态内存管理方法包括内存初始化及分配、内存申请、内存回收、内存检查四个分流程,如图6、图7、图8、图9所示。
参照图6所示,为本发明内存初始化及分配方法流程图。该方法包括以下步骤步骤601系统上电;步骤602主控内核线程在系统主存储器中建立多个内存池,每个内存池可划分为多个相同或不同大小的空闲内存块,并建立内存块维护信息;步骤603主控内核线程通过消息处理模块向其他内核线程发送内存池初始化完成消息;步骤604主控内核线程得到从其他内核线程发来的消息,判断是否为申请空闲内存块消息,如果是,执行步骤606,否则执行步骤605;步骤605转去处理其他消息,执行步骤604;步骤606主控内核线程判断内存池中的空闲内存块是否够分配;是则执行步骤608,否则执行步骤607;
步骤607在系统存储器中建立新的内存池,并初始化,执行步骤606;步骤608从内存池中分配相应大小、数量的空闲内存块,并修改维护信息,结束。
参照图7所示,为本发明内存申请方法流程图。该方法包括以下步骤步骤701所有内核线程等待从主控内核线程收到内存池初始化完成消息,如果收到,则执行步骤702,否则继续等待;步骤702内核线程发送申请空闲内存块消息;步骤703内核线程根据申请得到的空闲内存块大小、数量添加地址映射关系,根据类型判断是否需要发送消息到相应的内核线程;步骤704内核线程对申请得到的空闲内存块进行初始化,将每个空闲内存块划分为多个相同或不同大小的空闲内存单元,以供该内核线程使用,结束。
参照图8所示,为本发明内存回收方法流程图。该方法包括以下步骤步骤801内核线程收到内存监控模块定期发送的回收内存块消息;步骤802内核线程判断当前是否有空闲内存块,如果有,将内存块进行归还,执行步骤703;否则退出,结束。
步骤803内核线程取消该内存块的地址映射,并根据类型判断是否需要发送消息到相应内核线程;步骤804内核线程向主控内核线程发送释放内存块消息,结束。
参照图9所示,为本发明内存块定期检查方法流程图。该方法包括以下步骤步骤901根据已分配内存块的使用时间,由内存监控模块定期发送内存块检查消息;步骤902收到内存块检查消息的内核线程判断当前内存块信息是否正确;步骤903如果内存块信息错误,则取消该内存块的地址映射,如果该内存块当前正在被该内核线程使用,则锁定该内存块只能释放已分配内存单元,直至变为空闲内存块,并根据类型判断是否需要发送消息到相应内核线程;步骤904主控内核线程回收空闲内存块到相应的内存池中,结束。
当然,本发明的优选实施例不是对本发明技术方案的限定,对本发明的技术特征所作的等同替换,或相应的改进,仍属于本发明的保护范围之内。
权利要求
1.一种多线程处理器动态内存管理系统,在所有内核线程中包括主控内核线程,用于对系统主存储器中的内存进行分配,其特征在于,还包括消息处理模块,用于接收所有内核线程发送的申请内存消息、释放内存消息,并发送至主控内核线程;并且接收来自主控内核线程的分配内存消息、回收内存消息,并发送至相应内核线程;主控内存管理模块,运行在主控内核线程,与系统主存储器及所述消息处理模块连接,用于接收来自所述消息处理模块的申请内存消息,从系统主储存器的内存中分配内存后发送分配内存消息至所述消息处理模块,并且接收来自所述消息处理模块的释放内存消息;内存监控模块,运行在主控内核线程,与所述消息处理模块和所述主控内存管理模块分别连接,用于查询各内核线程的内存使用情况,根据使用情况对内存进行回收,并且定期发送回收内存消息至所述消息处理模块。
2.如权利要求1所述的多线程处理器动态内存管理系统,其特征在于,所有内核线程分别包括消息处理模块,所述消息处理模块彼此相互连接。
3.如权利要求2所述的多线程处理器动态内存管理系统,其特征在于,所有内核线程分别包括内存管理模块,与系统主存储器及运行在同一内核线程的消息处理模块连接。
4.一种多线程处理器动态内存管理方法,其特征在于,包括以下步骤(1)主控内核线程从系统内存中申请一段内存作为内存池;(2)所有内核线程向所述主控内核线程发送申请内存消息,主控内核线程收到所述申请内存消息后,从所述内存池中分配空闲的内存给申请内存的内核线程,并向申请内存的内核线程发送分配内存消息;(3)所述主控内核线程查询内核线程已申请的内存的使用情况,定期发送回收内存消息;(4)内核线程收到所述回收内存消息后,对内存进行归还,并向主控内核线程发送释放内存消息。
5.如权利要求4所述的方法,其特征在于,步骤(1)中,所述内存池由主控内存管理模块维护。
6.如权利要求5所述的方法,其特征在于,在步骤(3)中,由内存监控模块查询内核线程已申请的内存的使用情况,定期发送回收内存消息。
7.如权利要求6所述的方法,其特征在于,在步骤(4)中发送释放内存消息给所述主控内存管理模块。
8.如权利要求4所述的方法,其特征在于,步骤(1)中所述内存池的大小大于等于各内核线程的内存需求和维护内存管理信息的开销总和。
9.如权利要求7所述的方法,其特征在于,步骤(1)中所述主控内存管理模块将所述内存池划分成内存块,所述内存块的大小为2的N次方字节,N大于等于20。
10.如权利要求9所述的方法,其特征在于,在步骤(2)中,内核线程通过消息处理模块向主控内核线程发送申请内存消息,分配内存后,主控内存管理模块向申请内存的内核线程发送内存分配消息,同时记录各内存块的使用信息;所述内存分配消息包括内存块首地址的物理地址、内存块大小、内存块数量、内存块类型。
11.如权利要求9所述的方法,其特征在于,步骤(1)和步骤(2)之间还包括以下步骤(1a)划分完内存块之后,所述主控内存管理模块向各内核线程发送广播消息,通知各内核线程内存初始化完成。
12.如权利要求9所述的方法,其特征在于,步骤(2)中还包括,各内核线程收到分配消息后,判断当前内存块是否在该内核线程的内存访问空间中,如内存块为私有内存块,则将内存块映射到当前内核线程的地址空间;如内存块为共享内存块,则向需要共享该内存块的内核线程发送消息,增加内存块映射。
13.如权利要求9所述的方法,其特征在于,步骤(2)中还包括,内核线程对申请到的内存块进行二次划分成更小的内存单元,每个内存单元的使用信息由划分该内存块的内核线程的内存管理模块维护,所述内存单元大小为2的M次方字节,M大于等于5且小于等于15。
14.如权利要求9所述的方法,其特征在于,步骤(3)中还包括,内存监控模块根据轮转算法依次对各内核线程定期发送回收内存消息,如无法回收足够数量的内存,则主控线程从系统内存中再申请一段内存作为内存池。
15.如权利要求9所述的方法,其特征在于,步骤(4)中还包括,如内存块为私有内存块,同时清除该内存块在该内核线程地址空间的映射关系;如内存块为共享内存块,则发送消息通知所有使用该共享内存的内核线程清除该内存块在该内核线程地址空间的映射关系。
16.如权利要求9所述的方法,其特征在于,步骤(4)中还包括,所述内存监控模块定期对每个内存块进行超时检查,如发现内存块信息错误,则主动收回该内存块。
17.如权利要求4所述的方法,其特征在于,还包括步骤(5)内核线程继续向主控内核线程发送申请内存消息。
全文摘要
本发明公开了一种多线程处理器动态内存管理系统及方法,该系统包括消息处理模块,主控内存管理模块,内存监控模块;该方法包括以下步骤主控内核线程从系统内存中申请一段内存作为内存池;所有内核线程向主控内核线程发送申请内存消息,主控内核线程收到申请内存消息后,从内存池中分配空闲的内存给申请内存的内核线程,并向申请内存的内核线程发送分配内存消息;主控内核线程查询内核线程已申请的内存的使用情况,定期发送回收内存消息;内核线程收到回收内存消息后,对内存进行归还,并向主控内核线程发送释放内存消息。采用本发明的多线程处理器动态内存管理系统及方法,可以提高系统的内存使用效率。
文档编号G06F9/46GK101055533SQ200710103098
公开日2007年10月17日 申请日期2007年5月28日 优先权日2007年5月28日
发明者赵阳, 于伟, 曲原, 贾皓昕 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1