一种缓冲区管理方法及系统的制作方法

文档序号:6619144阅读:238来源:国知局
专利名称:一种缓冲区管理方法及系统的制作方法
技术领域
本发明涉及通信、电子领域中的缓冲区管理系统,尤其涉及一种具有老化功能的 可以防止缓冲区泄漏的缓冲区管理方法及系统。
背景技术
通信和计算机领域中,经常需要用一大块快速读写存储器(memory)用来暂存接 收到的数据、等待处理的数据、以及等待发送出去的数据。这一大块存储器在逻辑上被分割 为很多小块。这些小块被称为缓冲区(buffer)。对这些缓冲区进行有效地管理及具体实现 的实体,称为缓冲区管理器(buffer manager)。缓冲区管理器完成的主要功能有外部有缓 冲区申请请求时,根据分配策略进行答复,分配具体的缓冲区或者拒绝分配缓冲区;外部有 缓冲区释放请求时,响应释放请求,将待释放的缓冲区列入空闲缓冲区池供以后分配使用。比较通用的缓冲区管理器有堆栈式(stack)管理器和先进先出式(First In First0ut,FIF0)管理器。和本发明相关的是堆栈式缓冲区管理器。堆栈式缓冲区管理器的实现如附图1所示。包括控制逻辑实体101、堆栈指针102、 空闲缓冲区堆栈103三个部分。索引图105是为了表示方便,物理上并不存在;大容量存 储器104是缓冲区管理器所要管理的对象,将这一块存储器分成η个小块缓冲区,每个缓冲 区用一个索引(index)来寻址,索引和缓冲区一一对应。空闲缓冲区堆栈中保存的是空闲 缓冲区的索引,初始状态下,堆栈是满的,所有的索引都在堆栈中,堆栈指针指向堆栈地址 addr0o工作原理为若外部有向控制逻辑实体申请缓冲区的请求,如果允许分配缓冲区, 则控制逻辑实体将堆栈指针指向的索引分配给申请源,同时将堆栈指针下移一步(出栈操 作,POP);如果外部请求控制逻辑实体释放缓冲区,则控制逻辑实体将堆栈指针上移一步, 并将需要释放的缓冲区索引写入堆栈(入栈操作,PUSH)。经过多次的出栈、入栈操作后,堆 栈中的索引排列是无序的,例如图2中空闲缓冲区堆栈所示,这是正常现象。缓冲区管理器 和缓冲区使用者的交互信号有缓冲区使用者分配缓冲区请求信号、缓冲区管理器分配应 答信号、分配给缓冲区使用者的缓冲区索引、缓冲区使用者请求释放缓冲区请求信号、缓冲 区使用者请求释放的缓冲区索引、缓冲区管理器释放应答信号。现有的堆栈式缓冲区管理器,分配缓冲区时直接执行出栈操作,释放缓冲区时执 行入栈操作。外部缓冲区使用模块必须维护自己使用的缓冲区索引。如果外部缓冲区使用 模块维护缓冲区索引出错,申请释放缓冲区时,给出了错误的缓冲区索引,或者对同一缓冲 区索引连续释放多次,就会引起空闲缓冲区堆栈内的索引混乱。如附图3所示假设堆栈指 针原本指向addr3,addr3中存放的索引是indeX3 (图3中303);这时候如果有外部请求释 放一个索引为index3的缓冲区,执行入栈操作,索引indeX3会被再次写入堆栈,堆栈指针 指向addr2(图3中304)。而根据上文所述,堆栈中的索引表示空闲缓冲区,堆栈中存在重 复的索引,当有外部模块申请分配缓冲区时,缓冲区管理器就有可能把相同的一块缓冲区 indeX3同时分配给不同的外部模块使用,造成冲突。这样的后果是很严重的,如果用在数据 通信中,轻则会有丢包现象,重则数据转发完全混乱,业务中断。而缓冲区管理器无法检测到这种情况的发生,也无法从这种混乱状态中恢复正常。为了解决缓冲区堆栈内的索引出现混乱,在缓冲区管理器中引入了缓冲区信息记 录器,在分配缓冲区的时候向缓冲区信息记录器写入该缓冲区已经被分配的标识,在释放 缓冲区的时候,首先通过读取缓冲区信息记录器中的缓冲区分配标识判断该缓冲区是否已 经被分配出去,只释放已经被分配出去的缓冲区,对于申请释放未分配的缓冲区的操作不 执行缓冲区索引压入空闲缓冲区堆栈的操作,有效的避免了空闲缓冲区堆栈内的索引出现 混乱情况的发生。但是,通过增加缓冲区信息记录器,只能保证空闲缓冲区堆栈内的索引不 会混乱。当外部缓冲区使用模块维护缓冲区索引出现错误时,已经被分配的缓冲区就不能 被释放,就会导致缓冲区泄漏情况发生。

