CN114327942A - 一种共享内存管理方法和缓存服务组件 - Google Patents
一种共享内存管理方法和缓存服务组件 Download PDFInfo
- Publication number
- CN114327942A CN114327942A CN202111595898.8A CN202111595898A CN114327942A CN 114327942 A CN114327942 A CN 114327942A CN 202111595898 A CN202111595898 A CN 202111595898A CN 114327942 A CN114327942 A CN 114327942A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- continuous
- unoccupied
- capacity
- 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.)
- Pending
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请示出一种共享内存管理方法和缓存服务组件,其中,缓存服务组件包括:缓存分配器和数据项队列管理器;缓存分配器用于虚拟内存的分配和释放;数据项队列管理器用于记录缓存分配器中的数据在虚拟内存中的位置和数据项总大小;缓存分配器包括:第一头部区和数据区,第一头部区用于记录已分配的虚拟内存的偏移和大小,数据区包括多个等分的内存块,内存块用于记录已放入虚拟内存中的数据;数据项队列管理器包括:第二头部区和元素区,第二头部区与元素区连接,元素区包括循环队列,循环队列用于记录数据项的起始偏移和数据项总大小,第二头部区用于记录循环队列的特征信息。本申请示出技术方案,能够独立进行图像保存,操作简便且易维护。
Description
技术领域
本申请涉及共享内存技术领域,尤其涉及一种内存管理方法和缓存服务组件。
背景技术
现有的图形化智能视觉软件(如,VISIONAssembly)支持数据库存储、在线数据统计和报表输出等功能,能够提供几百种定位、检测、测量、标定、对位、读码等图像处理工具,可通过可视化流程编程以快速搭建复杂的工业应用。
现有的图形化智能视觉软件在项目现场存在数据(如图像数据、文本数据、表格数据等)保存时间不稳定、外部接口操作频繁等情况,导致出现整体流程运行时间延长、超时引起的设备报警等问题,给用户带来了维护难度,加大了项目的实施难度。
发明内容
本申请提供一种缓存服务组件和共享内存管理方法,能够解决数据保存时间不稳定、设备报警等问题,将数据保存功能从图形化智能视觉软件中独立出来,以便在外部接口频繁操作的同时不影响图形化智能视觉软件。
第一方面,本申请示出一种共享内存管理方法,所述方法包括:获取虚拟内存使用数据;所述虚拟内存中包括多个内存块;根据所述虚拟内存使用数据判断所述虚拟内存中是否仅包含一个连续内存块;如果所述虚拟内存中的已占用的连续内存块个数等于1,执行缓存分配算法以存储第一数据,所述第一数据可以为同一时间内存储的单个数据,也可以为同一时间内存储的多个数据。
在一些实施例中,所述方法还包括:根据所述虚拟内存使用数据获取所述第一数据的起始偏移;判断所述第一数据的数据偏移和所述第一数据的内存容量之和是否大于所述虚拟内存分配的内存容量,如果所述第一数据的数据偏移和所述第一数据的内存容量之和大于所述虚拟内存分配的内存容量,进行报错处理;如果所述第一数据的数据偏移和所述第一数据的内存容量之和小于或等于所述虚拟内存分配的内存容量,获取所述第一数据的起始偏移以释放所述第一数据的内存容量。
在一些实施例中,所述虚拟内存使用数据包括:内存块总容量、已占用的所述内存块的起始偏移和已占用的所述内存块的内存容量;所述执行缓存分配算法以存储第一数据,包括:根据所述内存块总容量、已占用的所述内存块的起始偏移和已占用的所述内存块的内存容量获取未占用的内存块的内存容量;从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据;如果所述未占用的内存块中包含能够存储所述第一数据的未占用的连续内存块,将所述第一数据存储至所述未占用的连续内存块中;如果所述未占用的内存块中不包含能够存储所述第一数据的连续内存块,将所述第一数据存储至所述已占用的连续内存块中的末位连续内存块后面的内存块;如果存储后溢出,进行报错处理;如果存储后未溢出,将所述第一数据返回起始偏移。
在一些实施例中,所述从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据,包括:当所述虚拟内存中的已占用的连续内存块等于1时,获取所述未占用的连续内存块的内存容量;如果所述未占用的连续内存块的内存容量大于或等于所述第一数据的内存容量,将所述第一数据存储至所述未占用的连续内存块中。
在一些实施例中,所述从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据,包括:当所述虚拟内存中的已占用的连续内存块大于1时,获取所述未占用的连续内存块的内存容量;如果所述未占用的连续内存块的内存容量等于所述第一数据的内存容量,将所述第一数据存储至与所述第一数据的内存容量相等的未占用的连续内存块中,并将所述第一数据占用的连续内存块与相邻两侧的连续内存块合并,更新所述虚拟内存中的连续内存块数量。
在一些实施例中,所述从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据,包括:当所述虚拟内存中的已占用的连续内存块大于1时,获取所述未占用的连续内存块的内存容量;如果所述未占用的连续内存块的内存容量大于所述第一数据的内存容量,选取所述未占用的连续内存块中内存容量与所述第一数据的内存容量差值最小的未占用的连续内存块;将所述第一数据存储至所述选取的未占用的连续内存块中,并将所述第一数据占用的连续内存块与其左侧相邻的连续内存块合并。
在一些实施例中,所述获取所述第一数据的起始偏移以释放所述第一数据的内存容量,包括:遍历所述虚拟内存中的已占用的连续内存块,以获取所述第一数据的起始偏移;如果所述第一数据的起始偏移处于任一所述连续内存块的起始位置,且所述第一数据的内存容量与所述连续内存块的内存容量相等,则删除所述连续内存块以释放所述第一数据;如果所述第一数据的起始偏移处于任一所述连续内存块的起始位置,且所述第一数据的内存容量小于所述连续内存块的内存容量,则修改所述连续内存块的末位内存块的内存容量的大小以释放所述第一数据;如果所述第一数据的起始偏移处于任一所述连续内存块的中间位置,且所述第一数据的内存容量小于所述连续内存块的内存容量,则分割所述连续内存块并插入一个新的连续内存块以释放所述第一数据;如果所述第一数据的起始偏移处于任一所述连续内存块的右侧位置,且所述第一数据的首位内存块的内存容量小于单个内存块的内存容量,则修改所述第一数据的首位内存块占据的单个内存块的内存容量的大小以释放所述第一数据。
第二方面,本申请还示出一种缓存服务组件,用于执行如上任一所述的共享内存管理方法,所述缓存服务组件包括:缓存分配器和数据项队列管理器;其中,所述缓存分配器用于虚拟内存的分配和释放;所述数据项队列管理器用于记录所述缓存分配器中的数据在所述虚拟内存中的位置和数据项总大小;所述缓存分配器包括:第一头部区和数据区,所述第一头部区与所述数据区连接,所述第一头部区用于记录已分配的所述虚拟内存的偏移和大小,所述数据区包括多个等分的内存块,所述内存块用于记录已放入所述虚拟内存中的的数据;所述数据项队列管理器包括:第二头部区和元素区,所述第二头部区与所述元素区连接,所述元素区包括循环队列,所述循环队列用于记录数据项的起始偏移和数据项总大小,所述第二头部区用于记录所述循环队列的特征信息。
在一些实施例中,每个所述内存块的容量优选为64KB。
以上示出的技术方案,示出了一种共享内存管理方法和缓存服务组件,本申请示出的缓存服务组件实质是一种异步存储机制,将需要保存的数据存储至共享内存中,然后文件系统取出共享内存的数据进行保存,以将数据保存功能从图形化智能视觉软件中独立出来,能够在外部接口频繁操作的同时不影响图形化智能视觉软件。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了根据一些实施例的缓存服务组件示意图;
图2示出了根据一些实施例的共享内存管理方法流程示意图;
图3示出了根据一些实施例的第一数据的内存容量等于未占用的连续内存块的情况;
图4示出了根据一些实施例的第一数据的内存容量小于未占用的连续内存块的情况;
图5示出了根据一些实施例的第一数据的起始偏移位于内存块起始位置的情况;
图6示出了根据一些实施例的第一数据的起始偏移位于内存块起始位置的另一种情况;
图7示出了根据一些实施例的第一数据的起始偏移位于内存块中间位置的情况;
图8示出了根据一些实施例的第一数据的起始偏移位于内存块右侧位置的情况。
具体实施方式
为使本申请的目的和实施方式更加清楚,下面将结合本申请示例性实施例中的附图,对本申请示例性实施方式进行清楚、完整地描述,显然,描述的示例性实施例仅是本申请一部分实施例,而不是全部的实施例。
需要说明的是,本申请中对于术语的简要说明,仅是为了方便理解接下来描述的实施方式,而不是意图限定本申请的实施方式。除非另有说明,这些术语应当按照其普通和通常的含义理解。
本申请中说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”等是用于区别类似或同类的对象或实体,而不必然意味着限定特定的顺序或先后次序,除非另外注明。应该理解这样使用的用语在适当情况下可以互换。
图1为本申请示出的一种缓存服务组件,所述缓存服务组件包括:缓存分配器和数据项队列管理器;
其中,所述缓存分配器用于虚拟内存的分配和释放;所述数据项队列管理器用于记录所述缓存分配器中的数据在所述虚拟内存中的位置和数据项总大小;
所述缓存分配器包括:第一头部区和数据区,所述第一头部区与所述数据区连接,所述第一头部区用于记录已分配的所述虚拟内存的偏移和大小,所述数据区包括多个等分的内存块,所述内存块用于记录已放入所述虚拟内存中的的数据;
所述数据项队列管理器包括:第二头部区和元素区,所述第二头部区与所述元素区连接,所述元素区包括循环队列,所述循环队列用于记录数据项的起始偏移和数据项总大小,所述第二头部区用于记录所述循环队列的特征信息。
在一些实施例中,第一头部区为如图1所示的区域,第一头部区能够记录整个缓存分配器中虚拟内存的总容量、已分配的所述虚拟内存的偏移和大小以及所述第一头部区在所述虚拟内存中占用的内存容量。数据区包括多个等分的内存块,每个所述内存块的容量优选为64KB。第一头部区记录上述数据可采用GsCapacity Data数据结构。以该数据结构记录的已分配的所述内存的大小以64KB的整数倍表示。
具体实现中,以整个缓存分配器中虚拟内存的总容量为2GB,第一头部区在所述虚拟内存中占用的内存容量为256KB;如果每个内存块的容量设置为64KB,则在数据区形成M行N列的内存块的排列方式;其中,M为大于等于1的正整数,N为大于等于1的正整数;本申请中的示例均以图像数据为示例,但本申请示出的技术方案能够存储的数据包括但不限于图像数据。
如果同时向所述虚拟内存中存入4个图像数据,分别为30KB、60KB、120KB、128KB,此时,由于多个图像同时存储,因此图像数据可以在数据区随机存储,其中,30KB的图像数据可以存储在第一行第一列的内存块中;60KB的图像数据可以存储在第二行第二列的内存块中;120KB的图像数据可以存储在第三行第三列的内存块中,由于单个内存块的内存容量为64KB,因此120KB的图像可以占用第三行第三列以及第三行第四列的两个内存块;128KB的图像数据可以存储在第四行第四列以及第四行第五列的两个内存块中。需要注意的是,在单个用户向所述虚拟内存中存储数据时,所述数据存储形式为依次存储,所述数据在所述数据区形成一个连续的内存块,数据与数据间不存在未存储数据的内存块;在多个用户同时向所述虚拟内存中存储数据时,所述数据存储形式为同步随机存储,数据与数据间存在未存储数据的内存块。
需要说明的是,第一头部区在记录上述4个图像的已分配的所述虚拟内存的偏移和大小过程中,实质为记录所述4个图像所占用的内存块的偏移和容量,而并非图像数据的实际大小。记录上述4个图像数据的已分配的所述虚拟内存的大小可以为:4(64KB、64KB、128KB、128KB);其中,4为4个图像数据占用的连续内存块的个数,括号中内容为4个图像数据分别占据的内存块容量;本申请中示出的记录形式仅为一示例形式,具体记录过程还可以采用其他形式。
图像数据在存储至数据区的过程中需要进行格式转换以便于存储,其转换后的格式主要包括以下数据:校验数据、数据项总大小、保存路径、数据长度、保存策略、保存模式以及数据指针。其中,校验数据设置为16字节,用于检验数据的完整性;数据项总大小设置为8字节,用于记录整个数据项的大小,在对图像数据分配内存块时,是根据数据项总大小对图像数据分配内存块的;保存路径设置为1000字节,用于记录需要存储的数据和名称;数据长度设置为8字节,数据指针设置为8字节,数据长度和数据指针共同作用,用于将图像数据或其他文件数据拷贝到缓存;保存策略设置为4字节,用于确定保存方式,例如普通文件读写或IO数据流的保存方式;保存模式设置为4字节,用于确定数据保存时的模式,例如二进制写、追加写或覆盖写的保存模式。
数据项队列管理器用于记录数据的起始偏移和数据项总大小,其中,数据项总大小为数据的实际大小,以上述虚拟内存中存入4个图像数据为例,元素区以循环队列的形式记录上述4个图像,循环队列的每行记录一个数据的起始偏移和实际内存占用容量;例如,在循环队列的第一行记录第一行第一列内存块的起始偏移,以及图像数据的大小30KB。
第二头部区用于记录循环队列的特征信息包括:填充数据、队列容量、队头索引以及队尾索引。
上述为缓存服务组件在技术层面的实施方式,逻辑层面实现中,本申请示出的技术方案为一个典型的生产者/消费者模型,在该模型中,生产者负责生产数据,消费者负责使用数据。多个生产者线程会在同一时间运行,生产数据,并放到内存中一个共享的区域。缓存服务组件其实就是这个共享的区域以及一组对缓存操作的接口。缓存服务组件从逻辑上主要分为缓存Host和缓存Agent,缓存Agent又分为生产者(如图形化智能软件VISIONAssembly程序)和消费者(文件服务),生产者和消费者会调用缓存操作的接口,完成业务层的处理,比如保存图像,追加或者覆盖的方式保存TXT和EXCEL文件等等。本申请示出的缓存服务组件,具有可移植性、耦合小、可以兼容多种文件格式、接口易用操作简单的特点。
上述缓存服务组件中配置有如下所示的共享内存管理方法,通过在缓存服务组件中配制该方法,以及实现缓存的分配和释放。
图2为本申请示出的一种共享内存管理方法,所述方法包括:
步骤S101,获取虚拟内存使用数据;所述虚拟内存中包括多个内存块;
在一些实施例中,通过成员变量std::vector<GsCapacityData>m_vctElem记录当前虚拟内存的使用情况;以获取虚拟内存的分配的所述虚拟内存的偏移和大小。在进行虚拟内存的分配时采用分配算法int Alloc_int64&nOffset,size_t nSize)。
步骤S102,根据所述虚拟内存使用数据判断所述虚拟内存中是否仅包含一个连续内存块;
在一些实施例中,通过m_vctElem遍历虚拟内存中已占用内存块以获得内存偏移和内存容量的大小。
步骤S103,如果所述虚拟内存中的已占用的连续内存块个数等于1,执行缓存分配算法以存储第一数据,所述第一数据可以为同一时间内存储的单个数据,也可以为同一时间内存储的多个数据。
在一些实施例中,所述虚拟内存使用数据包括:内存块总容量、已占用的所述内存块的起始偏移和已占用的所述内存块的内存容量;
所述执行缓存分配算法以存储第一数据,包括:
根据所述内存块总容量、已占用的所述内存块的起始偏移和已占用的所述内存块的内存容量获取未占用的内存块的内存容量;
从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据;
如果所述未占用的内存块中包含能够存储所述第一数据的未占用的连续内存块,将所述第一数据存储至所述未占用的连续内存块中;
如果所述未占用的内存块中不包含能够存储所述第一数据的连续内存块,将所述第一数据存储至所述已占用的连续内存块中的末位连续内存块后面的内存块;
如果存储后溢出,进行报错处理;
如果存储后未溢出,将所述第一数据返回起始偏移。
在一些实施例中,所述从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据,包括:
当所述虚拟内存中的已占用的连续内存块等于1时,获取所述未占用的连续内存块的内存容量;
如果所述未占用的连续内存块的内存容量大于或等于所述第一数据的内存容量,将所述第一数据存储至所述未占用的连续内存块中。
在一些实施例中,所述从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据,包括:
当所述虚拟内存中的已占用的连续内存块大于1时,获取所述未占用的连续内存块的内存容量;
如果所述未占用的连续内存块的内存容量等于所述第一数据的内存容量,将所述第一数据存储至与所述第一数据的内存容量相等的未占用的连续内存块中,并将所述第一数据占用的连续内存块与相邻两侧的连续内存块合并,更新所述虚拟内存中的连续内存块数量。图3示出了一种第一数据的内存容量等于未占用的连续内存块的情况。当有多人同时存储数据时,数据区的内存块不以连续方式存入,数据与数据之间存在未占用的连续内存块,此时,从未占用的连续内存块中筛选出与第一数据的内存容量相等的连续内存块,将第一数据存入该连续内存块中,此时,原有的两个连续内存块由于存入了第一数据而连接起来,形成了新的连续内存块,因此,删除右侧连续内存块的相关信息,更新连续内存块的数量。
在一些实施例中,所述从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据,包括:
当所述虚拟内存中的已占用的连续内存块大于1时,获取所述未占用的连续内存块的内存容量;
如果所述未占用的连续内存块的内存容量大于所述第一数据的内存容量,选取所述未占用的连续内存块中内存容量与所述第一数据的内存容量差值最小的未占用的连续内存块;
将所述第一数据存储至所述选取的未占用的连续内存块中,并将所述第一数据占用的连续内存块与其左侧相邻的连续内存块合并。图4示出了一种第一数据的内存容量小于未占用的连续内存块的情况。当有多人同时存储数据时,数据区的内存块不以连续方式存入,数据与数据之间存在未占用的连续内存块,此时,若占用的连续内存块中不存在与第一数据的内存容量相等的连续内存块,则筛选出与第一数据的内存容量差值最小的连续内存块,以将第一数据存入该连续内存块中,将该块与最左侧的块进行合并。此时,数据区中连续内存块的数量未发生改变。
在一些实施例中,所述方法还包括:
步骤S201,根据所述虚拟内存使用数据获取所述第一数据的起始偏移;
步骤S202,判断所述第一数据的数据偏移和所述第一数据的内存容量之和是否大于所述虚拟内存分配的内存容量,
步骤S203,如果所述第一数据的数据偏移和所述第一数据的内存容量之和大于所述虚拟内存分配的内存容量,进行报错处理;
步骤S204,如果所述第一数据的数据偏移和所述第一数据的内存容量之和小于或等于所述虚拟内存分配的内存容量,获取所述第一数据的起始偏移以释放所述第一数据的内存容量。
在一些实施例中,所述获取所述第一数据的起始偏移以释放所述第一数据的内存容量,包括:
遍历所述虚拟内存中的已占用的连续内存块,以获取所述第一数据的起始偏移;
图5示出了一种第一数据的起始偏移位于内存块起始位置的情况。
如果所述第一数据的起始偏移处于任一所述连续内存块的起始位置,且所述第一数据的内存容量与所述连续内存块的内存容量相等,则删除所述连续内存块以释放所述第一数据;
图6示出了一种第一数据的起始偏移位于内存块起始位置的另一种情况。
如果所述第一数据的起始偏移处于任一所述连续内存块的起始位置,且所述第一数据的内存容量小于所述连续内存块的内存容量,则修改所述连续内存块的末位内存块的内存容量的大小以释放所述第一数据;
图7示出了一种第一数据的起始偏移位于内存块中间位置的情况。
如果所述第一数据的起始偏移处于任一所述连续内存块的中间位置,且所述第一数据的内存容量小于所述连续内存块的内存容量,则分割所述连续内存块并插入一个新的连续内存块以释放所述第一数据;
图8示出了一种第一数据的起始偏移位于内存块右侧位置的情况。
如果所述第一数据的起始偏移处于任一所述连续内存块的右侧位置,且所述第一数据的首位内存块的内存容量小于单个内存块的内存容量,则修改所述第一数据的首位内存块占据的单个内存块的内存容量的大小以释放所述第一数据。
以上示出的技术方案,示出了一种共享内存管理方法和缓存服务组件,本申请示出的缓存服务组件实质是一种异步存储机制,将需要保存的数据存储至共享内存中,然后文件系统取出共享内存的数据进行保存,以将数据保存功能从图形化智能视觉软件中独立出来,能够在外部接口频繁操作的同时不影响图形化智能视觉软件。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
为了方便解释,已经结合具体的实施方式进行了上述说明。但是,上述示例性的讨论不是意图穷尽或者将实施方式限定到上述公开的具体形式。根据上述的教导,可以得到多种修改和变形。上述实施方式的选择和描述是为了更好的解释原理以及实际的应用,从而使得本领域技术人员更好的使用所述实施方式以及适于具体使用考虑的各种不同的变形的实施方式。
Claims (9)
1.一种共享内存管理方法,其特征在于,所述方法包括:
获取虚拟内存使用数据;所述虚拟内存中包括多个内存块;
根据所述虚拟内存使用数据判断所述虚拟内存中是否仅包含一个连续内存块;
如果所述虚拟内存中的已占用的连续内存块个数等于1,执行缓存分配算法以存储第一数据,所述第一数据可以为同一时间内存储的单个数据,也可以为同一时间内存储的多个数据。
2.根据权利要求1所述的共享内存管理方法,其特征在于,所述方法还包括:
根据所述虚拟内存使用数据获取所述第一数据的起始偏移;
判断所述第一数据的数据偏移和所述第一数据的内存容量之和是否大于所述虚拟内存分配的内存容量,
如果所述第一数据的数据偏移和所述第一数据的内存容量之和大于所述虚拟内存分配的内存容量,进行报错处理;
如果所述第一数据的数据偏移和所述第一数据的内存容量之和小于或等于所述虚拟内存分配的内存容量,获取所述第一数据的起始偏移以释放所述第一数据的内存容量。
3.根据权利要求1所述的共享内存管理方法,其特征在于,所述虚拟内存使用数据包括:内存块总容量、已占用的所述内存块的起始偏移和已占用的所述内存块的内存容量;
所述执行缓存分配算法以存储第一数据,包括:
根据所述内存块总容量、已占用的所述内存块的起始偏移和已占用的所述内存块的内存容量获取未占用的内存块的内存容量;
从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据;
如果所述未占用的内存块中包含能够存储所述第一数据的未占用的连续内存块,将所述第一数据存储至所述未占用的连续内存块中;
如果所述未占用的内存块中不包含能够存储所述第一数据的连续内存块,将所述第一数据存储至所述已占用的连续内存块中的末位连续内存块后面的内存块;
如果存储后溢出,进行报错处理;
如果存储后未溢出,将所述第一数据返回起始偏移。
4.根据权利要求3所述的共享内存管理方法,其特征在于,所述从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据,包括:
当所述虚拟内存中的已占用的连续内存块等于1时,获取所述未占用的连续内存块的内存容量;
如果所述未占用的连续内存块的内存容量大于或等于所述第一数据的内存容量,将所述第一数据存储至所述未占用的连续内存块中。
5.根据权利要求3所述的共享内存管理方法,其特征在于,所述从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据,包括:
当所述虚拟内存中的已占用的连续内存块大于1时,获取所述未占用的连续内存块的内存容量;
如果所述未占用的连续内存块的内存容量等于所述第一数据的内存容量,将所述第一数据存储至与所述第一数据的内存容量相等的未占用的连续内存块中,并将所述第一数据占用的连续内存块与相邻两侧的连续内存块合并,更新所述虚拟内存中的连续内存块数量。
6.根据权利要求3所述的共享内存管理方法,其特征在于,所述从所述未占用的内存块中筛选未占用的连续内存块以存储所述第一数据,包括:
当所述虚拟内存中的已占用的连续内存块大于1时,获取所述未占用的连续内存块的内存容量;
如果所述未占用的连续内存块的内存容量大于所述第一数据的内存容量,选取所述未占用的连续内存块中内存容量与所述第一数据的内存容量差值最小的未占用的连续内存块;
将所述第一数据存储至所述选取的未占用的连续内存块中,并将所述第一数据占用的连续内存块与其左侧相邻的连续内存块合并。
7.根据权利要求2所述的共享内存管理方法,其特征在于,所述获取所述第一数据的起始偏移以释放所述第一数据的内存容量,包括:
遍历所述虚拟内存中的已占用的连续内存块,以获取所述第一数据的起始偏移;
如果所述第一数据的起始偏移处于任一所述连续内存块的起始位置,且所述第一数据的内存容量与所述连续内存块的内存容量相等,则删除所述连续内存块以释放所述第一数据;
如果所述第一数据的起始偏移处于任一所述连续内存块的起始位置,且所述第一数据的内存容量小于所述连续内存块的内存容量,则修改所述连续内存块的末位内存块的内存容量的大小以释放所述第一数据;
如果所述第一数据的起始偏移处于任一所述连续内存块的中间位置,且所述第一数据的内存容量小于所述连续内存块的内存容量,则分割所述连续内存块并插入一个新的连续内存块以释放所述第一数据;
如果所述第一数据的起始偏移处于任一所述连续内存块的右侧位置,且所述第一数据的首位内存块的内存容量小于单个内存块的内存容量,则修改所述第一数据的首位内存块占据的单个内存块的内存容量的大小以释放所述第一数据。
8.一种缓存服务组件,其特征在于,用于执行如权利要求1~7任一所述的共享内存管理方法,所述缓存服务组件包括:缓存分配器和数据项队列管理器;
其中,所述缓存分配器用于虚拟内存的分配和释放;所述数据项队列管理器用于记录所述缓存分配器中的数据在所述虚拟内存中的位置和数据项总大小;
所述缓存分配器包括:第一头部区和数据区,所述第一头部区与所述数据区连接,所述第一头部区用于记录已分配的所述虚拟内存的偏移和大小,所述数据区包括多个等分的内存块,所述内存块用于记录已放入所述虚拟内存中的的数据;
所述数据项队列管理器包括:第二头部区和元素区,所述第二头部区与所述元素区连接,所述元素区包括循环队列,所述循环队列用于记录数据的起始偏移和数据项总大小,所述第二头部区用于记录所述循环队列的特征信息。
9.根据权利要求8所述的缓存服务组件,其特征在于,每个所述内存块的容量优选为64KB。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111595898.8A CN114327942A (zh) | 2021-12-24 | 2021-12-24 | 一种共享内存管理方法和缓存服务组件 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111595898.8A CN114327942A (zh) | 2021-12-24 | 2021-12-24 | 一种共享内存管理方法和缓存服务组件 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114327942A true CN114327942A (zh) | 2022-04-12 |
Family
ID=81013100
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111595898.8A Pending CN114327942A (zh) | 2021-12-24 | 2021-12-24 | 一种共享内存管理方法和缓存服务组件 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114327942A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115484403A (zh) * | 2022-08-08 | 2022-12-16 | 荣耀终端有限公司 | 录像方法和相关装置 |
-
2021
- 2021-12-24 CN CN202111595898.8A patent/CN114327942A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115484403A (zh) * | 2022-08-08 | 2022-12-16 | 荣耀终端有限公司 | 录像方法和相关装置 |
CN115484403B (zh) * | 2022-08-08 | 2023-10-24 | 荣耀终端有限公司 | 录像方法和相关装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110531940B (zh) | 视频文件处理方法及装置 | |
JP4733461B2 (ja) | 計算機システム、管理計算機及び論理記憶領域の管理方法 | |
US7584229B2 (en) | Method and system for priority-based allocation in a storage pool | |
US8396840B1 (en) | System and method for targeted consistency improvement in a distributed storage system | |
US20060212495A1 (en) | Method and system for storing data into a database | |
CN110018989B (zh) | 一种快照比对的方法和装置 | |
CN110147203B (zh) | 一种文件管理方法、装置、电子设备及存储介质 | |
CN113568582B (zh) | 数据管理方法、装置和存储设备 | |
CN108399050B (zh) | 一种数据处理方法及装置 | |
CN115576505B (zh) | 一种数据存储方法、装置、设备及可读存储介质 | |
CN111708894B (zh) | 一种知识图谱创建方法 | |
CN108268344A (zh) | 一种数据处理方法和装置 | |
CN109558333A (zh) | 具有可变额外存储空间(op)的固态存储设备命名空间 | |
CN111143116A (zh) | 一种磁盘坏块处理的方法及装置 | |
CN111399761B (zh) | 存储资源分配方法、装置及设备、存储介质 | |
CN114327942A (zh) | 一种共享内存管理方法和缓存服务组件 | |
CN113495889B (zh) | 一种分布式对象存储方法、装置、电子设备及存储介质 | |
CN113377292B (zh) | 一种单机存储引擎 | |
CN109947730A (zh) | 元数据恢复方法、装置、分布式文件系统及可读存储介质 | |
CN104133970A (zh) | 一种数据空间管理方法及装置 | |
CN103970671B (zh) | 用于在存储器中分配管理数据集的系统和方法 | |
CN109508140B (zh) | 存储资源管理方法、装置、电子设备及电子设备、系统 | |
CN111352579A (zh) | 数据存储方法及装置 | |
CN114756523A (zh) | 一种分布式存储方法、装置以及介质 | |
KR102214697B1 (ko) | 데이터베이스 관리 시스템에서 데이터 저장을 위한 공간 관리를 제공하는 컴퓨터 프로그램 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |