一种基于非连续页的动态内存管理方法

文档序号:6460413阅读:210来源:国知局
专利名称:一种基于非连续页的动态内存管理方法
技术领域
本发明属于集成电路设计领域,特别涉及有实时性要求的网络通信芯 片中内存分配、存储和管理的方法,具体是一种基于非连续页的动态内存 管理方法。
技术背景根据数据存取的不同模式,管理内存通常有许多不同的方法。当数据的存入和取出的顺序相同时,通常用类似于先进先出(FIFO)的缓冲 (Buffer)结构来管理,例如交换机中转发队列就是以不同形式的 Buffer来管理。当数据的取出顺序和存入顺序不同时,则在完整的内存 存储单元中有可能出现一片空闲单元(Hole),若不能正确处理这些分散 在已分配内存中的小片空闲单元,将极大地影响内存的利用率。软件实现的动态内存方法多采用连续分配的方式,用两个双向链表结 构管理空闲的内存块。随着内存分配、回收的不断进行,空闲链表将逐渐 增大,为了从这个空闲链表中找到一个合适的内存块的搜索时间也相应的 增长,而且该时间与请求的内存块大小有关,因此无法满足实时性的要 求。并且,这种软件实现的内存分配方法,为了减少碎片问题,都加入内 存的分割(splitting)和合并(coalescing)的功能,但这些方法的引 入,也在一定程度上影响到内存管理的时间确定性(Time-Bounded Service)。 发明内容本发明的目的就是克服现有技术的不足,提供一种基于非连续页的动 态内存管理方法。本发明的动态内存管理方法是根据应用环境中数据流的特征将内存单 元分割为大小相同的内存页,这些内存页是内存分配的最小单元,也是内 存管理的最小单位,该内存管理方法具体包括内存分配、内存回收和地址映射。其中内存分配的方法是基于允许逻辑上相连的数据存储在物理上非连续的 页中,具体步骤包括1、 当主机请求内存分配时,内存管理单元比较当前内存的剩余资源 (包括空闲页总量和数据标志符DataID)和主机请求的内存大小,若空闲页总量大于主机请求的内存页总量,并且内存管理单元中仍有可用的数 据标志符,则继续内存分配,否则结束内存分配。继续内存分配和结束内存为、酉GH、J1曰赵tt一"l尔5艽口、」节T厄赵凹5甘土I儿,1六土"L宜训。乂W禾5正5头hH于 分配,内存管理模块将从存储DataID信息的二进制向量中,用"首零检 测"的方法找到一个可用的标志符,并将该标志符分配给这一块数据。2、 内存分配单元进入实质性分配阶段,内存管理单元关闭对新的内 存分配请求的响应。同时,内存管理单元根据请求的页数,从空闲页表管 理单元读出可用页的页号,并写入到数据页表管理单元中。空闲页表中的 可用页来自计数器或先进先出队列(FIFO),由分配模式寄存器中的值来 决定。当该寄存器中的值为l时,空闲页表管理单元从计数器中获得可用 页的页号;当该寄存器中的值为0时,从先进先出队列中获得页号。3、如果分配给主机的所有内存页全部从空闲页表中转移到数据页表 中,则本次内存分配完成,内存管理单元重新进入接收内存分配请求的状 态,等待下一次请求;如果分配给主机的所有内存页没有完全从空闲页表 中转移到数据页表中,则转到2,继续进行内存页转移。 内存回收的方法具体步骤包括1、 当主机请求内存分配时,内存管理单元比较当前内存的剩余资源 和主机请求的内存大小,若空闲页总量大于主机请求的内存页总量,并且 内存管理单元中仍有可用的数据标志符,则内存管理单元启动与本次请求 对应的倒计时器,计数初值为T0,计时步长为1秒,计时的时间基准由 外部输入。2、 如果某次请求在被成功分配一块内存,并且在与该次请求对应的计时器计数到零时,数据所占用的内存资源仍没有被回收,则转4;如果 在计时器倒计数到零之前,主机不再使用该内存页中的数据,可以向内存 管理单元写入回收内存的指令,要求内存管理单元回收这一块数据所占用 的内存页和数据标识符资源。指令中需指出要求回收的数据对应的数据标志符(DataID)。该过程中,内存管理单元停止倒计时器并将其复位到 T0。3、 当内存管理单元的内部寄存器接收到主机发送的"回收内存"的 指令时,将指令中数据标志符对应的所有内存页依次从数据页表中读出, 并将其写入到空闲页表中,然后转5。其中读出和写入的次数与该数据标 志符对应的数据所占用的内存页的总量相同。4、 当倒计时器计数到零时,与该计时器对应的数据所占用的内存资 源仍没有被回收,则在数据页表和空闲页表都空闲时,将超时的数据占用 的内存页从数据页表中依次读出并写入空闲页表中,同时在所有内存页回 收后,将该数据占用的数据标志符对应的二进制向量位重新复位,即回收 数据表示符(DataID)资源。5、 内存回收结束。地址映射将用户访问的逻辑地址转换到能访问物理内存的实际地址, 在本发明的应用环境中,内存中的数据是连续写入和读出的。针对这样的 数据流特征,地址映射的方法步骤包括1、 当主机需要访问内存时,先向内存管理单元写入一条请求读写的 指令。其中,当主机读内存时,在发出读请求的同时,指明需要读取的数 据所对应的数据标识符;而当主机需要写内存时,只需发送写请求,数据 所对应的标识符由内存管理单元自动管理,该标识符在主机请求内存分配 时由内存分配单元分配。2、 内存管理单元在接收到主机需要访问内存的指令时,以所访问数 据对应的数据标识符为基地址,偏移为零,组合成一个新地址,读取数据 页表中数据存储的首个内存页的页号,并将该页号存入"当前页号"寄存器。其中,地址组合时,以数据标识符作为地址的高P位,而地址的低d 位为全零。P定义为w-d,其中W为内存中地址线的宽度,d为逻辑地址 的页内偏移,相应地,每一片内存页的大小为2d字节(Byte)。3、 当主机开始访问内存时,内存管理单元截取逻辑地址的低d位, 作为物理地址的低d位,并以"当前页号"寄存器中的值为地址的高p 位,组合为可以访问内存的物理地址。若主机访问的逻辑地址不是一页中 的最后一个字节,则转4;若主机访问的逻辑地址为一页中的最后一个字 节,内存管理单元在同一个系统周期内,截取主机当前访问的逻辑地址的 高P位,将该p位的数据加l (记为pl)并与当前访问数据的数据标识符 一起组合成一个新地址,用该地址读取数据页表管理单元中的页号,并在 下一个系统周期时,将从数据页表中获得的页号更新到"当前页表"寄存 器中。4、 若主机访问内存结束,则向内存管理单元中写入"结束访问"的 指令,内存管理单元复位"当前页表"寄存器,并等待主机的下一次访问 请求;若主机还需访问内存,则转3,继续内存访问的过程。本发明中的所涉及的操作(如读、写内存等)为基本技术常识,采用 常规技术手段。本发明的发明点在于提供一种较为先进的内存管理流程。本发明以非连续的页作为基本分配和回收的单元,允许逻辑上相连的 数据存储在非连续的页中。这种方式提高了内存分配的灵活度,相应地, 内存的外部碎片被消除,内存的利用率得到了提高。


图1本发明的应用系统结构图;图2本发明内存分配功能的结构图;图3本发明内存分配功能的流程图;图4本发明内存分配过程的时序;图5本发明系统运行过程中内存分配结果实例;图6逻辑地址到物理地址的映射。
具体实施方式
本发明的典型系统应用环境如图l所示,其中内存管理单元为本发明 的一个实例。本发明有三大主要功能 一,分配内存,更新内存记录信息;二,回收内存并更新内存记录信息;三,地址映射。下面结合发明内容中对三个主要功能流程的描述进一步介绍各功能的具体实施方式
。内存分配功能的结构图如图2所示,内存分配流程如图3所示。其 中,空闲页资源用计数器和FIFO相结合的方式来管理。在分配的初始阶 段,采用计数器分配空闲页,归还的页将存入FIFO中,当所有页都转移 到FIFO中后由FIFO管理空闲页。空闲页表管理单元的工作状态由"分配 模式控制"寄存器来决定。计数器的引入消除了空闲页表初始化的过程。 计数器还有另一个作用,出于实际应用中内存管理单元的鲁棒性考虑,当 内存管理单元出现异常时,空闲页表管理单元在判明内存中没有有效数据 后,将重新回到初始状态(可以根据保存数据标识符的二进制向量来判断 内存中是否存在数据,当该向量为全零时,表示内存中没有有效数据)。 这时,只要复位计数器,并将空闲页分配模式重置为初始状态。整个过程 可以在单时钟周期内完成,不会影响整个系统的正常工作。内存分配过程中,由状态控制器从空闲页表中读出可用的内存页,将 这些内存页写入到数据页表中。数据页表为SRAM结构,并以DataID作为 访问的基地址进行读写。当数据对应的内存页全部转移后,分配结束。内 存页转移时的时序图如图4所示,其中RdEn为读取FIFO中的可用内存页 信息的使能信号,而UpdateCEn用于更新计数器的值,为下一次转移内存 页做好准备;WrDataStoreList为数据页表写使能信号;TransFinish用 于控制内存页转移是否完成;FinePages为空闲内存页的页号。内存中每一部分数据都有一个唯一的ID (DataID)与之相对应。 DataID用一个二进制数组来表示(bitmap),每一位代表一个DataID, DataID的值由其对应位在bitmap中的位置译码得到。内存分配不但要分 配可用的页,同时还要分配可用的DataID, DataID通过"首零检测器"算法得到。首零检测器的输入是DataID对应的bitmap,输出为首个可用 的DataID在bitmap中的位置。DataID的位宽可以根据应用调整,如当 采用4bit表示DataID,则表示系统中可用的DataID总量为24个。本发明支持两种内存回收方式显式和隐式。两种内存回收方式都需 要访问数据页表和空闲页表,因此必须处理好两者访问公共资源时的冲突 问题。内存的显式回收由主机主动提出,在数据对应的倒计时器计时溢出 之前,主机发送指令要求内存管理单元回收这一部分数据所占用的内存资 源,指令中需包括要回收的数据对应的DataID;而内存的隐式回收由内 存管理单元自动完成,不需要主机参与。当内存分配单元为一条数据成功 分配一块内存时,将启动与该块数据对应的一个倒计时器,计时的间隔为 l秒,计时的初值T0可以由用户配置,在本发明的实施例中T0取4秒。当倒计时器计时到零时,内存管理单元在内存分配和内存显式回收等任务 之外,插入一条低优先级的任务,在数据页表和空闲页表都空闲时,将超 时数据对应的内存资源以隐式的方式回收,其中包括将超时数据块占用的 内存页从数据页表中依次读出并写入空闲页表中,同时在所有内存页回收 后,将该块数据占用的数据标志符对应的二进制向量位重新复位,即回收 数据标识符资源。内存隐式回收这一功能由一个专用的状态机控制其状态 的转换,避开数据页表和空闲页表访问过程中的冲突问题。本发明的应用环境中,数据是连续读写的,当主机需要访问内存时, 先向内存管理单元写入一条请求读写的指令。其中,当主机读内存时,要 在发出读请求的同时,指明需要读取的数据所对应的数据标识符;而当主 机需要写内存时,只需发送写请求,数据所对应的标识符由内存管理单元 自动管理,该标识符在主机请求内存分配时由内存分配单元分配。读写过 程中使用的数据标识符记为ID。内存管理单元在接收到主机需要访问内 存的指令时,以所访问数据对应的数据标识符为基地址,偏移为零,组合 成一个新地址,读取数据页表中数据存储的首个内存页的页号,并将该页 号存入"当前页号"寄存器。其中,地址组合的方式如图6所示。当主机开始访问内存时,内存管理单元截取逻辑地址的低d位,作为物理地址的 低d位,并以"当前页号"寄存器中的值CP为地址的高p位,组合为可 以访问内存的物理地址。同时,当主机访问的逻辑地址为一页中的最后一 个字节时,内存管理单元在同一个系统周期内,截取主机当前访问的逻辑 地址的高P位,将该P位的数据加1 (记为pl)并与当前访问数据的数据 标识符一起组合成一个新地址,用该地址读取数据页表管理单元中的页 号,并在下一个系统周期时,将从数据页表中获得的页号更新到"当前页 表"寄存器中。其中P定义为W-d, W为内存中地址线的宽度,d为逻辑地址的页内偏移,相应地,每一片内存页的大小为2"字节(Byte)。地址 组合的方式如图6所示。当主机完成对某一块数据的访问时,需向内存管理单元中写入"结束 访问"的指令,内存管理单元复位本次访问使用的寄存器,并等待主机的 下一次访问请求。本发明在系统中的验证结果如图5所示,其中横坐标是系统时间, 纵坐标(左)反映本发明中可用内存页数目的实时变化,而纵坐标(右) 反映本发明中可用数据ID (DataID)数目的实时变化。
权利要求
1、一种基于非连续页的动态内存管理方法,包括内存分配、内存回收和地址映射,其特征在于内存分配的方法是基于允许逻辑上相连的数据存储在物理上非连续的页中,具体步骤包括a、当主机请求内存分配时,内存管理单元比较当前内存的剩余资源和主机请求的内存大小,若空闲页总量大于主机请求的内存页总量,并且内存管理单元中仍有可用的数据标志符,则继续内存分配,否则结束内存分配;如果继续内存分配,内存管理模块将从存储DataID信息的二进制向量中,用“首零检测”的方法找到一个可用的标志符,并将该标志符分配给这一块数据;所述的当前内存的剩余资源包括空闲页总量和数据标志符;b、内存管理单元关闭对新的内存分配请求的响应,内存管理单元根据请求的页数,从空闲页表管理单元读出可用页的页号,并写入到数据页表管理单元中;空闲页表中的可用页来自计数器或先进先出队列,由分配模式寄存器中的值来决定,当该寄存器中的值为1时,空闲页表管理单元从计数器中获得可用页的页号;当该寄存器中的值为0时,从先进先出队列中获得页号;c、如果分配给主机的所有内存页全部从空闲页表中转移到数据页表中,则本次内存分配完成,内存管理单元重新进入接收内存分配请求的状态,等待下一次请求;如果分配给主机的所有内存页没有完全从空闲页表中转移到数据页表中,转到步骤b,继续进行内存页转移;内存回收的方法具体步骤包括d、当主机请求内存分配时,内存管理单元比较当前内存的剩余资源和主机请求的内存大小,若空闲页总量大于主机请求的内存页总量,并且内存管理单元中仍有可用的数据标志符,则内存管理单元启动与本次请求对应的倒计时器,计数初值为T0,计时步长为1秒,计时的时间基准由外部输入;e、如果与本次请求中存储在内存页的数据在倒计数器计数到零时,内存页中的数据仍没有被回收,则转步骤g;如果与本次请求中存储在内存页的数据在倒计数器计数到零前,主机不再使用该内存页中的数据,向内部寄存器写入回收内存的指令,同时停止倒计时器并将其复位到T0;f、当内存管理单元的内部寄存器接收到显式回收内存的指令时,将指令中数据标志符对应的所有内存页依次从数据页表中读出,并将其写入到空闲页表中,然后转步骤h;读出和写入的次数与该数据标志符所占用的内存页的总量相同;g、与本次请求中存储在内存页的数据在倒计数器计数到零时,内存页中的数据仍没有被回收的情况下,如果在数据页表和空闲页表都空闲时,将超时的数据占用的内存页从数据页表中依次读出并写入空闲页表中,同时在所有内存页回收后,将该数据占用的数据标志符对应的二进制向量位重新复位,即回收数据表示符资源;h、内存回收结束;地址映射的方法具体步骤包括i、当主机需要访问内存时,先向内存管理单元写入一条请求读写的指令,其中,当主机读内存时,在发出读请求的同时,指明需要读取的数据所对应的数据标识符;而当主机需要写内存时,只需发送写请求,数据所对应的标识符由内存管理单元自动管理,该标识符在主机请求内存分配时由内存分配单元分配;j、内存管理单元在接收到主机需要访问内存的指令时,以所访问数据对应的数据标识符为基地址,偏移为零,组合成一个新地址,读取数据页表中数据存储的首个内存页的页号,并将该页号存入“当前页号”寄存器;k、当主机开始访问内存时,内存管理单元截取逻辑地址的低d位,作为物理地址的低d位,并以“当前页号”寄存器中的值为地址的高p位,组合为可以访问内存的物理地址,若主机访问的逻辑地址不是一页中的最后一个字节,则转步骤1;若主机访问的逻辑地址为一页中的最后一个字节,内存管理单元在同一个系统周期内,截取主机当前访问的逻辑地址的高p位,将该p位的数据加1并与当前访问数据的数据标识符一起组合成一个新地址,用该地址读取数据页表管理单元中的页号,并在下一个系统周期时,将从数据页表中获得的页号更新到“当前页表”寄存器中;l、若主机访问内存结束,则向内存管理单元中写入“结束访问”的指令,内存管理单元复位“当前页表”寄存器,并等待主机的下一次访问请求;若主机还需访问内存,则转步骤k,继续内存访问的过程。
全文摘要
本发明涉及一种动态内存管理方法。目前的内存管理方法影响内存的利用率和实时性。本发明的动态内存管理方法包括内存分配、内存回收和地址映射,具体是将内存单元分割为大小相同的内存页,允许逻辑上相连的数据存储在物理上不相连的内存页中。本发明采用计数器和FIFO相结合的方式管理内存页,使得内存分配和回收更加灵活,并消除了内存分配过程中的外部碎片问题,提高了内存的利用率,同时内存的分配和回收具有实时性和可预测性的特点。
文档编号G06F12/02GK101231619SQ20081005986
公开日2008年7月30日 申请日期2008年2月22日 优先权日2008年2月22日
发明者廉玉平, 艳 张, 陈金龙, 霍明旭, 雁 韩 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1