发明内容
有鉴于此,本发明的主要目的在于提供一种缓冲区管理方法,用于解决缓冲区泄 露的技术问题,为达到上述目的,本发明的技术方案是这样实现的一种缓冲区管理方法,其特征在于,A、根据用户请求分配缓冲区的请求为用户分配缓冲区,并记录缓冲区分配的时 间;B、在缓冲区老化定时时间到时,依据所述缓冲区分配的时间逐一判断已分配的缓 冲区是否达到老化要求,若是则回收该缓冲区;C、根据用户请求释放缓冲区的请求,释放标识为已被分配的缓冲区。进一步地,步骤A具体为Al、接收到用户请求分配缓冲区的请求后,获取当前堆栈指针指向的缓冲区索 引;A2、在缓冲区信息记录器中标识当前堆栈指针指向的缓冲区索引对应的缓冲区已 被分配、记录该缓冲区被分配的时间、标识缓冲区老化标记为新分配状态;A3、执行空闲缓冲区堆栈出栈操作并向用户反馈分配结果。进一步地,步骤B中,判断已分配的缓冲区是否达到老化要求以及回收该缓冲区 的步骤具体为Bi、根据缓冲区信息记录器中记录的缓冲区被分配的时刻判断该缓冲区被分配的 时间是否超过了老化定时周期,若是则执行步骤B2 ;否则对该缓冲区不做处理;B2、判断该缓冲区的老化标识是否为老化状态,若是释放该缓冲区;否则将该缓冲 区标记为老化状态。进一步地,步骤C具体为判断用户请求释放的缓冲区是否为已被分配的缓冲区,若是则将缓冲区信息记录 器中该缓冲区的已分配标识修改为未分配状态并对该缓冲区执行入栈操作,向用户反馈缓 冲区释放操作结果;若请求释放的缓冲区为空闲状态则直接向用户反馈缓冲区释放操作结果。本发明的另一目的在于提供一种缓冲区管理系统,为达到上述目的,本发明的技 术方案是这样实现的一种缓冲区管理系统,包括控制逻辑实体、堆栈指针、空闲缓冲区堆栈、缓冲区信息记录器及缓冲区老化模块。缓冲区老化模块,用于定时逐一判断已被分配的缓冲区是否 长时间没有释放,若是则通知控制逻辑实体执行回收操作;所述缓冲区信息记录器中还包括已分配标识、缓冲区被分配的时间及缓冲区老化 标记,所述缓冲区老化模块根据所述缓冲区被分配的时间及缓冲区老化标记判断已被分配 的缓冲区是否长时间没有释放。进一步地,在接收到用户请求分配缓冲区的的请求后,由控制逻辑实体执行缓冲 区的出栈操作,并在所述缓冲区信息记录器中记录当前被分配的缓冲区的被分配时间、标 识该缓冲区的老化标识为新分配状态、向用户反馈缓冲区分配结果。进一步地,由控制逻辑实体根据缓冲区信息记录器中记录的缓冲区被分配的时刻 判断该缓冲区被分配的时间是否超过了老化定时周期,若是则继续判断该缓冲区老化标记 是否为老化状态,若为老化状态则释放该缓冲区,否则将该缓冲区的老化标记设置为老化 状态;若未超过老化定时时间,则不做处理。进一步地,控制逻辑实体接收到用户的释放请求后,根据缓冲区信息记录器中的 已分配标识判断用户请求释放的缓冲区是否为已被分配的缓冲区,若是则将缓冲区信息记 录器中该缓冲区的已分配标识修改为未分配状态并控制堆栈指针及空闲缓冲区堆栈执行 入栈操作;否则不执行入栈操作;然后向用户反馈缓冲区释放操作结果。通过本发明公开的上述系统结构和操作方法,在分配缓冲区的时候,在对应的信 息记录器条目中记录下该缓冲区已经被分配;在释放缓冲区的时候,首先要查询待释放的 缓冲区的信息,如果该缓冲区是已经被分配出去的缓冲区,下一步可以释放该缓冲区,将该 缓冲区索引压入空闲缓冲区堆栈。如果该缓冲区是空闲缓冲区,说明外部出现了错误,给出 了错误的缓冲区索引或连续多次企图释放同一缓冲区,为了避免空闲缓冲区堆栈中会存在 重复的索引,拒绝将这个缓冲区索引压入空闲缓冲区堆栈,直接向缓冲区使用者给出释放 缓冲区应答信号。对于这些出错的缓冲区索引,通过引入了缓冲区老化机制,避免了缓冲区 泄漏的发生,提高了缓冲区管理器的健壮性,可靠性。


