一种存储空间管理方法及装置与流程

文档序号:11176756阅读:306来源:国知局
一种存储空间管理方法及装置与流程

本发明涉及存储技术领域,特别是涉及一种存储系统的存储空间管理方法及装置。



背景技术:

在现有的存储系统中,对于存储空间的管理基本是把存储空间划分为等大小的存储块,然后把空闲的存储块通过链表的形式进行存储。在分配空闲区间时,从链表的尾部获取空闲的存储块;当空间回收时把释放的存储块再放到链表的尾部。虽然这种存储空间管理方法的优点是实现简单、空间分配和回收效率都较高,但是该种存储空间管理方法也存在着一定的缺点,在系统运行一段时间后,对于需要分配多个存储块的情况,分配的多个存储块的地址是离散的,在进行数据存储访问时进行的随机i/o访问,会导致数据的访问效率底下,客户体验差。



技术实现要素:

针对于上述问题,本发明提供一种存储空间管理方法及装置,实现了提升系统的访问效率和改善用户体验的目的。

为了实现上述目的,根据本发明的第一方面,提供了一种存储空间管理方法,该方法包括:

将存储系统的存储空间划分为多个存储块,并对所述存储块按照存储空间的地址大小进行线性编号,获得所述存储块的编号;

设置所述存储块的比特字段,并基于所述比特字段划分得到空闲存储块,其中,所述比特位字段为0时表示所述存储块空闲,当所述比特位字段为1时标识所述存储块被使用;

创建空间地图树结构,其中,所述空间地图树包括根节点和叶子节点;

将所述存储块的使用相关信息存储到所述叶子节点中;

创建所述存储块的索引,并将所述索引存放至所述根节点;

在将存储任务分配到空闲存储块时,预设查找空闲存储块的起始位置,根据所述起始位置获得所述根节点中对应的索引,根据所述索引查找到空闲存储块的编号,基于所述编号在所述叶子节点中进行查找获得空闲存储块,将所述存储任务存储至所述空闲存储块中。

优选的,所述将所述存储块的使用信息存储到所述叶子节点中,包括:

分别设置所述叶子节点块头字段和块号字段;

将所述存储块中拥有空闲存储块的数量信息存储至所述叶子节点的块头字段;

将所述叶子节点对应的被使用的存储块的编号信息存储至所述叶子节点的块号字段。

优选的,所述创建所述存储块的索引,并将所述索引存放至所述根节点,包括:

创建所述存储块的索引;

分别设置索引块号字段和空闲指向字段;

将所述索引指向的叶子节点对应的存储块的编号存储至所述索引块号字段;

将所述索引指向的叶子节点对应的存储块中空闲存储块的数量信息存储至所述空闲指向字段。

优选的,所述在将存储任务分配到空闲存储块时,预设查找空闲存储块的起始位置,根据所述起始位置获得所述根节点中对应的索引,根据所述索引查找到有空闲存储块的编号,基于所述编号在所述叶子节点中进行查找获得空闲存储块,将所述存储任务存储至所述空闲存储块中,包括:

在将存储任务分配到空闲存储块时,获取到上一次存储任务分配到的空闲存储块的编号,将所述编号数值加一获得查找空闲存储块的起始存储块的编号;

根据起始存储块的编号,查找获得对应的所述根节点中的索引的空闲标识字段;

解析所述空闲标识字段,获得空闲存储块的编号;

基于所述编号,查找获得所述叶子节点中的空闲存储块位置信息;

查找所述空闲存储块位置信息对应的存储块,得到空闲存储块;

将所述存储任务存储至所述空闲存储块中。

优选的,当对存储块进行存储空间释放时,该方法还包括:

将所述存储空间待释放的存储块的比特字段设置为0。

根据本发明的第二方面,提供了一种存储空间管理装置,该装置包括:

划分模块,用于将存储系统的存储空间划分为多个存储块,并对所述存储块按照存储空间的地址大小进行线性编号,获得所述存储块的编号;

设置模块,用于设置所述存储块的比特字段,并基于所述比特字段划分得到空闲存储块,其中,所述比特位字段为0时表示所述存储块空闲,当所述比特位字段为1时标识所述存储块被使用;

创建模块,用于创建空间地图树结构,其中,所述空间地图树包括根节点和叶子节点;

第一存储模块,用于将所述存储块的使用相关信息存储到所述叶子节点中;

第二存储模块,用于创建所述存储块的索引,并将所述索引存放至所述根节点;

分配模块,用于在将存储任务分配到空闲存储块时,预设查找空闲存储块的起始位置,根据所述起始位置获得所述根节点中对应的索引,根据所述索引查找到空闲存储块的编号,基于所述编号在所述叶子节点中进行查找获得空闲存储块,将所述存储任务存储至所述空闲存储块中。

优选的,所述第一存储模块包括:

第一设置单元,用于分别设置所述叶子节点块头字段和块号字段;

第一存储单元,用于将所述存储块中拥有空闲存储块的数量信息存储至所述叶子节点的块头字段;

第二存储单元,用于将所述叶子节点对应的被使用的存储块的编号信息存储至所述叶子节点的块号字段。

优选的,所述第二存储模块包括:

创建单元,用于创建所述存储块的索引;

第二设置单元,用于分别设置索引块号字段和空闲指向字段;

第三存储单元,用于将所述索引指向的叶子节点对应的存储块的编号存储至所述索引块号字段;

第四存储单元,用于将所述索引指向的叶子节点对应的存储块中空闲存储块的数量信息存储至所述空闲指向字段。

优选的,当将存储任务分配到存储块时,所述分配模块包括:

第一获取单元,用于在将存储任务分配到空闲存储块时,获取到上一次存储任务分配到的空闲存储块的编号,将所述编号数值加一获得查找空闲存储块的起始存储块的编号;

第二获取单元,用于根据起始存储块查找获得所述根节点中的索引的空闲标识字段;

第三获取单元,用于解析所述空闲标识字段,获得空闲存储块的编号;

第一查找单元,用于基于所述编号,查找获得所述叶子节点中的空闲存储块位置信息;

第二查找单元,用于查找所述空闲存储块位置信息对应的存储块,得到空闲存储块;

任务存储单元,用于将所述存储任务存储至所述空闲存储块中。

优选的,当对存储块进行存储空间释放时,该装置还包括:

释放设置模块,用于将所述存储空间待释放的存储块的比特字段设置为0。

相较于现有技术,本发明将存储空间划分为多个存储块,并对所述存储块按照存储空间的地址大小进行线性编号;创建空间地图树结构,将所述存储块的使用相关信息存储到所述叶子节点中,创建所述存储块的索引,并将所述索引存放至所述根节点;当将存储任务分配到存储块时,预设查找空闲存储块的起始位置,根据所述起始位置获得所述根节点中对应的索引,根据所述索引查找到有空闲索引块的叶子节点,在所述叶子节点中进行查找获得空闲存储块,将所述存储任务存储至所述空闲存储块中。在本发明中由于将存储块按照存储空间的地址大小进行线性编号,保证存储块的地址是连续的或者是按照存储空间地址进行递增的,并创建了空间地图树的结构,在分配存储块时先设定起始查找位置然后根据根节点对应的索引查找到叶子节点中的空闲存储块,这样保证了查找从上一次获得的空闲块之后进行,提升了数据访问效率,进而实现了改善用户体验的目的。

附图说明

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

图1为本发明实施例一提供的一种存储空间管理方法的流程示意图;

图2为本发明实施中空间地图树的示意图;

图3为本发明实施例二中对应图1步骤s14将信息存储到叶子节点的流程示意图;

图4为本发明实施例二中对应图1步骤s15将信息存储到根节点的流程示意图;

