CN101582092B - 一种实现保存内存中的数据的方法及装置 - Google Patents

一种实现保存内存中的数据的方法及装置 Download PDF

Info

Publication number
CN101582092B
CN101582092B CN2009102037724A CN200910203772A CN101582092B CN 101582092 B CN101582092 B CN 101582092B CN 2009102037724 A CN2009102037724 A CN 2009102037724A CN 200910203772 A CN200910203772 A CN 200910203772A CN 101582092 B CN101582092 B CN 101582092B
Authority
CN
China
Prior art keywords
module unit
data
memory pool
unit
module
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.)
Expired - Fee Related
Application number
CN2009102037724A
Other languages
English (en)
Other versions
CN101582092A (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.)
Beijing Topstor Technology Co ltd
Original Assignee
ZTE Corp
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 ZTE Corp filed Critical ZTE Corp
Priority to CN2009102037724A priority Critical patent/CN101582092B/zh
Publication of CN101582092A publication Critical patent/CN101582092A/zh
Priority to PCT/CN2010/073078 priority patent/WO2010142196A1/zh
Application granted granted Critical
Publication of CN101582092B publication Critical patent/CN101582092B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1441Resetting or repowering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1443Transmit or communication errors

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明披露了一种实现保存内存中的数据的方法及装置,方法包括:应用程序为在内存中保存数据预先构建以块内块单元为单位的内存结构及块单元结构,该内存结构至少包括块大小及每块的块单元数目,该块单元结构至少包括块单元标识;将块单元标识和每块的块单元数目映射为块单元的块地址及块内地址;应用程序在需要保存块内块单元中的数据时,将该内存结构保存在一文件中,并按块单元标识依次将块单元中的数据保存到该文件中,以便于数据的恢复。本发明解决了链表类数据结构的数据在多任务之间进行传递过程中关机后再开机所面临的数据结构需要重建的问题。

Description

