专利申请典型案例-权利要求书

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

权利要求书1000012016.411.一种基于共享内存池的通用数据存储方法,其步骤包括:1)为目标应用申请一块共享内存,根据该目标应用要存储内容类别的不同将该共享内存分为m个内存块;其中,每一个内存块的头部存储该内存块的管理者结构,内存块剩余空间分为n个内存单元,在每一内存块中构建一个共享内存池;2)在每一内存块里构建两个双向循环链表,即空闲链表和繁忙链表;其中空闲链表用于维护内存块的空闲内存单元,繁忙链表用于维护内存块的繁忙内存单元;初始化时所有内存单元属于空闲链表,繁忙链表为空,管理者结构的空闲链表索引iFree指向当前内存块的空闲链表头节点,繁忙链表索引iBusy指向繁忙链表头节点索引;3)当该目标应用每次存储数据时,调用一次存储接口;在存储接口内根据待存储数据大小从该共享内存中进行若干次内存单元申请直至本次数据存储完成,并将本次申请到的内存单元形成单链表,将本次申请到的第一个内存单元作为首节点加入繁忙链表,后续申请到的内存单元作为子节点,挂在首节点后形成单链表,将单链表中的节点通过子索引串联起来。2.如权利要求1所述的方法,其特征在于,所述管理者结构记录当前内存块内存单元总数totalNum、空闲单元数freeNum、繁忙单元数busyNum、空闲链表头索引iFree、繁忙链表头索引iBusy和内存块编号信息;每一所述内存单元中具有一内存单元结构,用于记录内存单元在当前内存块中的索引值index、内存单元的前驱节点索引pre、内存单元的后继节点索引next、存储数据的key值、key值长度、数据内容、数据内容长度、写入时间、子节点个数subCnt、节点子索引subIndex以及子节点后继索引值subNextIndex;节点子索引subIndex是指节点在单链表中的索引。3.如权利要求2所述的方法,其特征在于,步骤3)中,每次存储数据时,先根据待存储数据大小和内存单元数据区大小计算此次存储所需内存单元数,如果所需内存单元数超过空闲单元数,则此次申请失败;若申请的内存单元数小于或等于空闲单元数,则根据内存单元的需求数量循环申请空闲单元,每次申请时直接取管理者结构空闲链表头索引iFree指向的节点,如果是存储接口第一次申请空闲单元,则将取到的节点插入到繁忙链表头索引iBusy指向的节点之前作为新的头节点;通过双向循环链表增删操作,使加入新单元的繁忙链表和摘掉iFree节点的空闲链表重新形成双向循环链表;如果存储接口不是第一次申请空闲单元,则把申请到的内存单元依次挂到单链表首节点后面;每次申请空闲单元后修改管理者结构的空闲单元数freeNum减一,繁忙单元数busyNum数量加一;然后向申请到的内存单元写入数据key值和key长度,向数据区写入数据片段,如果当前所申请的内存单元是此次申请所需的最后一个内存单元,则数据长度为剩余的数据长度,否则数据长权利要求书1000012016.42度为内存单元数据区长度。4.如权利要求3所述的方法,其特征在于,存储数据时更新对应内存单元的内存单元结构的子节点个数subCnt和子节点索引subIndex,同时将内存单元的索引值记录到数组中,直到申请完本次存储全部所需内存单元。5.如权利要求1所述的方法,其特征在于,将内存块的编号作为该内存块对应的内存池编号,各内存池共用信号量编号semid,将内存池编号作为对应内存池的信号量数组索引sem_num值。6.如权利要求1所述的方法,其特征在于,当进行检索数据时,根据输入的内存块编号、key值和查找顺序搜索繁忙链表,匹配到存储数据的首节点后,依靠该首节点中记录的后继节点信息找到下一个数据片段的存储位置,再把不同片段连接起来返回。7.如权利要求1所述的方法,其特征在于,通过一删除接口释放存内存单元,其方法为:首先定位待释放内存单元对应的目标节点,然后找到要删除数据的首节点,然后逐个删除由该首节点引导到的单链表节点;如果当前到删除的是首节点,则将该首节点从繁忙链表中取出插入到空闲链表头索引iFree后,如果当前删除的是非首节点,则将删除的节点从单链表中取出插入到空闲链表头索引iFree后,如果空闲链表头索引iFree为空,则将当前删除的节点作为新的空闲链表头索引iFree节点;当删除的目标节点是繁忙链表头索引iBusy时,删除该目标节点后,新的繁忙链表头索引iBusy指向该目标节点的后继节点索引next。8.如权利要求1所述的方法,其特征在于,通过一修改接口修改内存单元中的数据,其方法为:首先定位到待修改数据所在的目标内存单元,该目标内存单元中记录着原数据占用的总内存单元数;根据新数据和节点数据区大小计算新数据所需内存单元个数,如果原数据已占用的内存单元数等于新数据所需内存单元数,则直接遍历该目标内存单元所对应目标节点引导的单链表,重写数据区;如果已占用的内存单元数大于新数据所需内存单元数,则把新数据用到的内存单元数据区重写,修改子节点个数subCnt和节点子索引subIndex,再将剩余的内存单元从繁忙链中删除;如果新数据占用的内存单元数大于原数据已占用内存单元数,则遍历该目标内存单元所对应目标节点引导的单链表i,重写数据区,当到达该单链表i的链尾时申请新内存单元直到新数据存储完成。9.如权利要求1所述的方法,其特征在于,为该目标应用申请所述共享内存的方法为:通过系统调用函数shmget将一段物理内存映射到该目标应用的地址空间中。

1 / 2
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功