图5为本发明实施例二中对应图1步骤s16查询空闲存储块的流程示意图;

图6为本发明实施例三提供的一种存储空间管理方法的结构示意图。

具体实施方式

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

本发明的说明书和权利要求书及上述附图中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述特定的顺序。此外术语“包括”和“具有”以及他们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有设定于已列出的步骤或单元,而是可包括没有列出的步骤或单元。

实施例一

参见图1为本发明实施例一提供的一种存储空间管理方法,该方法包括以下步骤:

s11、将存储系统的存储空间划分为多个存储块,并对所述存储块按照存储空间的地址大小进行线性编号,获得所述存储块的编号;

具体的,将所述存储系统的存储空间划分为多个等大小的存储块,所述存储块是存储设备进行存储空间分配和释放的基本单位,这些存储块按照存储空间的地址大小进行线性编号,在本发明实施例中将存储空间划分为多个4k大小的存储块,这个大小值是可以改变的,只是本发明优选4k,这个值的大小决定了每次申请存储空间的粒度。

s12、设置所述存储块的比特字段,并基于所述比特字段划分得到空闲存储块,其中,所述比特位字段为0时表示所述存储块空闲,当所述比特位字段为1时标识所述存储块被使用;

s13、创建空间地图树结构,其中,所述空间地图树包括根节点和叶子节点;

具体的,在本发明中把存储块的空闲与否的信息组织成了空间地图树(spacemaptree)的形式,类似于b+树的形式,具体的形式参见图2,图2为本发明实施例中提供的空间地图树的示意图,这棵树只包含根节点和叶子节点,并且存储块编号为0的存储块固定存放超级块信息,所述超级块保存了spacemaptree的根节点信息。

s14、将所述存储块的使用相关信息存储到所述叶子节点中;

s15、创建所述存储块的索引,并将所述索引存放至所述根节点;

具体的,在本发明的实施例中spacemaptree的根节点包含了255个索引,当然这个索引值是可以改变的,这个索引值的多少决定了能够索引到下一级节点的数量。

s16、在将存储任务分配到空闲存储块时,预设查找空闲存储块的起始位置,根据所述起始位置获得所述根节点中对应的索引,根据所述索引查找到空闲存储块的编号,基于所述编号在所述叶子节点中进行查找获得空闲存储块,将所述存储任务存储至所述空闲存储块中。

通过本发明实施例一公开的技术方案,将存储空间划分为多个存储块,并对所述存储块按照存储空间的地址大小进行线性编号;创建空间地图树结构,将所述存储块的使用相关信息存储到所述叶子节点中,创建所述存储块的索引,并将所述索引存放至所述根节点;当将存储任务分配到存储块时,预设查找空闲存储块的起始位置,根据所述起始位置获得所述根节点中对应的索引,根据所述索引查找到有空闲索引块的叶子节点,在所述叶子节点中进行查找获得空闲存储块,将所述存储任务存储至所述空闲存储块中。在本发明中由于将存储块按照存储空间的地址大小进行线性编号,保证存储块的地址是连续的或者是按照存储空间地址进行递增的,并创建了空间地图树的结构,在分配存储块时先设定起始查找位置然后根据根节点对应的索引查找到叶子节点中的空闲存储块,这样保证了查找从上一次获得的空闲块之后进行,提升了数据访问效率,进而实现了改善用户体验的目的。

实施例二

参照本发明实施例一和图1中所描述的s11到s16步骤的具体过程,并参见图2为本发明实施例中空间地图树的示意图,参见图3,所述步骤s14将所述存储块的使用相关信息存储到所述叶子节点中具体包括:

s141、分别设置所述叶子节点块头字段和块号字段;

s142、将所述存储块中拥有空闲存储块的数量信息存储至所述叶子节点的块头字段;

s143、将所述叶子节点对应的被使用的存储块的编号信息存储至所述叶子节点的块号字段。