一种实现保存内存中的数据的方法及装置
技术领域
本发明涉及嵌入式系统产品内存数据检索技术,尤其涉及实现保存及恢复内存中具有链表数据结构的数据的方法及装置。
背景技术
随着手机的日益普及和其功能的日益增强,手机中应用的数据量也在迅速增加,这就对手机中的内存管理和数据检索技术提出了更高的要求。
在数据检索方面,例如名片夹的检索,电话号码的检索,甚至输入法应用过程数据的检索。如果手机没有好的检索技术,则手机应用的开发就会受到影响,在一些开发中不得不为效率较低的检索技术而割舍掉一些高级的功能。虽然有很多的数据结构可以帮助解决这个问题,例如哈希表,平衡二叉树等等,但由于这些具有高效检索功能的数据结构往往都是用链表来实现的,这就意味着手机在关机后再开机时,这些数据结构均要重建,这就会对用户的开机体验造成一定的影响。
在内存管理方面,已经有内存池技术开始使用。所谓内存池是指,应用程序可以通过系统的内存分配函数的调用,预先申请适当大小的内存作为一个内存池,之后该应用程序对内存的分配和释放均可以通过对这个内存池的操作来完成。只有当内存池大小需要动态扩展时,才需要再调用系统的内存分配函数来分配内存进内存池,除此之外对内存的一切操作均在应用程序对内存池操作的掌控之中。
发明内容
本发明所要解决的技术问题是提供一种实现保存内存中的数据的方法及装置,能够将具有链表数据结构的内存数据进行有效地保存,以便于该数据的恢复。
为了解决上述技术问题,本发明提供了一种实现保存内存中的数据的方法,包括:
应用程序为在内存中保存数据预先构建以块内块单元为单位的内存结构及块单元结构,该内存结构至少包括块大小及每块的块单元数目,该块单元结构至少包括块单元标识;将块单元标识和每块的块单元数目映射为块单元的块地址及块内地址;
应用程序在需要保存块内块单元中的数据时,将该内存结构保存在一文件中,并按块单元标识依次将块单元中的数据保存到该文件中。
进一步地,该内存结构通过内存池结构实现,该内存池结构还包括块地址索引,用于索引块单元在内存中的块地址;该块单元结构还包括数据地址;块单元标识用块单元的序号表示;
将块单元标识和每块的块单元数目映射为块单元的块地址及块内地址是指,将块单元的序号对每块的块单元数目进行除法取整运算,获取块单元的块序号,按该块序号从块地址索引中获取该块单元的块地址;将块单元的序号对每块的块单元数目进行除法取余运算,获取块单元的块内地址;获取的块单元的块地址和块内地址由数据地址表述;
将该内存结构和所述块单元中的数据保存在所述文件中是指,将含有内存池结构的头部信息保存在该文件的首部,然后按块单元的序号依次将块单元中的数据保存到该文件中。
进一步地,应用程序在需要恢复一文件中保存的数据时,首先恢复该文件中保存的含内存池结构的头部信息,根据该头部信息在内存中依次恢复块及块地址索引。
进一步地,内存池结构还包括块链表,用于以块为单位按块单元的块序号依次存放块单元;根据该头部信息依次恢复块及块地址索引具体包括:
获取头部信息中的块大小,并创建包含块序号和块地址的地址索引的结构;
按块序号从文件中依次读取块并置入块链表的尾部,并更新块地址索引。
进一步地,内存池结构还包括空闲块单元链表,用于按空闲块单元的序号依序存放空闲单元;
应用程序在需要将数据保存在内存池中时,申请分配空闲块单元链表中一个或多个块单元,用于数据的保存;或者,应用程序在需要将保存数据的块单元释放时,申请释放块链表中一个或多个块单元,并将释放的块单元置入空闲块单元链表的尾部。
进一步地,所述内存池结构还包括当前申请块的数目,用于表示内存池当前已经申请块的数目;
申请分配空闲块单元链表中一个或多个块单元具体包括:若查找空闲块单元链表还有足够分配的块单元,则从空闲块单元链表取出要分配的块单元,并返回分配的块单元的块地址和块单元数目;若查找空闲块单元链表没有足够分配的块单元,则从内存中申请一个块到内存池中所述块链表的尾部,并更新当前申请块的数目,同时将申请块的块单元置入空闲块单元链表的尾部,然后从空闲块单元链表取出要分配的块单元,并返回分配的块单元的块地址和块单元数目。
进一步地,应用程序在需要访问保存在内存池中的数据成员时,根据数据成员的块单元序号和块单元数目在块链表中查找到块单元的数据地址,依据该数据地址对相应块单元中的数据进行读写访问。
为了解决上述技术问题,本发明提供了一种实现保存内存中的数据的装置,包括依次连接的内存池结构构建模块以及内存池数据保存模块,其中:
内存池结构构建模块,用于预先构建以块内块单元为单位的内存池结构及块单元结构,该内存池结构至少包括块大小及每块的块单元数目,该块单元结构至少包括块单元标识;将块单元标识和每块的块单元数目映射为块单元的块地址及块内地址;
内存池数据保存模块,作为应用程序的接口,在应用程序需要保存存池中的数据时被调用,用于将含有内存池结构的头部信息保存一文件中,并按块单元标识依次将块单元中的数据保存到该文件中。
进一步地,内存池结构还包括块地址索引,用于索引块单元在内存中的块地址;块单元的结构还包括数据地址;块单元标识用块单元的序号表示;
内存池结构构建模块,将块单元的序号对每块的块单元数目进行除法取整运算,获取块单元的块序号,按该块序号从块地址索引中获取块单元的块地址;将块单元的序号对每块的块单元数目进行除法取余运算,获取块单元的块内地址;获取的块单元的块地址和块内地址由数据地址表述;
内存池数据保存模块,将头部信息保存在文件的首部,然后按块单元序号依次将块单元中的数据保存到该文件中。
进一步地,还包括与内存池数据保存模块连接的内存池数据恢复模块,其中:
内存池数据恢复模块,作为应用程序的接口,在应用程序要恢复一文件中保存的数据时被调用,用于恢复该文件中保存的含内存池结构的头部信息,根据该头部信息在内存池中依次恢复块及块地址索引。
进一步地,内存池结构还包括块链表,用于以块为单位按块单元的块序号依次存放块单元;
内存池数据恢复模块,获取头部信息中的块大小,并创建包含块序号和块地址的地址索引的结构;按块序号从该文件中依次读取块置入块链表的尾部,并更新块地址索引。
进一步地,该装置还包括与内存池结构构建模块连接的内存池访问模块;内存池结构还包括空闲块单元链表,用于按空闲块单元的序号依序存放空闲单元;
内存池访问模块,作为应用程序的接口,在应用程序需要将数据保存在内存池中时被调用,用于申请分配空闲块单元链表中一个或多个块单元来保存数据;或者,在应用程序需要将保存数据的块单元释放时被调用,用于申请释放块链表中一个或多个块单元,并将释放的块单元置入空闲块单元链表的尾部;或者,在应用程序需要访问保存在内存池中的数据成员时被调用,根据数据成员的块单元序号和块单元数目在块链表中查找到块单元的数据地址,依据该数据地址对相应块单元中的数据进行读写访问。
进一步地,内存池结构还包括当前申请块的数目,用于表示内存池当前已经申请块的数目;
内存池访问模块,若查找空闲块单元链表还有足够分配的块单元,则从空闲块单元链表取出要分配的块单元,并返回分配的块单元的块地址和块单元数目;若查找空闲块单元链表没有足够分配的块单元,则从内存中申请一个块到内存池中块链表的尾部,并更新当前申请块的数目,同时将申请块的块单元置入空闲块单元链表的尾部,然后从空闲块单元链表取出要分配的块单元,并返回分配的块单元的块地址和块单元数目。
采用本发明的方法及装置,将内存池技术与文件系统相结合,通过将链表这类较为复杂的数据结构的数据连续保存在结构简化的内存池中,并将该内存池中的数据映射到文件中,便于将该数据结构的数据以文件的形式保存在永久性存储媒介上,以及从该永久性存储媒介中的文件恢复该数据结构的数据到内存中,从而解决该数据结构的数据在多任务之间进行传递过程中关机后再开机所面临的问题。
附图说明
图1是本发明实施例的方法中进行内存池地址映射的示意图;
图2是本发明实施例的方法中申请内存池中块单元的流程;
图3是本发明实施例的方法中将文件中保存的数据结构的数据恢复在内存中的流程;
图4为本发明的实现保存内存中的数据的装置实施例的结构框图。
具体实施例
以下结合附图和优选实施例来详细阐述本发明的技术方案。以下实施例仅仅用于说明和解释本发明,而不用于限制本发明。
为了便于下面技术方案的阐述,先定义以下几个技术名词。
文件关联内存池:用于存储应用程序中较为复杂的链表类数据结构的数据;并且,该存储的数据可以文件的形式进行保存。
块:内存池中分配的最大存储空间。
块单元:内存池中每个块被均分为n个小块,称为块单元,作为内存分配的基本单位;块单元标识称为块单元序号。
本发明的实现保存内存中的数据的方法,包括:
(1)应用程序构建文件关联内存池及其内块中块单元的结构,并将块单元序号和每块的块单元数目映射为块单元的块地址及其块内地址;
内存池有很多实现的方法,本发明的主要目的不是内存池的实现,而是将内存池技术与文件系统结合,实现对较为复杂的链表类数据结构的数据保存在文件中及从文件中恢复的目的。
因此,本发明需要构建具有简化结构的文件关联内存池,亦即对于每一个内存池的实例(即针对应用程序中一种链表类数据结构而引用),每一个块的大小都是一致且固定的,而且,块单元的大小也都是一致且固定的,也就是说一旦在内存池创建时被初始化,块单元的大小及块的大小均被固定而不能被更改。
该文件关联内存池的定义如下:
ADT文件关联内存池
{
块大小;            //块所具有的存储空间
每块的块单元数目;  //每块内含有的块单元数目
空闲块单元链表;    //以链表形式存放可分配的空闲的块单元
块地址索引表;      //用于以块序号为索引查找块在内存的块地址
当前申请块的数目;  //内存池中当前已申请的块的数目
块链表;            //用于以块为单位按块单元序号依次存放块单元
};
其中,ADT表示抽象数据类型(Abstract Data Type)。
上述用于查找块在内存的真实地址的块地址索引表,在每当将数据从文件载入内存时都需要重建的。
本发明用文件关联内存池的头部来存放上述数据结构内的各个参数或链表。该头部由应用程序用来对整个文件关联内存池进行内存管理,包括内存的申请、释放、地址映射以及内存数据的恢复等,正是因为该头部的重要性,当需要将该内存池保存到文件中时,该头部的信息总是保存在文件的首部。
构建块单元的数据结构,综合考虑了块单元的各种实现方案后,最终选择了用结构体(struct)来定义块单元结构。该结构主要包含两个参数字段:块单元序号和数据地址。因为所有的块单元要统一编排序号,故一个字节无法表示块单元序号,至少需要16位(bit)长度的数据类型。
块单元的定义如下:
ADT块单元
{
块单元序号;    //对内存池中所有的块单元统一编排的序号
数据地址;      //块单元的块地址及其块内地址
};
在构建了上述文件关联内存池及其块单元的数据结构之后,便可进行数据地址的映射,亦即将块单元序号和每块的块单元数目映射为块单元的块地址及块单元的块内地址。
由于针对每一内存池实例,每一个块包含的块单元的数目是固定的,块单元的大小也都是固定的,而且块单元又是统一编排序号的,例如,第一个块中的块单元:0~99,第二块中的块单元:100-199,......;通过计算便可以得到块单元的块序号(亦即该块单元属于哪一个块),以及该块单元在块内的相对地址,计算方式如下:
块序号=(块单元序号/每块的块单元数目)取整
其中,(块单元序号/每块的块单元数目)取整,表示将块单元序号对每块的块单元数目进行除法取整运算;
块内地址=(块单元序号)%(每块的块单元数目);
其中,符号“%”表示将块单元序号对每块的块单元数目进行除法取余运算。
如图1所示,就是用本发明进行内存池地址映射的示意图,其中包括对内存池头部、块地址索引表以及块链表的展示。可以看出,块地址索引表用于以块序号为索引,存放在该块在内存中的块地址;块链表用于以块为单位,按块单元的序号依序存放每一块内的块单元。
应用程序通过块单元块序号及其块内地址的运算,并依据块地址索引表以及块链表即可找到块单元在内存中真实的块地址及其块内地址。
(2)在应用程序需要对链表类数据结构的数据进行操作,调用相应的接口执行相应的申请、释放或访问流程;
其中,申请流程如图2所示,包括如下步骤:
210:查找空闲块单元链表;
220:判断空闲块单元链表内是否有足够分配的块单元,是则执行230,否则执行250;
230:从空闲块单元链表中取出要分配的块单元;
240:返回分配的块单元地址和块单元数目,结束流程;
250:从内存中申请一个块到内存池中;
260:判断申请是否成功,即内存是否还有块可分配,是则执行270,否则执行290;
270:将申请的块加入块链表的尾部,并更新当前申请块的数目;
280:将申请块内的块单元加入空闲块单元链表,转步骤230执行;
290:返回内存申请失败信息,结束流程。
释放流程,即查找块链表,根据块单元的数据地址找到相应的块单元序号,并根据申请时的块单元数目将要释放的块单元置入空闲块单元链表。
访问流程,当要访问链表类数据结构内一个成员的数据时,根据该成员的块单元序号和块单元数目在块链表中查找到块单元的数据地址,然后对相应块单元中的数据进行读写访问。
在采用了内存池技术后,块单元的数据结构不同于以往的链表,其中不再有next、prev等指针,而是32位的整形数,包含的内容是块单元序号和块单元的数据地址。
如果要访问链表类数据结构内下一个成员的数据,就要通过下一个成员的块单元序号来找到下一个块单元的数据地址,然后对相应的数据进行访问。
(3)在应用程序需要将文件关联内存池中的数据保存到文件中,或需要将文件中保存的数据恢复到内存(文件关联内存池)时,调用相应的接口执行相应的保存、恢复流程。
其中,保存流程,即先将文件关联内存池的头部保存在文件的首部,然后按块及块单元的顺序依次将块单元、块保存到文件中。
恢复流程如图3所示,包括如下步骤:
310:从文件的首部读取文件关联内存池的头部信息;
320:根据头部信息获取块大小;
330:创建块地址索引表的结构;
地址索引表的结构如图1中所示。
340:从文件中读取一个块,将其加入块链表的尾部,并更新块地址索引表;
350:判断文件中是否还有块未读取,是则返回步骤340执行,否则结束流程。
本发明针对上述方法相应地提出实现保存内存中的数据的装置,其实施例的结构如图4所示,该装置400包括依次连接的内存池结构构建模块410、内存池数据保存模块420、内存池数据恢复模块430,还包括文件关联内存池访问模块440;其中:
内存池结构构建模块410,用于应用程序构建保存链表类数据结构的数据的文件关联内存池4201及其块单元的结构,并将文件关联内存池4201中块单元序号和每块的块单元数目映射为块单元的块地址及其块内地址;
其中,构建的文件关联内存池4201及其块单元的结构如前所述,此不再赘述。
内存池数据保存模块420,作为应用程序的接口,在应用程序需要将文件关联内存池中的数据保存到文件系统4201中的文件中时被调用,用于先将文件关联内存池4101的头部保存在该文件的首部,然后按块及块单元的顺序依次将块单元、块保存到该文件中;
内存池数据恢复模块430,作为应用程序的接口,在应用程序需要将文件系统4201中的文件恢复到文件关联内存池4101时被调用,用于从该文件的首部读取文件关联内存池4101的头部信息,根据该头部信息获取块大小,并创建块地址索引表的结构,按块单元的序号从该文件中依次读取每一个块,加入块链表的尾部,并更新块地址索引表;
文件关联内存池访问模块440,作为应用程序的接口与内存池结构构建模块410构建的文件关联内存池4101连接,在应用程序需要对链表类数据结构的数据进行操作时被调用,用于对文件关联内存池4101进行相应的块单元申请、块单元访问或块单元释放操作。
其中,块单元申请、块单元访问或块单元释放操作如前所述,此不再赘述。
以上本发明的实现在内存中保存数据的装置实施例,还可以有其它变化的结构,譬如内存池数据保存模块420与内存池数据恢复模块430合为一个内存池数据保存/恢复模块,等等。
综上可以看出,本发明将内存池技术与文件系统相结合,通过将链表这类较为复杂的数据结构的数据保存在结构简化的内存池中,并将该内存池中的数据映射到文件中,便于将该数据结构的数据以文件的形式保存在永久性存储媒介上,以及从该永久性存储媒介中的文件恢复该数据结构的数据到内存中,从而解决该数据结构的数据在多任务之间进行传递过程中关机后再开机所面临的问题。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (13)