图1为传统的堆栈式缓冲区管理器系统结构示意图;图2为经过一段时间的分配释放后,传统空闲缓冲区堆栈中的内容;图3为释放出错后,传统空闲缓冲区堆栈中的内容;图4为本发明改进后的堆栈式缓冲区管理器系统结构示意图;图5为本发明缓冲区分配流程图;图6为本发明缓冲区释放流程图;图7为本发明缓冲区老化流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照附图,对 本发明进一步详细说明。本发明公开的可靠的缓冲区管理器系统如附图4中,包含五个组成部分控制逻 辑实体401、堆栈指针402、空闲缓冲区堆栈403、缓冲区信息记录器404、缓冲区老化模块407。存储器405是被管理的对象,存储器划分成很多小块缓冲区,每个缓冲区用一个索引 index来表示。索引图406物理上不存在,是为了理解方便,用来说明缓冲区索引和缓冲区 与缓冲区信息记录器条目之间的一一对应关系。在缓冲区信息记录器中为每个索引创建一 个条目info,每个条目和索引——对应,如indexO对应infoO、indexl对应infol、index2 对应info2、依次类推。本发明与传统缓冲区管理器相比,增加了缓冲区老化模块,并对缓冲区信息记录 器记录的信息进行了扩充,增加了缓冲区分配的时间信息以及老化标记。缓冲区信息记录 器的每一个记录条目分别和一块缓冲区一一对应。缓冲区信息记录器用来记录每一块缓冲 区的相关信息,包括该缓冲区是处于空闲状态还是正在被使用中,该缓冲区被分配的时间, 该缓冲区是否被老化的标记。为了防止缓冲区被错误老化,在缓冲区记录器中设置了缓冲 区老化标记,使用方法例如当该标记为表示新分配状态值1时表示该缓冲区刚被分配,当 该标记为老化状态值0时表示该缓冲区已经长时间没有被使用过。当设置的用于定时执行 缓冲区老化检测的定时器的老化定时周期到时,控制逻辑实体就逐条扫描缓冲区信息记录 器,判断已经被分配出去的缓冲区的分配时间是否超过老化定时周期,如果是就将缓冲区 老化标记为新分配状态1的置为老化状态0,不进行缓冲区的回收;否则将缓冲区老化标记 为老化状态0的进行缓冲区的回收操作。图5为本发明缓冲区分配步骤流程图,具体步骤如下501,缓冲区管理器收到缓冲区使用者的分配请求后,由控制逻辑实体访问堆栈指 针,查找当前堆栈指针指向的缓冲区索引;502,控制逻辑实体从堆栈指针指向的空闲缓冲区堆栈记录中读取缓冲区索引,并 在缓冲区信息记录器中该索引对应的条目中记录分配的相关信息;分配的相关信息包括该缓冲区被分配的状态、缓冲区被分配的时刻、缓冲区使用 者、缓冲区老化标记等信息,该步骤中将缓冲区老化标记置为新分配状态1,表示该缓冲区 为新分配的缓冲区;503,在控制逻辑实体的控制下,空闲缓冲区堆栈执行出栈操作,堆栈指针下移一