可以理解的是,在叶子节点所在的存储块上,块头字段not_used表示该叶子节点对应的存储块中有多少个空闲块;所述块号字段blocknr表示该叶子节点所使用的存储块的编号。因为用一个比特字段标识一个块的使用情况,根据在本发明实施例中设置的存储块的大小为4k,以及在叶子节点上用一个字节表示一个存储块的使用情况,因此一个叶子节点能够管理(4096-16)*8=32640个存储块的使用情况,该数量是基于本发明实施例中的数据设置得到的,具体数据设置不同则数量会有所变化,本发明不一一举例说明。

对应的,参见图4,所述步骤s15创建所述存储块的索引,并将所述索引存放至所述根节点,包括:

s151、创建所述存储块的索引;

s152、分别设置索引块号字段和空闲指向字段;

s153、将所述索引指向的叶子节点对应的存储块的编号存储至所述索引块号字段;

s154、将所述索引指向的叶子节点对应的存储块中空闲存储块的数量信息存储至所述空闲指向字段。

具体的,将空间地图树的根节点设置为255个索引,索引中的索引块字段即blocknr字段表示该索引指向的叶子节点的存储块的编号,所述空闲指向字段nr_free表示该索引指向的叶子节点对应的存储块中有多少个空闲块,因此对应步骤s14中的计算过程,在此根节点中的索引所指向的是存储号为0到32639的使用情况,以此类推,在叶子节点中找到空闲的存储块可以计算出对应的编号。

对应的,参见图5,在将存储任务分配到空闲存储块时,所述步骤s16预设查找空闲存储块的起始位置,根据所述起始位置获得所述根节点中对应的索引,根据所述索引查找到有空闲索引块的叶子节点,在所述叶子节点中进行查找获得空闲存储块,将所述存储任务存储至所述空闲存储块中,具体包括:

s161、在将存储任务分配到空闲存储块时,获取到上一次存储任务分配到的空闲存储块的编号,将所述编号数值加一获得查找空闲存储块的起始存储块的编号;

s162、根据起始存储块的编号,查找获得对应的所述根节点中的索引的空闲标识字段;

s163、解析所述空闲标识字段,获得空闲存储块的编号;

s164、基于所述编号,查找获得所述叶子节点中的空闲存储块位置信息;

s165、查找所述空闲存储块位置信息对应的存储块,得到空闲存储块;

s166、将所述存储任务存储至所述空闲存储块中。

可以理解的是,在分配存储块时,为了快速找到空闲的存储块,需要通过全局变量维护了一个开始查找空闲存储块的开始位置,这个开始位置为上一次申请空闲存储块的编号加一,同时树的根节点中的索引对象的空闲标识字段none_free_before字段表示该索引指向的叶子节点中在none_free_before字段这个值之后的位置开始查找空闲块,none_free_before字段为上次从这个节点申请的空闲存储块的bit位加一,综上,在申请空闲存储块时通过开始位置确定了从哪个索引开始查找空闲块,从索引中的none_free_before字段确定了从该索引指向的叶子节点中的那个bit位开始变量查找空闲块。

对应的,当对存储块进行存储空间释放时,该方法还包括:

将所述存储空间待释放的存储块的比特字段设置为0。

具体的,对应步骤s16把开始查找空闲块的起始位置,设置为释放的这个空闲块的编号,同时可以把根节点中的none_free_before字段设置为这个释放的存储块的bit位的位置。

根据本发明实施例二公开的技术方案,具体描述了创建的空间地图树结构,并且通过该结构中的根节点和叶子节点中相关字段的设置,在分配存储块时先设定起始查找位置然后根据根节点对应的索引查找到叶子节点中的空闲存储块;并且在释放存储块空间时也对应对空间地图树中对应的信息进行了设置,通过对存储空间的分配和释放实现了对存储系统中存储空间的管理。由于在进行空间的管理时,存储块的地址是连续的或者是按照存储空间地址递增的,因此在进行数据访问时,进行的是顺序i/o访问,这有效的提升了系统的访问效率,改善了用户体验。