1.一种实现保存内存中的数据的方法,包括:
应用程序为在内存中保存数据预先构建以块内块单元为单位的内存池结构及块单元结构,所述内存池结构至少包括块大小及每块的块单元数目,所述块单元结构至少包括块单元标识;将所述块单元标识和所述每块的块单元数目映射为所述块单元的块地址及块内地址;
应用程序在需要保存所述块内块单元中的数据时,将含有所述内存池结构的头部信息保存在一文件中,并按所述块单元标识依次将所述块单元中的数据保存到所述文件中。
2.按照权利要求1所述的方法,其特征在于,所述内存池结构还包括块地址索引,用于索引所述块单元在所述内存中的块地址;所述块单元结构还包括数据地址;所述块单元标识用所述块单元的序号表示;
将所述块单元标识和所述每块的块单元数目映射为所述块单元的块地址及块内地址是指,将所述块单元的序号对所述每块的块单元数目进行除法取整运算,获取所述块单元的块序号,按所述块序号从所述块地址索引中获取所述块单元的块地址;将所述块单元的序号对所述每块的块单元数目进行除法取余运算,获取所述块单元的块内地址;获取的所述块单元的块地址和所述块内地址由所述数据地址表述;
将含有所述内存池结构的头部信息和所述块单元中的数据保存在所述文件中是指,将含有所述内存池结构的头部信息保存在所述文件的首部,然后按所述块单元的序号依次将所述块单元中的数据保存到所述文件中。
3.按照权利要求2所述的方法,其特征在于,应用程序在需要恢复一文件中保存的数据时,首先恢复所述文件中保存的含所述内存池结构的头部信息,根据所述头部信息在所述内存中依次恢复所述块及所述块地址索引。
4.按照权利要求3所述的方法,其特征在于,所述内存池结构还包括块链表,用于以块为单位按所述块单元的块序号依次存放所述块单元;所述根据所述头部信息依次恢复所述块及所述块地址索引具体包括:
获取所述头部信息中的所述块大小,并创建包含所述块序号和所述块地址的所述地址索引的结构;
按所述块序号从所述文件中依次读取所述块并置入所述块链表的尾部,并更新所述块地址索引。
5.按照权利要求4所述的方法,其特征在于,所述内存池结构还包括空闲块单元链表,用于按空闲块单元的序号依序存放空闲单元;
应用程序在需要将数据保存在所述内存池中时,申请分配所述空闲块单元链表中一个或多个块单元,用于所述数据的保存;或者,应用程序在需要将保存所述数据的块单元释放时,申请释放所述块链表中一个或多个块单元,并将释放的所述块单元置入所述空闲块单元链表的尾部。
6.按照权利要求5所述的方法,其特征在于,所述内存池结构还包括当前申请块的数目,用于表示所述内存池当前已经申请块的数目;
申请分配所述空闲块单元链表中一个或多个块单元具体包括:若查找所述空闲块单元链表还有足够分配的块单元,则从所述空闲块单元链表取出要分配的块单元,并返回分配的块单元的所述块地址和块单元数目;若查找所述空闲块单元链表没有足够分配的块单元,则从所述内存中申请一个块到所述内存池中所述块链表的尾部,并更新所述当前申请块的数目,同时将申请块的块单元置入所述空闲块单元链表的尾部,然后从所述空闲块单元链表取出要分配的块单元,并返回分配的块单元的所述块地址和块单元数目。
7.按照权利要求5或6所述的方法,其特征在于,应用程序在需要访问保存在所述内存池中的数据成员时,根据所述数据成员的块单元序号和块单元数目在所述块链表中查找到所述块单元的所述数据地址,依据所述数据地址对相应块单元中的数据进行读写访问。
8.一种实现保存内存中的数据的装置,包括依次连接的内存池结构构建模块以及内存池数据保存模块,其中:
所述内存池结构构建模块,用于预先构建以块内块单元为单位的内存池结构及块单元结构,所述内存池结构至少包括块大小及每块的块单元数目,所述块单元结构至少包括块单元标识;将所述块单元标识和所述每块的块单元数目映射为所述块单元的块地址及块内地址;
所述内存池数据保存模块,作为应用程序的接口,在所述应用程序需要保存所述内存池中的数据时被调用,用于将含有所述内存池结构的头部信息保存一文件中,并按所述块单元标识依次将所述块单元中的数据保存到所述文件中。
9.按照权利要求8所述的装置,其特征在于,所述内存池结构还包括块地址索引,用于索引所述块单元在所述内存中的块地址;所述块单元的结构还包括数据地址;所述块单元标识用所述块单元的序号表示;
所述内存池结构构建模块,将所述块单元的序号对所述每块的块单元数目进行除法取整运算,获取所述块单元的块序号,按所述块序号从所述块地址索引中获取所述块单元的块地址;将所述块单元的序号对所述每块的块单元数目进行除法取余运算,获取所述块单元的块内地址;获取的所述块单元的块地址和所述块内地址由所述数据地址表述;
所述内存池数据保存模块,将所述头部信息保存在所述文件的首部,然后按所述块单元序号依次将所述块单元中的数据保存到所述文件中。
10.按照权利要求9所述的装置,其特征在于,还包括与所述内存池数据保存模块连接的内存池数据恢复模块,其中:
所述内存池数据恢复模块,作为应用程序的接口,在应用程序要恢复一文件中保存的数据时被调用,用于恢复所述文件中保存的含所述内存池结构的头部信息,根据所述头部信息在所述内存池中依次恢复所述块及所述块地址索引。
11.按照权利要求10所述的装置,其特征在于,所述内存池结构还包括块链表,用于以块为单位按所述块单元的块序号依次存放所述块单元;
所述内存池数据恢复模块,获取所述头部信息中的所述块大小,并创建包含所述块序号和所述块地址的所述地址索引的结构;按所述块序号从所述文件中依次读取所述块置入所述块链表的尾部,并更新所述块地址索引。
12.按照权利要求11所述的装置,其特征在于,还包括与所述内存池结构构建模块连接的内存池访问模块;所述内存池结构还包括空闲块单元链表,用于按空闲块单元的序号依序存放空闲单元;
所述内存池访问模块,作为应用程序的接口,在应用程序需要将数据保存在所述内存池中时被调用,用于申请分配所述空闲块单元链表中一个或多个块单元来保存所述数据;或者,在应用程序需要将保存所述数据的块单元释放时被调用,用于申请释放所述块链表中一个或多个块单元,并将释放的所述块单元置入所述空闲块单元链表的尾部;或者,在应用程序需要访问保存在所述内存池中的数据成员时被调用,根据所述数据成员的块单元序号和块单元数目在所述块链表中查找到所述块单元的所述数据地址,依据所述数据地址对相应块单元中的数据进行读写访问。
13.按照权利要求12所述的装置,其特征在于,所述内存池结构还包括当前申请块的数目,用于表示所述内存池当前已经申请块的数目;
所述内存池访问模块,若查找所述空闲块单元链表还有足够分配的块单元,则从所述空闲块单元链表取出要分配的块单元,并返回分配的块单元的所述块地址和块单元数目;若查找所述空闲块单元链表没有足够分配的块单元,则从所述内存中申请一个块到所述内存池中所述块链表的尾部,并更新所述当前申请块的数目,同时将申请块的块单元置入所述空闲块单元链表的尾部,然后从所述空闲块单元链表取出要分配的块单元,并返回分配的块单元的所述块地址和块单元数目。
CN2009102037724A 2009-06-12 2009-06-12 一种实现保存内存中的数据的方法及装置 Expired - Fee Related CN101582092B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN2009102037724A CN101582092B (zh) 2009-06-12 2009-06-12 一种实现保存内存中的数据的方法及装置
PCT/CN2010/073078 WO2010142196A1 (zh) 2009-06-12 2010-05-21 一种保存数据的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009102037724A CN101582092B (zh) 2009-06-12 2009-06-12 一种实现保存内存中的数据的方法及装置

