一种存储空间管理方法、系统、电子设备及存储介质

文档序号:1627685 发布日期:2020-01-14 浏览:4次 >En<

阅读说明:本技术 一种存储空间管理方法、系统、电子设备及存储介质 (Storage space management method, system, electronic equipment and storage medium ) 是由 刘志勇 于 2019-09-05 设计创作,主要内容包括:本申请公开了一种存储空间管理方法,所述方法包括查询存储状态由非可用状态转换为可用状态的目标存储子区间;判断是否存在相邻存储子区间;其中,所述相邻存储子区间为与所述目标存储子区间物理地址相邻且存储状态为可用状态的存储子区间;若是,则将所述目标存储子区间与所述相邻存储子区间合并为可用存储子区间,以便在所述可用存储子区间中写入数据。本申请能够提供连续的存储空间,提高写入数据的连续性。本申请还公开了一种存储空间管理系统、一种存储介质及一种电子设备,具有以上有益效果。(The application discloses a storage space management method, which comprises the steps of inquiring a target storage subinterval of which the storage state is converted from a non-available state to an available state; judging whether adjacent storage subintervals exist or not; the adjacent storage subinterval is a storage subinterval which is adjacent to the physical address of the target storage subinterval and has a storage state of an available state; and if so, merging the target storage subinterval and the adjacent storage subinterval into an available storage subinterval so as to write data in the available storage subinterval. The method and the device can provide continuous storage space and improve the continuity of written data. The application also discloses a storage space management system, a storage medium and an electronic device, which have the beneficial effects.)

一种存储空间管理方法、系统、电子设备及存储介质

技术领域

本申请涉及数据存储技术领域,特别涉及一种存储空间管理方法、系统、一种电子设备及一种存储介质。

背景技术

全闪存储是存储发展的一个重要方向,随着SSD价格的逐渐下降,未来全闪存储产品必将进一步抢占传统存储的市场份额,成为存储领域的主打产品。与传统存储相比,全闪存储除在性能上具有绝对优势外,数据组织方式的主要区别在于,传统存储的数据存放方式为覆盖写方式,即向同一个逻辑地址写入数据时,每次都是写在同一个地方,并覆盖旧数据,而全闪存储则采用追加写方式,即向同一个逻辑地址写入数据时,每次都写在一个新地方,而旧数据不会被覆盖,而是通过垃圾回收进行处理。

对于全闪存储系统来说,利用连续的数据存储空间进行数据读写具有较好的读写效率,但是相关技术中按照存储空间内的物理地址的顺序进行数据存储,因此上述相关技术的提高写入数据的连续性较低。

因此,如何提供连续的存储空间,提高写入数据的连续性是本领域技术人员目前需要解决的技术问题。

发明内容

本申请的目的是提供一种存储空间管理方法、系统、一种存储介质及一种电子设备,能够提供连续的存储空间,提高写入数据的连续性。

为解决上述技术问题,本申请提供一种存储空间管理方法,该存储空间管理方法包括:

查询存储状态由非可用状态转换为可用状态的目标存储子区间;

判断是否存在相邻存储子区间;其中,所述相邻存储子区间为与所述目标存储子区间物理地址相邻且存储状态为可用状态的存储子区间;

若是,则将所述目标存储子区间与所述相邻存储子区间合并为可用存储子区间,以便在所述可用存储子区间中写入数据。

可选的,在将所述目标存储子区间与所述相邻存储子区间合并为可用存储子区间之后,还包括:

根据所述可用存储子区间的空间大小确定所述可用存储子区间对应的目标链表,并在所述目标链表中记录所述可用存储子区间的地址信息,以便根据所述目标链表中的地址信息将待写入数据存储至所述可用存储子区间。

可选的,还包括:

当接收到存储空间划分指令时,将存储总空间平均划分为N个存储区间;

按照每一所述存储空间对应的存储粒度将所述存储区间划分为多个存储子区间。

可选的,还包括:

构建每一所述存储区间对应的链表;其中,所述链表中存储有所述存储区间中处于可用状态的存储子区间的地址信息;

当检测到存储状态改变的存储子区间时,对所述存储状态改变的存储子区间对应的链表执行更新操作。

可选的,在按照每一所述存储空间对应的存储粒度将所述存储区间划分为多个存储子区间之前,还包括:

根据物理地址从小到大的顺序依次为每一所述存储区间设置对应的区间序号i;其中,i=0,1,2,3,……N-1;

根据所述区间序号i确定每一存储区间的存储粒度B;其中,B=2i×grain,grain为最小粒度。

可选的,判断是否存在相邻存储子区间包括:

判断所述目标存储子区间所在的存储区间中是否存在所述相邻存储子区间。

可选的,还包括:

当接收到数据存储任务时,向存储空间最大的存储子区间写入数据,以便完成所述数据存储任务。

本申请还提供了一种存储空间管理系统,该存储空间管理系统包括:

查询模块,用于查询存储状态由非可用状态转换为可用状态的目标存储子区间;

判断模块,用于判断是否存在相邻存储子区间;其中,所述相邻存储子区间为与所述目标存储子区间物理地址相邻且存储状态为可用状态的存储子区间;

区间合并模块,用于当存在所述相邻存储子区间时,将所述目标存储子区间与所述相邻存储子区间合并为可用存储子区间,以便在所述可用存储子区间中写入数据。

本申请还提供了一种存储介质,其上存储有计算机程序,所述计算机程序执行时实现上述存储空间管理方法执行的步骤。

本申请还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时实现上述存储空间管理方法执行的步骤。

本申请提供了一种存储空间管理方法,包括查询存储状态由非可用状态转换为可用状态的目标存储子区间;判断是否存在相邻存储子区间;其中,所述相邻存储子区间为与所述目标存储子区间物理地址相邻且存储状态为可用状态的存储子区间;若是,则将所述目标存储子区间与所述相邻存储子区间合并为可用存储子区间。

本申请首先在查询到由非可用状态转换为可用状态的目标存储子区间之后,判断当前可用的存储子区间中是否存在与目标存储子区间物理地址相邻的相邻存储子区间,若存在本申请将目标存储子区间以及与目标存储子区间相邻的存储子区间进行合并,以便得到连续的存储空间,当利用合并后的存储子区间写入数据后,能够提高写入数据的连续性。本申请同时还提供了一种存储空间管理系统、一种存储介质和一种电子设备,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例所提供的一种存储空间管理方法的流程图;

图2为本申请实施例所提供的一种存储区间划分方法的流程图;

图3为本申请实施例所提供的存储空间分块模型图;

图4为本申请本实施例所提供的一种分粒度划块模型图;

图5为本申请实施例所提供的一种存储空间管理系统的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

下面请参见图1,图1为本申请实施例所提供的一种存储空间管理方法的流程图。

具体步骤可以包括:

S101:查询存储状态由非可用状态转换为可用状态的目标存储子区间;

其中,本实施例可以应用于全闪存储系统中,本实施例所提到的全闪系统在进行空间管理时,可以将存储空间划分了若干存储子区间,然后使用这些存储子区间进行数据的存储。作为一种可行的实施方式,本实施例可以使用位图来记录所有存储子区间是否可以使用,即通过位图记录每一存储子区间的存储状态。存储状态可以包括可用状态和非可用状态,当存储子区间处于可用状态时可以写入新数据,当存储子区间处于非可用状态时说明该存储子区间已写入数据无法写入新数据。

本步骤的目的在于确定存储状态由非可用状态转换为可用状态的存储子区间,在全闪存储系统中,由于采用追加写的方式写入数据,因此向同一个逻辑地址写入数据时,每次都写在一个新的存储子区间,旧数据不会被覆盖,而是通过垃圾回收进行处理。当存储系统执行垃圾回收操作时,可以存在非可用状态转换为可用状态的目标存储子区间。

S102:判断是否存在相邻存储子区间;若是,则进入S103;若否,则进入S104;

其中,本步骤的目的在于判断所有处于可用状态的存储子区间中是否存在与目标存储子区间相邻的存储子区间,上述提到的相邻存储子区间为与所述目标存储子区间物理地址相邻且存储状态为可用状态的存储子区间。

作为一种可行的实施方式,本实施例可以预先设置有记录每一存储子区间的存储状态的位图,可以根据该位图确定处于可用状态的存储子区间,进而根据目标存储子区间的首地址和末地址确定相邻存储子区间。也就是说,本实施例中确定的相邻存储子区间的首地址或末地址与目标存储子区间的首地址或末地址相邻。

S103:将所述目标存储子区间与所述相邻存储子区间合并为可用存储子区间,以便在所述可用存储子区间中写入数据。

其中,本步骤建立在S102确定存在相邻存储子区间的基础上,通过将相邻存储子区间与目标存储子区间进行合并得到可用存储子区间,上述过程能够得到存储空间更大的、连续的可用存储子区间。在需要向可用存储子区间中写入数据时,可以查找出进行可能连续的可用存储子区间,以保证写入的数据在随后写盘时尽可能拼成连续的数据。

需要说明的是,本实施例可以按照预设规则进行数据写入操作,该预设规则为:当接收到数据写任务时,选择可用存储子区间进行数据写操作。当存在多个可用存储子区间时,可以选择存储空间最大的可用存储子区间进行数据写操作。作为另一种可行的实施方式,当存在多个可用存储子区间时,可以确定数据写任务的需求空间,从所有空间大小大于需求空间的可用存储子区间中选择存储空间最小的存储子区间进行数据写操作。

S104:将所述目标存储子区间设置为可用存储子区间,以便在所述可用存储子区间中写入数据。

其中,本实施例建立在S102确定不存在相邻存储子区间的基础上,此时可以直接将所述目标存储子区间设置为可用存储子区间,以便在所述可用存储子区间中写入数据。

本实施例首先在查询到由非可用状态转换为可用状态的目标存储子区间之后,判断当前可用的存储子区间中是否存在与目标存储子区间物理地址相邻的相邻存储子区间,若存在本实施例将目标存储子区间以及与目标存储子区间相邻的存储子区间进行合并,以便得到连续的存储空间,当利用合并后的存储子区间写入数据后,能够提高写入数据的连续性。

作为对于图1对应实施例的进一步补充,在S103合并得到可用存储子区间之后,还可以包括以下步骤:

步骤1:根据所述可用存储子区间的空间大小确定所述可用存储子区间对应的目标链表;

步骤2:在所述目标链表中记录所述可用存储子区间的地址信息,以便根据所述目标链表中的地址信息将待写入数据存储至所述可用存储子区间。

本实施例可以设置有多张链表,用于记录可用存储子区间。作为一种可行的实施方式,每一张链表可以对应不同空间大小的可用存储子区间。例如,可以将0~256K的可用存储子区间的地址信息记录在链表A中,可以将257~512K的可用存储子区间的地址信息记录在链表B中,可以将513~1024K的可用存储子区间的地址信息记录在链表C中,以此类推。通过上述记录方式能够根据链表选择特定存储大小区间的可用存储子区间,可以确定每一存储空间大小范围内的可用存储子区间的数量。

下面请参见图2,图2为本申请实施例所提供的一种存储区间划分方法的流程图,本实施例为图1对应实施例中S101之前的存储子区间划分方法,可以将本实施例与图1对应的实施例相结合得到更为优选的实施方式,本实施例可以包括以下步骤:

S201:当接收到存储空间划分指令时,将存储总空间平均划分为N个存储区间;

S202:根据物理地址从小到大的顺序依次为每一所述存储区间设置对应的区间序号i;

其中,i=0,1,2,3,……N-1;

S203:根据所述区间序号i确定每一存储区间的存储粒度B;

其中,B=2i×grain,grain为最小粒度。

S204:按照每一所述存储空间对应的存储粒度将所述存储区间划分为多个存储子区间。

本实施例提供了按照不同粒度划分存储子区间方法,通过上述划分方法能够提供多种粒度的存储空间,满足不同类型数据写操作的需求。

可以理解的是,当将本实施例与图1对应的实施例相结合时,S102的具体操作可以为:判断所述目标存储子区间所在的存储区间中是否存在所述相邻存储子区间。图2对应的实施例中每一存储区间对应的存储粒度不同,因此可以从目标存储子区间所在的存储区间中确定相邻存储子区间。

作为一种可行的实施方式,在图2对应的实施例的基础上,还可以执行以下操作:构建每一所述存储区间对应的链表;其中,所述链表中存储有所述存储区间中处于可用状态的存储子区间的地址信息;当检测到存储状态改变的存储子区间时,对所述存储状态改变的存储子区间对应的链表执行更新操作。

下面通过在实际应用中的实施例说明上述实施例描述的流程。本实施例提供了一种稳定高效的查找连续空间的方法,工作过程为:先将总的存储空间按照一个较大粒度的空间单位划分为block块(即存储区间),每个块设置编号,而后将block再细分为grain,其中每个block中包含固定数量的grain。而后在block内按不同粒度划分块,并为每种粒度的块设置一个链表,分别保存对应粒度下空闲的块,最后通过以此查询各个链表便可快速找到尽可能连续的空闲空间,具体实施方式如下:

本实施例中空间的基本粒度为grain,首先将空间按一个较大粒度划分为block块,每个block中包含固定数量的grain,如图3所示,图3为本申请实施例所提供的存储空间分块模型图。本实施例将每个block按不同的粒度进行分块,如图4所示,图4为本申请本实施例所提供的一种分粒度划块模型图。图4中第一个粒度以grain为粒度,即每个块包含一个grain,并对其编号,分别为0、1、2、3、4……,以此类推;第二个粒度以2个grain为粒度,即每个块中包含两个grain,对其编号,分别为0、1、2、3、4……,此粒度中的0对应到上一粒度的0和1;第三个粒度以4个grain为粒度,即每个块中包含4个grain,对其编号,分别为0、1、2、3、4……,此粒度中的0对应到上一粒度的0和1;第四个粒度以8个grain为粒度,即每个块中包含8个grain,分别为0、1、2、3、4……,此粒度中的0对应到上一粒度的0和1。按此规则进行划分,直到最后一层粒度中,每个块中有2n个grain。