实施例三

与本发明实施例一和实施例二所公开的存储空间管理方法相对应,本发明的实施例三还提供了一种存储空间管理装置,参见图6,该装置包括:

划分模块1,用于将存储系统的存储空间划分为多个存储块,并对所述存储块按照存储空间的地址大小进行线性编号,获得所述存储块的编号;

设置模块2,用于设置所述存储块的比特字段,并基于所述比特字段划分得到空闲存储块,其中,所述比特位字段为0时表示所述存储块空闲,当所述比特位字段为1时标识所述存储块被使用;

创建模块3,用于创建空间地图树结构,其中,所述空间地图树包括根节点和叶子节点;

第一存储模块4,用于将所述存储块的使用相关信息存储到所述叶子节点中;

第二存储模块5,用于创建所述存储块的索引,并将所述索引存放至所述根节点;

分配模块6,用于在将存储任务分配到空闲存储块时,预设查找空闲存储块的起始位置,根据所述起始位置获得所述根节点中对应的索引,根据所述索引查找到空闲存储块的编号,基于所述编号在所述叶子节点中进行查找获得空闲存储块,将所述存储任务存储至所述空闲存储块中。

具体的,所述第一存储模块4包括:

第一设置单元41,用于分别设置所述叶子节点块头字段和块号字段;

第一存储单元42,用于将所述存储块中拥有空闲存储块的数量信息存储至所述叶子节点的块头字段;

第二存储单元43,用于将所述叶子节点对应的被使用的存储块的编号信息存储至所述叶子节点的块号字段。

对应的,所述第二存储模块5包括:

创建单元51,用于创建所述存储块的索引;

第二设置单元52,用于分别设置索引块号字段和空闲指向字段;

第三存储单元53,用于将所述索引指向的叶子节点对应的存储块的编号存储至所述索引块号字段;

第四存储单元54,用于将所述索引指向的叶子节点对应的存储块中空闲存储块的数量信息存储至所述空闲指向字段。

具体的,所述分配模块6包括:

第一获取单元61,用于在将存储任务分配到空闲存储块时,获取到上一次存储任务分配到的空闲存储块的编号,将所述编号数值加一获得查找空闲存储块的起始存储块的编号;

第二获取单元62,用于根据起始存储块查找获得所述根节点中的索引的空闲标识字段;

第三获取单元63,用于解析所述空闲标识字段,获得空闲存储块的编号;

第一查找单元64,用于基于所述编号,查找获得所述叶子节点中的空闲存储块位置信息;

第二查找单元65,用于查找所述空闲存储块位置信息对应的存储块,得到空闲存储块;

任务存储单元66,用于将所述存储任务存储至所述空闲存储块中。

对应的,当对存储块进行存储空间释放时,该装置还包括:

释放设置模块,用于将所述存储空间待释放的存储块的比特字段设置为0。

在本发明的实施例三中,通过划分模块将存储空间划分为多个存储块,通过设置模块设置存储块的比特字段区分所述存储块是否空闲,然后创建一种空间地图树用来描述各个存储块,将所述存储块的使用相关信息存储到所述叶子节点中;创建所述存储块的索引,并将所述索引存放至所述根节点;在将存储任务分配到空闲存储块时,预设查找空闲存储块的起始位置,根据所述起始位置获得所述根节点中对应的索引,根据所述索引查找到空闲存储块的编号,基于所述编号在所述叶子节点中进行查找获得空闲存储块,将所述存储任务存储至所述空闲存储块中。并且还包括对存储块空间的释放,通过对存储空间的分配和释放实现了对存储系统中存储空间的管理。由于在进行空间的管理时,存储块的地址是连续的或者是按照存储空间地址递增的,因此在进行数据访问时,进行的是顺序i/o访问,这有效的提升了系统的访问效率,改善了用户体验。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1