Publications (2)

Publication Number Publication Date
CN101582092A CN101582092A (zh) 2009-11-18
CN101582092B true CN101582092B (zh) 2011-04-20

Family

ID=41364238

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009102037724A Expired - Fee Related CN101582092B (zh) 2009-06-12 2009-06-12 一种实现保存内存中的数据的方法及装置

Country Status (2)

Country Link
CN (1) CN101582092B (zh)
WO (1) WO2010142196A1 (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101582092B (zh) * 2009-06-12 2011-04-20 中兴通讯股份有限公司 一种实现保存内存中的数据的方法及装置
CN103136104B (zh) * 2011-11-24 2016-04-06 深圳市快播科技有限公司 一种内存管理方法和系统
CN103164490B (zh) * 2011-12-19 2016-02-17 北京新媒传信科技有限公司 一种不固定长度数据的高效存储实现方法和装置
CN102999581B (zh) * 2012-11-14 2016-05-11 北京北纬点易信息技术有限公司 用于业务中大用户量数据访问及实时排序系统
CN103873389B (zh) * 2012-12-12 2018-05-04 北京百度网讯科技有限公司 一种标识资源分配方法及系统
CN103593485B (zh) * 2013-12-04 2017-06-16 网易传媒科技(北京)有限公司 实现数据库实时操作的方法和设备
CN105159837A (zh) * 2015-08-20 2015-12-16 广东睿江科技有限公司 一种内存管理方法
CN106126442A (zh) * 2016-06-17 2016-11-16 北京京坤倍益科技发展有限公司 一种数据存储结构和遥感卫星数据存储系统
CN106776375A (zh) * 2016-12-27 2017-05-31 东方网力科技股份有限公司 一种磁盘内部的数据缓存方法及装置
CN108804571B (zh) * 2018-05-23 2021-11-05 湖南博匠信息科技有限公司 一种数据存储方法、装置以及设备
CN110287044B (zh) * 2019-07-02 2021-08-03 广州虎牙科技有限公司 无锁共享内存处理方法、装置、电子设备及可读存储介质
CN113238857B (zh) * 2021-04-21 2022-10-14 宜通世纪物联网研究院(广州)有限公司 一种基于内存池的map映射表多线程遍历方法及装置
CN114741076B (zh) * 2022-04-20 2024-05-31 重庆长安汽车股份有限公司 一种基于soa服务参数快速定义的方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1664793A (zh) * 2005-03-11 2005-09-07 清华大学 基于元数据服务器的存储虚拟化管理方法
CN1954318A (zh) * 2004-05-20 2007-04-25 国际商业机器公司 用于保持可由客户机通过网络访问的文件集名称空间的方法、系统和程序
CN101105763A (zh) * 2006-07-13 2008-01-16 国际商业机器公司 用于并行存储的装置、系统和方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100517240C (zh) * 2006-06-21 2009-07-22 中兴通讯股份有限公司 一种嵌入式操作系统的内存池分配方法
WO2008046670A1 (en) * 2006-10-18 2008-04-24 International Business Machines Corporation A method of controlling filling levels of a plurality of storage pools
CN101582092B (zh) * 2009-06-12 2011-04-20 中兴通讯股份有限公司 一种实现保存内存中的数据的方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1954318A (zh) * 2004-05-20 2007-04-25 国际商业机器公司 用于保持可由客户机通过网络访问的文件集名称空间的方法、系统和程序
CN1664793A (zh) * 2005-03-11 2005-09-07 清华大学 基于元数据服务器的存储虚拟化管理方法
CN101105763A (zh) * 2006-07-13 2008-01-16 国际商业机器公司 用于并行存储的装置、系统和方法

Also Published As

Publication number Publication date
CN101582092A (zh) 2009-11-18
WO2010142196A1 (zh) 2010-12-16

Similar Documents

Publication Publication Date Title
CN101582092B (zh) 一种实现保存内存中的数据的方法及装置
CN100485681C (zh) 智能卡存储系统及该系统中文件创建管理的方法
CN102508784B (zh) 视频监控设备中闪存卡的数据存储方法及其系统
CN101124555B (zh) 具有多流更新的非易失性存储器和方法
CN100456264C (zh) 一种磁盘空间管理方法及系统
CN104298681B (zh) 一种数据存储方法及装置
CN100440221C (zh) 管理文件系统的设备和方法
CN101763415B (zh) 一种数据库的b树索引的生成方法及装置
CN101983376B (zh) 访问装置、信息记录装置、信息记录系统、文件管理方法和程序
CN101162441B (zh) 数据的存取装置和方法
CN107479922A (zh) 一种闪存数据管理方法、装置及计算机可读存储介质
CN103365786B (zh) 数据存储方法、装置和系统
CN103049224B (zh) 将数据导入物理磁带的方法、装置和系统
CN106528443B (zh) 适用于星载数据管理的flash管理系统及方法
CN100458736C (zh) Nand闪存信息提取方法和nand闪存自动识别方法
CN103996412A (zh) 一种用于智能卡非易失性存储器的掉电保护方法
CN104750432B (zh) 一种数据存储方法及装置
CN103544124B (zh) Nand Flash存储器的访问方法
CN103268270A (zh) 快照的管理方法和装置
CN102122284B (zh) 一种复合文档存储、读写方法和装置
CN106598548A (zh) 存储单元读写冲突的解决方法及装置
CN103064749B (zh) 一种进程间通信方法
CN105653208A (zh) 数据存储系统及基于该系统的数据读写方法
CN104268097A (zh) 一种元数据处理方法及系统
CN101848150B (zh) 维护多播计数器的计数值的方法及装置

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
CB03 Change of inventor or designer information

Inventor after: Wang Yuchang

Inventor after: Huang Qiangsheng

Inventor before: Wang Yuchang

CB03 Change of inventor or designer information
TR01 Transfer of patent right

Effective date of registration: 20170608

Address after: 100012, No. 10, building 1, 8 Fang Fang Road, Chaoyang District, Beijing, 816

Patentee after: Beijing topstor Technology Co.,Ltd.

Address before: 518057 Nanshan District high tech Industrial Park, Guangdong, South Road, science and technology, ZTE building, legal department

Patentee before: ZTE Corp.

TR01 Transfer of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110420

CF01 Termination of patent right due to non-payment of annual fee