在每个粒度上,凡是相邻的块均为配对块,例如每个粒度中,第0个块和第1个块为配对块,第2个块和第3个块为配对块。在每个粒度上设置一个链表,用于存放在运行过程中,在该粒度上可用的块号。初始阶段由于block中的所有grain均可用,因此在最大粒度上的块均存放于其对应的链表中,需要说明的是,每个块在挂到链表上时需要按块号顺序存放。在进行空间分配时,如果发现最大粒度块对应的链表上有可用块,说明该block有大量连续grain,因此可用从该链表中取出可用的块。后续已使用完的grain,再完成回收后,会将空闲grain挂到链中,由于最小粒度的块是一个grain对应一个块,因此回收后的grian所挂到的链表为最小粒度的块对应的链表。

当存在grain挂到链表时,可以先查看在该链表是否有该块的配对块,如果有则将其余配对块合并成更大的块(也就是更大一级粒度的块),并将合并后的块转移到其更大一级粒度的块对应的链表上;如果在合并后的块在链表上仍存在配对块,则继续合并后往更大一级粒度的块对应的链表上转移;直到没有配对块为止。经过一段时间的运行后,每个不同粒度的块对应的链表上都可能存在不同数量的可用空闲块,而在查找空闲可用块优先从最大粒度的块所对应的链表中找。如果一个block中所有的链表中均没有空闲可用块,则说明该block中不存在可用的空间,则再从其他的block中找连续可用空间。

本实施例提出了一种稳定高效的查找连续空间的方法,通过将空间先分为大粒度的block块,其中包含固定数量的grain,而后将分别按不同粒度划分块,并为每种粒度的块均设置一个链表,用于存在该粒度大小的空闲可用块。根据释放空间时,按照配对块合并向上层模块转移的方式,从而快速获取尽可能连续大块的可用空间。

请参见图5,图5为本申请实施例所提供的一种存储空间管理系统的结构示意图;

该系统可以包括:

查询模块100,用于查询存储状态由非可用状态转换为可用状态的目标存储子区间;

判断模块200,用于判断是否存在相邻存储子区间;其中,所述相邻存储子区间为与所述目标存储子区间物理地址相邻且存储状态为可用状态的存储子区间;

区间合并模块300,用于当存在所述相邻存储子区间时,将所述目标存储子区间与所述相邻存储子区间合并为可用存储子区间,以便在所述可用存储子区间中写入数据;

区间设置模块400,用于将所述目标存储子区间设置为可用存储子区间,以便在所述可用存储子区间中写入数据。

本实施例首先在查询到由非可用状态转换为可用状态的目标存储子区间之后,判断当前可用的存储子区间中是否存在与目标存储子区间物理地址相邻的相邻存储子区间,若存在本实施例将目标存储子区间以及与目标存储子区间相邻的存储子区间进行合并,以便得到连续的存储空间,当利用合并后的存储子区间写入数据后,能够提高数据的读写效率。

进一步的,还包括:

链表记录模块,用于根据所述可用存储子区间的空间大小确定所述可用存储子区间对应的目标链表,并在所述目标链表中记录所述可用存储子区间的地址信息,以便根据所述目标链表中的地址信息将待写入数据存储至所述可用存储子区间。

进一步的,还包括:

第一划分模块,用于当接收到存储空间划分指令时,将存储总空间平均划分为N个存储区间;

第二划分模块,用于按照每一所述存储空间对应的存储粒度将所述存储区间划分为多个存储子区间。

进一步的,还包括:

链表构建模块,用于构建每一所述存储区间对应的链表;其中,所述链表中存储有所述存储区间中处于可用状态的存储子区间的地址信息;

链表更新模块,用于当检测到存储状态改变的存储子区间时,对所述存储状态改变的存储子区间对应的链表执行更新操作。

进一步的,还包括:

区间序号设置模块,用于根据物理地址从小到大的顺序依次为每一所述存储区间设置对应的区间序号i;其中,i=0,1,2,3,……N-1;

粒度确定模块,用于根据所述区间序号i确定每一存储区间的存储粒度B;其中,B=2i×grain,grain为最小粒度。

进一步的,判断模块200具体为用于判断所述目标存储子区间所在的存储区间中是否存在所述相邻存储子区间的模块。

进一步的,还包括:

数据写入模块,用于当接收到数据存储任务时,向存储空间最大的存储子区间写入数据,以便完成所述数据存储任务。

由于系统部分的实施例与方法部分的实施例相互对应,因此系统部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

本申请还提供了一种存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

本申请还提供了一种电子设备,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然所述电子设备还可以包括各种网络接口,电源等组件。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

13页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种数据处理方法、系统、电子设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类