少;504,控制逻辑实体将该缓冲区索引通知给发起本次请求的缓冲区使用者,并给出 缓冲区分配应答信号,分配缓冲区操作结束。图6为本发明缓冲区释放缓步骤流程图,具体步骤如下601,控制逻辑实体收到缓冲区使用者的释放请求后,记录下该使用者企图释放的 缓冲区索引;602,查找缓冲区信息记录器中该缓冲区索引对应的条目,读取条目中记录的缓冲 区信息;603,控制逻辑实体根据读取到的缓冲区信息进行判断;该缓冲区是否为空闲缓冲 区,若是则执行步骤605 ;否则执行步骤604 ;604,如果缓冲区信息表明此缓冲区是非空闲缓冲区,及被分配出去的缓冲区,则 改写缓冲区信息,将该缓冲区的已分配标识设置为未分配状态,以及将缓冲区被分配的时 间、老化标记都置空,表明该缓冲区已经被释放,控制逻辑实体将缓冲区索引压入空闲缓冲 区堆栈,执行入栈操作,堆栈指针上移一步;转到606 ;
605,如果缓冲区信息表明此缓冲区是空闲缓冲区,没有被使用,则一定是外部使 用者维护索引出错了,控制逻辑实体不进行压栈操作,堆栈指针也不变;606,控制逻辑实体向使用者反馈缓冲区释放操作结果,释放缓冲区操作结束。图7为本发明缓冲区老化处理流程图,具体步骤如下701,缓冲区老化模块从缓冲区信息记录器中读取一条为处理的条目;缓冲区老化模块启动一老化定时器,该定时器的定时周期设置为老化定时周期, 当缓冲区老化定时周期到时,缓冲区老化模块开始逐一读取缓冲区信息记录器中的条目, 需要说明的是,缓冲区老化模块只读取已经被分配出去的缓冲区对应的条目,对未被分配 的条目不做处理,缓冲区老化模块将根据读取的条目信息判断对应的缓冲区是否达到老化 要求,然后对于已经老化,达到回收时间条件的缓冲区执行回收操作。702,根据读取到的缓冲区信息进行判断,判断分配出去的时间是否超过了老化定 时周期,如果是则执行步骤703 ;否则执行步骤701 ;如果未超过老化定时周期,则不对该条目对应的缓冲区进行处理,返回处理下一 条目。703,在超过老化定时周期的情况下,判断对应缓冲区老化标记是否为老化状态0 ; 若是则执行步骤704 ;否则执行步骤705 ;704,将该条目对应的缓冲区释放;然后执行步骤706 ;705,将该条目中的缓冲区老化标记修改为老化状态0,并重新写入缓冲区信息记 录器中;706,判断是否处理完缓冲区信息记录器中的所有条目,若是则结束该轮操作,等 待下一个老化定时周期到达;否则执行步骤701。缓冲区管理器可以服务多个缓冲区使用者,使用者需要使用缓冲区时向缓冲区管 理器申请分配,使用完缓冲区后向缓冲区管理器申请释放该缓冲区,回收供以后使用。控制 逻辑实体部分根据外部的分配或者释放请求,根据优先级策略仲裁,选择处理某一个申请 源的请求,然后访问堆栈指针、空闲缓冲区堆栈、缓冲区信息记录器,根据本发明公开的方 法步骤进行处理,以下给出一实施例来模拟实际的运行过程Cl,初始时,堆栈指针指向addrO,外部缓冲区使用者申请分配缓冲区时,地址 addrO中的索引是indexO,indexO对应的缓冲区信息记录器条目是infoO,往infoO写入标 志1,表示indexO缓冲区已经被分配使用,并记录该缓冲区分配的时间信息,堆栈指针下移 一步,指向addrl,然后把indexO及缓冲区分配应答信号一起送给缓冲区使用者,分配缓冲 区结束;C2,缓冲区使用者申请分配缓冲区,addrl中的索引是indexl,indexl对应的缓冲 区信息记录器条目是infol Jiinfol写入标志1,并记录该缓冲区分配的时间信息,堆栈指 针下移一步,指向addr2,然后把indexl及缓冲区分配应答信号一起送给缓冲区使用者,分 配缓冲区结束;C3,缓冲区使用者请求释放缓冲区indexO,读取缓冲区信息记录器infoO中的标 志,标志是1,表明该缓冲区已经被分配使用,可以释放,改写标志,将标志写为0,表明该缓 冲区将被释放,转为空闲状态。将堆栈指针上移一步,指向addrl,将indexO写入堆栈中 addrl处,给出释放缓冲区应答信号,释放缓冲区结束;
C4,缓冲区使用者请求释放缓冲区indexO,读取缓冲区信息记录器infoO条目。由 于C3步骤时,infoO已经被写为0,表示该缓冲区已经是空闲缓冲区,企图释放一个空闲缓 冲区是错误的,不把缓冲区索引入栈,堆栈指针不变。直接给出释放缓冲区应答信号,释放 缓冲区结束。C5,老化定时时间到,扫描缓冲区信息记录器,缓冲区信息记录器中记录的时间信 息进行判断,对于已经被分配出去的缓冲区,如果缓冲区被分配的时间超过了老化定时周 期,即达到了老化要求,则判断缓冲区老化标记,如果为1,将其置0重新写入该条缓冲区信 息记录器,如果为0,则将该缓冲区释放。如果未达到老化要求或者该缓冲区未分配出去,则 不对该条缓冲区信息记录器进行操作在C4步骤中,可以成功地检测到了外部释放缓冲区操作的错误,拒绝执行会引起 空闲缓冲区堆栈混乱的操作,直接给出释放应答信号;步骤C5采用本发明的缓冲区管理器 可以将错误分配的缓冲区再利用,避免了缓冲区泄漏,大大提高了缓冲区管理器的健壮性、
可靠性。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
一种缓冲区管理方法,其特征在于,包括A、根据用户请求分配缓冲区的请求为用户分配缓冲区,并记录缓冲区分配的时间;B、在缓冲区老化定时时间到时,依据所述缓冲区分配的时间逐一判断已分配的缓冲区是否达到老化要求,若是则回收该缓冲区;C、根据用户请求释放缓冲区的请求,释放标识为已被分配的缓冲区。
2.根据权利要求1所述的方法,其特征在于,步骤A具体为Al、接收到用户请求分配缓冲区的请求后,获取当前堆栈指针指向的缓冲区索引;A2、在缓冲区信息记录器中标识当前堆栈指针指向的缓冲区索引对应的缓冲区已被分 配、记录该缓冲区被分配的时间、标识缓冲区老化标记为新分配状态;A3、执行空闲缓冲区堆栈出栈操作并向用户反馈分配结果。
3.根据权利要求2所述的方法,其特征在于,步骤B中,判断已分配的缓冲区是否达到 老化要求以及回收该缓冲区的步骤具体为Bi、根据缓冲区信息记录器中记录的缓冲区被分配的时刻判断该缓冲区被分配的时间 是否超过了老化定时周期,若是则执行步骤B2 ;否则对该缓冲区不做处理;B2、判断该缓冲区的老化标识是否为老化状态,若是释放该缓冲区;否则将该缓冲区标 记为老化状态。
4.根据权利要求1所述的方法,其特征在于,步骤C具体为判断用户请求释放的缓冲区是否为已被分配的缓冲区,若是则将缓冲区信息记录器中 该缓冲区的已分配标识修改为未分配状态并对该缓冲区执行入栈操作,向用户反馈缓冲区 释放操作结果;若请求释放的缓冲区为空闲状态则直接向用户反馈缓冲区释放操作结果。
5.一种缓冲区管理系统,包括控制逻辑实体、堆栈指针、空闲缓冲区堆栈、缓冲区信息 记录器,其特征在于,还包括缓冲区老化模块,用于定时逐一判断已被分配的缓冲区是否长时间没有释放,若是则 通知控制逻辑实体执行回收操作;所述缓冲区信息记录器中还包括已分配标识、缓冲区被分配的时间及缓冲区老化标 记,所述缓冲区老化模块根据所述缓冲区被分配的时间及缓冲区老化标记判断已被分配的 缓冲区是否长时间没有释放。
6.根据权利要求5所述的系统,其特征在于,在接收到用户请求分配缓冲区的的请求 后,由控制逻辑实体执行缓冲区的出栈操作,并在所述缓冲区信息记录器中记录当前被分 配的缓冲区的被分配时间、标识该缓冲区的老化标识为新分配状态、向用户反馈缓冲区分 配结果。
7.根据权利要求6所述的系统,其特征在于,由控制逻辑实体根据缓冲区信息记录器 中记录的缓冲区被分配的时刻判断该缓冲区被分配的时间是否超过了老化定时周期,若是 则继续判断该缓冲区老化标记是否为老化状态,若为老化状态则释放该缓冲区,否则将该 缓冲区的老化标记设置为老化状态;若未超过老化定时时间,则不做处理。
8.根据权利要求5所述的系统,其特征在于,控制逻辑实体接收到用户的释放请求后, 根据缓冲区信息记录器中的已分配标识判断用户请求释放的缓冲区是否为已被分配的缓 冲区,若是则将缓冲区信息记录器中该缓冲区的已分配标识修改为未分配状态并控制堆栈 指针及空闲缓冲区堆栈执行入栈操作;否则不执行入栈操作;然后向用户反馈缓冲区释放操作结果。
全文摘要
本发明公开了一种缓冲区管理方法及系统,用于解决缓冲区泄露的技术问题。本发明定时检测缓冲区分配出去的时间,对于长时间没有释放的缓冲区进行老化,自动将长时间没有释放的缓冲区执行压入空闲缓冲区堆栈的操作,完成缓冲区的回收,避免缓冲区泄漏的发生,从而提高了缓冲区管理器的健壮性和可靠性。
文档编号G06F12/08GK101923517SQ20091008706
公开日2010年12月22日 申请日期2009年6月17日 优先权日2009年6月17日
发明者吴春华, 娄本刚 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1