文件存储空间回收方法和装置
技术领域
本发明涉计算机领域,具体而言,涉及一种文件存储空间回收方法和装置。
背景技术
存储空间管理分配和回收是文件系统的一个重要组成部分。存储空间分配的合理性直接影响系统的负载均衡,同时对存储介质的使用寿命也存在重要影响。系统在运行中,由于文件的删除,会不定时的产生空闲区域,大量空间区域的堆积会使系统性能越来越慢。因此空闲区域的回收和整理对文件系统是非常有意义的。空闲区域
通用的文件系统中的文件数据顺序存储在存储设备中,各个存储块大小不一,如图1所示,存储设备中存在F1-F8的文件数据,在存储块F8的后端还存在空闲的存储空间。当系统运行一段时间后,存储设备上就会产生大量碎片,如文件删除,空间分配造成的零碎的存储空间等,假设F1、F3、F5被删除,则会产生空闲区域F1、F3、F5,如图2所示。
现有的存储空间回收方法是对空闲区域空间进行整理,将碎片空间迁移至新的存储设备,用新的存储设备替换老的存储设备,或者移动数据进行重新紧凑存储两种方式,图3示出了重新紧凑存储后的存储空间。整理后,存储设备的中的空闲区域可以被重复利用。
但是,存储空间的整理带来额外读写操作,如果频繁删除文件,存储设备在短时间内就会存在大量的存储空间的空闲区域,文件系统需要持续进行空闲区域的整理,增加存储设备读写操作带来系统性能和负载上的压力,同时增加存储设备的损耗,降低存储设备的使用寿命。
针对现有技术中对存储空间进行整理导致存储设备损耗的问题,目前尚未提出有效的解决方案。
发明内容
本发明的主要目的在于提供一种文件存储空间回收方法和装置,以解决现有技术中对存储空间进行整理导致存储设备损耗的问题。
为了实现上述目的,根据本发明的一个方面,提供了一种文件存储空间回收方法。根据本发明的文件存储空间回收方法包括:确定文件存储空间中删除文件产生的空闲区域;判断是否存在待写入数据;如果存在待写入数据,查找空闲区域的位置,其中,空闲区域的位置保持不变;以及在确定空闲区域的位置之后,向空闲区域写入待写入数据。
为了实现上述目的,根据本发明的另一方面,提供了一种文件存储空间回收装置。根据本发明的文件存储空间回收装置包括:第一确定单元,用于确定文件存储空间中删除文件产生的空闲区域;判断单元,用于判断是否存在待写入数据;第一查找单元,用于在存在待写入数据时,查找空闲区域的位置,其中,空闲区域的位置保持不变;以及写入单元,用于在确定空闲区域的位置之后,向空闲区域写入待写入数据。
通过本发明实施例,采用确定文件存储空间中删除文件产生的空闲区域;判断是否存在待写入数据;如果存在待写入数据,查找空闲区域的位置,其中,空闲区域的位置保持不变;以及在确定空闲区域的位置之后,向空闲区域写入待写入数据的方法,解决了现有技术中对存储空间进行整理导致存储设备损耗的问题,进而达到了减低存储设备损耗的效果。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据现有技术中存储设备的存储空间示意图;
图2是根据现有技术的删除文件得到空闲空间的示意图;
图3是根据现有技术对存储空间重新紧凑存储的示意图;
图4是根据本发明第一实施例的文件存储空间回收方法的流程图;
图5是根据本发明第二实施例的文件存储空间回收方法的流程图;
图6是根据本发明第三实施例的文件存储空间回收方法的流程图;
图7是根据本发明实施例的带游标的存储空间的示意图;
图8是根据本发明实施例的固定长度存储空间的示意图;
图9是根据本发明第一实施例的文件存储空间回收装置的示意图;
图10是根据本发明第二实施例的文件存储空间回收装置的流程图;以及
图11是根据本发明第三实施例的文件存储空间回收装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例提供了一种文件存储空间回收方法。在系统运行的过程中,由于文件存储空间需要反复删除和存储文件,产生大量零碎的空闲区域,这些零碎的空闲区域堆积就导致系统运行缓慢,降低系统的性能,为了避免上述情况的发生,通常会对零碎的空间区域进行整理,重新紧凑存储。但是,重新紧凑存储就会带来反复的读写操作,反复的读写操作就会导致存储设备的损耗。本发明实施例的文件存储空间回收方法能够在删除文件得到空闲区域之后,不通过紧凑存储,直接向空闲区域内重新写入数据,从而减少了存储设备反复读写操作,不仅达到了文件存储空间回收的目的,还减少了存储设备的损耗。
以下结合附图对本发明实施例的文件存储空间回收方法进行说明。
图4是根据本发明第一实施例的文件存储空间回收方法的流程图。如图所示,该文件存储空间回收方法包括:
步骤S402,确定文件存储空间中删除文件产生的空闲区域。
在文件存储空间中存储多个文件,在删除文件存储空间中的文件之后,在存储空间的相应位置会产生空闲区域。
如图1,文件存储空间存储有文件数据F1-F8,删除文件F1、F3和F5之后,在原先存储文件F1、F3和F5的文件存储空间中相应产生空闲区域F1、F3和F5。
步骤S404,判断是否存在待写入数据。
为了重复利用文件存储空间,在删除文件产生空闲区域之后,判断是否存在待写入数据,如果存在待写入数据,则可以将待写入数据写入文件存储空间中的空闲区域。
步骤S406,如果存在待写入数据,查找空闲区域的位置,其中,空闲区域的位置保持不变。
如果判断出存在待写入数据,则在文件存储空间中查找空闲区域的位置。这里查找到的空闲区域的位置与删除文件后产生的空闲区域的位置相同。需要说明的是,删除文件后产生的空闲区域的位置保持不变,即对删除文件后产生的空闲区域不进行紧凑存储,如图2,删除F3后产生的空闲区域为F3,其位置保持不变。
步骤S408,在确定空闲区域的位置之后,向空闲区域写入待写入数据。
在确定空闲区域的位置之后,可以向这些空闲区域写入待写入数据,写入数据时可以根据数据的大小确定向一个或者多个空闲区域写入数据。如何写入数据,本发明实施例的下述实施例中会有详细说明,在此不做赘述。
通过上述实施例,向删除文件后产生的空闲区域内写入待写入数据的过程中,不需要对空闲区域进行紧凑存储操作,避免了对存储设备进行多次反复的读写操作,减少了对存储设备的损耗,从而解决了现有技术中对存储空间进行整理导致存储设备损耗的问题,进而达到了减低存储设备损耗的效果。
图5是根据本发明第二实施例的文件存储空间回收方法的流程图。该实施例中,空闲区域为多个空闲区域,多个空闲区域包括第一空闲区域和第二空闲区域,其中,在确定空闲区域的位置之后,向空闲区域写入待写入数据包括如下步骤:
步骤S502,在确定第一空闲区域的位置之后,判断第一空闲区域的容量是否小于待写入数据所需的存储空间。
空闲区域为多个空闲区域,在向空闲区域中写入数据时,首先确定写入的空闲区域的位置。如果一个空闲区域足以写入待写入数据,则将待写入数据写入该空闲区域,如果一个空闲区域不足以写入待写入数据,则将待写入数据存储在多个空闲区域。
在确定第一空闲区域的位置之后,判断第一空闲区域的容量是否小于待写入数据所需的存储空间,如果第一空闲区域的容量小于待写入数据所需的存储空间,则利用第一空闲区域和其他空闲区域共同存储待写入数据。
步骤S504,如果第一空闲区域的容量小于待写入数据所需的存储空间,则确定第二空闲区域的位置。
在确定第一空闲区域的容量小于待写入数据所需的存储空间之后,则确定第二空闲区域的位置,确定第二空闲区域的方法与确定第一空闲区域的方法相同,在下面的实施例中会有详细的介绍,这里不做过多赘述。
步骤S506,将待写入数据分配存储到第一空闲区域和第二空闲区域。
在确定第二空闲区域的位置之后,将待写入数据分配存储到第一空闲区域和第二空闲区域,即第一空闲区域和第二空闲区域共同存储待写入数据。由于在写入数据是会在数据中添加标识信息,因此,即时待写入数据分配存储在多个空闲区域中,在使用待写入数据时也可以根据标识信息调用。
需要说明的是,如果第一空闲区域和第二空闲区域的存储空间也不足以存储待写入数据,那么可以继续查找空闲区域,最终使得待写入数据分配存储在多个空闲区域中。
例如图2所示的文件存储空间,空闲区域为F1、F3和F5,F1、F3和F5的存储容量分别为5M、10M和8M。待写入数据的大小为20M,那么上述三个空闲区域的任何一个空闲区域都无法独自存储20M的待写入数据,则需要在F1、F3和F5三个空闲区域中分配存储20M的待写入数据。在写入待写入数据之前,首先确定第一空闲区域为F1,判断第一空闲区域F1无法存储20M的待写入数据,然后确定第二空闲区域为F2,判断第一空闲区域和第二空闲区域无法分配存储20M数据,则查找第三空闲区域F5,确定F1、F3和F5的容量能够满足待写入数据需要的存储空间,则在F1、F3和F5中分配待写入数据,分配数据之后,F1、F3和F5三个空闲区域存储的数据分别为5M、10M和5M。
通过上述实施例,向空闲区域写入待写入数据时,首先确定第一空闲区域的位置,判断第一空闲区域的容量是否足以容纳待写入数据,如果第一空闲区域的容量能够容纳待写入数据,则将待写入数据存储在第一空闲区域,如果第一空闲区域的容量不足以容纳待写入数据,则确定第二空闲区域的位置,将待写入数据分配在第一空闲区域和第二空闲区域内,从而使得在不对空闲区域进行紧凑存储的情况下,也能写入待写入数据。
图6是根据本发明第三实施例的文件存储空间回收方法的流程图。如图所示,在确定空闲区域的位置之前,该文件存储空间回收方法包括:
步骤S602,获取文件存储空间中游标的位置,其中,游标的位置为存储空间最近一次写入数据之后的位置。
游标的位置是存储空间最近一次写入数据之后的位置,如图7所示,最近一次存储的数据为A3,存储后游标的位置在A3和A4之间。
步骤S604,以游标为起点,在文件存储空间中依次查找空闲区域。
图7所示的存储空间由左至右为从低位到高位。在获取文件存储空间中游标的位置之后,以游标为起点,由低位向高位依次查找文件存储空间中的空闲区域。
步骤S606,确定距离游标最近的空闲区域。
距离游标最近的空闲区域,如图7所示,从图7所示的箭头位置开始,依次查询A4、A5和A6。在查询到A4时,判断A4为非空闲区域,则继续查询A5,并判断A5是空闲区域,则确定距离游标最近的空闲区域为A5。
需要说明的是,在查找空闲区域时,以游标为起点由低位向高位依次查询,不论查找到的空闲区域是由刚刚删除文件的动作产生的还是由很久之前删除文件的动作产生的,只要是以游标为起点由低位向高位依次查询的空闲区域都可以用来存储待写入数据。
例如,图7中空闲区域有A2和A5,游标的位置在A3和A4之间,以游标为起点由低位向高位依次查询,则从A4开始判断是否为空闲区域,查询到A5时判断A5为空闲区域。此时,如果A5就足以存储待写入数据,那么查询到此即可。如果A5不足以存储待写入数据,还需要继续查询空闲区域,这时假设存储设备的存储区域只有A1至A6,那么,当查询到A6时还需要查询下一个空闲区域,则从A1继续查询空闲区域。由图7可知,从A1开始继续查询空闲区域时,可以查找到空闲区域A2。
通过上述实施例,为了使存储设备的读写负载均衡,使得存储设备的损耗能够均匀,在查询空闲区域以进行待写入数据分配的时候,根据游标的位置由低位向高位进行查找,当查找到存储区域的最后一个区域时,则从低位开始重新查询。这样就保证删除文件产生的空闲区域不会立即被分配出去进行数据写入,减少存储设备个别区域集中被读写的情况,使得存储设备的区域损耗比较均匀。由于存储设备的写入和擦除(即读写)次数是在一个固定范围内的,同等情况下,减少存储设备的读写次数可以增加存储设备的寿命,另外,如果存储设备的某一区域发生损坏,整个存储设备也就相应损坏,因此,通过上述实施例使得存储设备的读写均匀,从而使得存储设备的损耗均匀,进而提高了存储设备的使用寿命,减少存储设备的损耗。
进一步地,在向空闲区域写入待写入数据之后,文件存储空间回收方法包括:更新游标的位置,其中,更新后游标的位置处于待写入数据占用的存储空间的末端。
在向空闲区域写入待写入数据之后,更新游标的位置,更新后的游标的位置在待写入数据占用的存储空间的末端。
如图7所示,以游标为起点,查找到空闲区域A5,则向A5写入待写入数据,假设A5的容量为8M。在写入待写入数据之前,游标的位置在A3和A4之间,如果待写入数据为8M,在写入待写入数据之后,游标的位置在A5和A6之间;如果待写入数据为5M,在写入待写入数据之后,空闲区域成为两部分,一部分是存储了5M数据的存储空间,另一部分是没有存储数据的3M空间,存储数据后游标的位置在两个部分的交界处。这样,原来的空闲区域A5由8M容量变为3M的容量。
如果需要再次写入数据,则从A5中两个部分交界处的位置开始查找空闲区域,那么首先被查找到的区域为变为3M容量的A5。
上述实施例中,在写入数据后,更新游标的位置,使得游标能够及时表示存储空间存储数据后的为位置,并按照更新后的游标的位置查找下一个空闲区域,从而在下一次查找空闲区域时减少查找和判断的步骤,从而提高了查找的效率。
为了方便查找空闲区域,在文件存储空间中分别标记占用状态和非占用状态,确定文件存储空间中删除文件产生的空闲区域之后,该文件存储空间回收方法还包括:将空闲区域由占用状态标记为非占用状态,向空闲区域写入待写入数据之后,该文件存储空间回收方法还包括:将空闲区域由非占用状态标记为占用状态。
占用状态即存储有数据的状态,非占用状态即未存储有数据的状态。在删除文件存储空间中的文件得到空闲区域之后,将空闲区域由占用状态标记为非占用状态,在向空闲区域写入待写入数据之后,将空闲区域由非占用状态标记为占用状态。
为了便于判断某一个区域为占用状态或者非占用状态,例如,可以用1和0分别表示存储空间的占用状态和非占用状态。
以下结合图7和图8对两种存储设备的文件存储空间回收方法进行说明。
对于存储空间为非固定长度的存储设备,如图7所示,根据本发明实施例的文件存储空间回收方法如下:
删除A2的数据,得到空闲区域A2,将空闲区域A2的状态由占用状态更改为非占用状态。
判断是否有待写入数据,如果有待写入数据,准备将待写入数据写入文件存储空间的空闲区域内。
获取文件存储空间中游标的位置处于A3和A4之间,以游标的位置为起点,由低到高依次查找空闲区域的位置,在查找的过程中,可以通过判断区域的状态是否为非占用状态,查找到处于非占用状态的空闲区域A5。
确定待写入数据的大小,并确定待写入数据需要占用的存储空间为A5。这时,需要判断空闲区域A5的容量是否能够满足待写入数据的存储空间要求,如果空闲区域A5的容量能够满足待写入数据的存储空间的要求,则将待写入数据写入空闲区域A5。
如果判断出空闲区域A5的容量不能够满足待写入数据的存储空间的要求,则查找下一个空闲区域,由图7可知,在查找到A6之后从A1重新开始查找,查找的空闲区域为A2。在查找到空闲区域A2之后,将待写入数据分配在空闲区域A5和空闲区域A2中。
将待写入数据分配在空闲区域A5和空闲区域A2中之后,更新游标的位置在A2和A3之间。
更新空闲区域A5和空闲区域A2的状态为占用状态。
对于存储空间为固定长度的存储设备,例如,腾讯的海量分布式存储系统。如图8所示,文件存储空间为D1至D6。其中,D1、D3和D6为存储了数据的空间,处于占用状态,用1表示,D2、D4和D5为未存储数据的空间,为非占用状态,用0表示。
由于图8所示的存储设备中每个存储空间都是固定长度的,在删除数据时,可以根据数据在存储设备中的偏移量确定删除数据的位置。例如,删除D2的存储数据,得到的空闲空间为D2,更新D2的状态为非占用状态,用0表示。
判断是否有待写入数据,如果有待写入数据,则在存储设备中查找空闲区域,准备将待写入数据写入空闲区域内。
获取文件存储空间中游标的位置处于D3和D4之间,以游标的位置为起点,由低到高依次查找空闲区域的位置,在查找的过程中,可以通过判断区域的状态是否为非占用状态,查找到处于非占用状态的空闲区域D4。
确定待写入数据的大小,并确定待写入数据需要占用的存储空间为D4。这时,需要判断空闲区域D4的容量是否能够满足待写入数据的存储空间要求,如果空闲区域D4的容量能够满足待写入数据的存储空间的要求,则将待写入数据写入空闲区域D4。
如果判断出空闲区域D4的容量不能够满足待写入数据的存储空间的要求,则查找下一个空闲区域,由图8可知,在查找到D4之后,查找到空闲区域D5之后,将待写入数据分配在空闲区域D4和空闲区域D5中。如果还不能满足待写入数据的空间要求,可以从存储设备的低位开始重新查找,查找到空闲区域D2。
将待写入数据分配在空闲区域D4和空闲区域D5中之后,更新游标的位置在D5和D6之间。
更新空闲区域D4和空闲区域D5的状态为占用状态。
本发明实施例还提供了一种文件存储空间回收装置。
本发明实施例的文件存储空间回收方法可以通过本发明实施例所提供的文件存储空间回收装置来执行,本发明实施例的文件存储空间回收装置也可以用于执行本发明实施例所提供的文件存储空间回收方法。
图9是根据本发明第一实施例的文件存储空间回收装置的示意图。如图所示,该文件存储空间的回收装置包括第一确定单元10、判断单元20、第一查找单元30和写入单元40。
第一确定单元10用于确定文件存储空间中删除文件产生的空闲区域。
在文件存储空间中存储多个文件,在删除文件存储空间中的文件之后,在存储空间的相应位置会产生空闲区域。
如图1,文件存储空间存储有文件数据F1-F8,删除文件F1、F3和F5之后,在原先存储文件F1、F3和F5的文件存储空间中相应产生空闲区域F1、F3和F5。
判断单元20用于判断是否存在待写入数据。
为了重复利用文件存储空间,在删除文件产生空闲区域之后,判断是否存在待写入数据,如果存在待写入数据,则可以将待写入数据写入文件存储空间中的空闲区域。
第一查找单元30用于在存在待写入数据时,查找空闲区域的位置,其中,空闲区域的位置保持不变。
如果判断出存在待写入数据,则在文件存储空间中查找空闲区域的位置。这里查找到的空闲区域的位置与删除文件后产生的空闲区域的位置相同。需要说明的是,删除文件后产生的空闲区域的位置保持不变,即对删除文件后产生的空闲区域不进行紧凑存储,如图2,删除F3后产生的空闲区域为F3,其位置保持不变。
写入单元40用于在确定空闲区域的位置之后,向空闲区域写入待写入数据。
在确定空闲区域的位置之后,可以向这些空闲区域写入待写入数据,写入数据时可以根据数据的大小确定向一个或者多个空闲区域写入数据。如何写入数据,本发明实施例的下述实施例中会有详细说明,在此不做赘述。
通过上述实施例,向删除文件后产生的空闲区域内写入待写入数据的过程中,不需要对空闲区域进行紧凑存储操作,避免了对存储设备进行多次反复的读写操作,减少了对存储设备的损耗,从而解决了现有技术中对存储空间进行整理导致存储设备损耗的问题,进而达到了减低存储设备损耗的效果。
图10是根据本发明第二实施例的文件存储空间回收装置的流程图。该实施例中,空闲区域为多个空闲区域,多个空闲区域包括第一空闲区域和第二空闲区域,该文件存储空间回收装置包括第一确定单元10、判断单元20、第一查找单元30和写入单元40,其中,第一查找单元30包括判断模块301、确定模块302和写入模块303。
第一确定单元10用于确定文件存储空间中删除文件产生的空闲区域。
在文件存储空间中存储多个文件,在删除文件存储空间中的文件之后,在存储空间的相应位置会产生空闲区域。
如图1,文件存储空间存储有文件数据F1-F8,删除文件F1、F3和F5之后,在原先存储文件F1、F3和F5的文件存储空间中相应产生空闲区域F1、F3和F5。
判断单元20用于判断是否存在待写入数据。
为了重复利用文件存储空间,在删除文件产生空闲区域之后,判断是否存在待写入数据,如果存在待写入数据,则可以将待写入数据写入文件存储空间中的空闲区域。
第一查找单元30用于在存在待写入数据时,查找空闲区域的位置,其中,空闲区域的位置保持不变。
如果判断出存在待写入数据,则在文件存储空间中查找空闲区域的位置。这里查找到的空闲区域的位置与删除文件后产生的空闲区域的位置相同。需要说明的是,删除文件后产生的空闲区域的位置保持不变,即对删除文件后产生的空闲区域不进行紧凑存储,如图2,删除F3后产生的空闲区域为F3,其位置保持不变。
写入单元40用于在确定空闲区域的位置之后,向空闲区域写入待写入数据。
在确定空闲区域的位置之后,可以向这些空闲区域写入待写入数据,写入数据时可以根据数据的大小确定向一个或者多个空闲区域写入数据。如何写入数据,本发明实施例的下述实施例中会有详细说明,在此不做赘述。
通过上述实施例,向删除文件后产生的空闲区域内写入待写入数据的过程中,不需要对空闲区域进行紧凑存储操作,避免了对存储设备进行多次反复的读写操作,减少了对存储设备的损耗,从而解决了现有技术中对存储空间进行整理导致存储设备损耗的问题,进而达到了减低存储设备损耗的效果。
判断模块301用于在确定第一空闲区域的位置之后,判断第一空闲区域的容量是否小于待写入数据所需的存储空间。
空闲区域为多个空闲区域,在向空闲区域中写入数据时,首先确定写入的空闲区域的位置。如果一个空闲区域足以写入待写入数据,则将待写入数据写入该空闲区域,如果一个空闲区域不足以写入待写入数据,则将待写入数据存储在多个空闲区域。
在确定第一空闲区域的位置之后,判断第一空闲区域的容量是否小于待写入数据所需的存储空间,如果第一空闲区域的容量小于待写入数据所需的存储空间,则利用第一空闲区域和其他空闲区域共同存储待写入数据。
确定模块302用于在第一空闲区域的容量小于待写入数据所需的存储空间时,确定第二空闲区域的位置。
在确定第一空闲区域的容量小于待写入数据所需的存储空间之后,则确定第二空闲区域的位置,确定第二空闲区域的方法与确定第一空闲区域的方法相同,在下面的实施例中会有详细的介绍,这里不做过多赘述。
写入模块303用于将待写入数据分配存储到第一空闲区域和第二空闲区域。
在确定第二空闲区域的位置之后,将待写入数据分配存储到第一空闲区域和第二空闲区域,即第一空闲区域和第二空闲区域共同存储待写入数据。由于在写入数据是会在数据中添加标识信息,因此,即时待写入数据分配存储在多个空闲区域中,在使用待写入数据时也可以根据标识信息调用。
需要说明的是,如果第一空闲区域和第二空闲区域的存储空间也不足以存储待写入数据,那么可以继续查找空闲区域,最终使得待写入数据分配存储在多个空闲区域中。
例如图2所示的文件存储空间,空闲区域为F1、F3和F5,F1、F3和F5的存储容量分别为5M、10M和8M。待写入数据的大小为20M,那么上述三个空闲区域的任何一个空闲区域都无法独自存储20M的待写入数据,则需要在F1、F3和F5三个空闲区域中分配存储20M的待写入数据。在写入待写入数据之前,首先确定第一空闲区域为F1,判断第一空闲区域F1无法存储20M的待写入数据,然后确定第二空闲区域为F2,判断第一空闲区域和第二空闲区域无法分配存储20M数据,则查找第三空闲区域F5,确定F1、F3和F5的容量能够满足待写入数据需要的存储空间,则在F1、F3和F5中分配待写入数据,分配数据之后,F1、F3和F5三个空闲区域存储的数据分别为5M、10M和5M。
通过上述实施例,向空闲区域写入待写入数据时,首先确定第一空闲区域的位置,判断第一空闲区域的容量是否足以容纳待写入数据,如果第一空闲区域的容量能够容纳待写入数据,则将待写入数据存储在第一空闲区域,如果第一空闲区域的容量不足以容纳待写入数据,则确定第二空闲区域的位置,将待写入数据分配在第一空闲区域和第二空闲区域内,从而使得在不对空闲区域进行紧凑存储的情况下,也能写入待写入数据。
图11是根据本发明第三实施例的文件存储空间回收装置的示意图。如图所示,该文件存储空间回收装置包括第一确定单元10、判断单元20、第一查找单元30和写入单元40,还包括获取单元50、第二查找单元60和第二确定单元70。
第一确定单元10用于确定文件存储空间中删除文件产生的空闲区域。
在文件存储空间中存储多个文件,在删除文件存储空间中的文件之后,在存储空间的相应位置会产生空闲区域。
如图1,文件存储空间存储有文件数据F1-F8,删除文件F1、F3和F5之后,在原先存储文件F1、F3和F5的文件存储空间中相应产生空闲区域F1、F3和F5。
判断单元20用于判断是否存在待写入数据。
为了重复利用文件存储空间,在删除文件产生空闲区域之后,判断是否存在待写入数据,如果存在待写入数据,则可以将待写入数据写入文件存储空间中的空闲区域。
第一查找单元30用于在存在待写入数据时,查找空闲区域的位置,其中,空闲区域的位置保持不变。
如果判断出存在待写入数据,则在文件存储空间中查找空闲区域的位置。这里查找到的空闲区域的位置与删除文件后产生的空闲区域的位置相同。需要说明的是,删除文件后产生的空闲区域的位置保持不变,即对删除文件后产生的空闲区域不进行紧凑存储,如图2,删除F3后产生的空闲区域为F3,其位置保持不变。
写入单元40用于在确定空闲区域的位置之后,向空闲区域写入待写入数据。
在确定空闲区域的位置之后,可以向这些空闲区域写入待写入数据,写入数据时可以根据数据的大小确定向一个或者多个空闲区域写入数据。如何写入数据,本发明实施例的下述实施例中会有详细说明,在此不做赘述。
通过上述实施例,向删除文件后产生的空闲区域内写入待写入数据的过程中,不需要对空闲区域进行紧凑存储操作,避免了对存储设备进行多次反复的读写操作,减少了对存储设备的损耗,从而解决了现有技术中对存储空间进行整理导致存储设备损耗的问题,进而达到了减低存储设备损耗的效果。
获取单元50用于在确定空闲区域的位置之前,获取文件存储空间中游标的位置,其中,游标的位置为存储空间最近一次写入数据之后的位置。
游标的位置是存储空间最近一次写入数据之后的位置,如图7所示,最近一次存储的数据为A3,存储后游标的位置在A3和A4之间。
第二查找单元60用于在以游标为起点,在文件存储空间中依次查找空闲区域。
图7所示的存储空间由左至右为从低位到高位。在获取文件存储空间中游标的位置之后,以游标为起点,由低位向高位依次查找文件存储空间中的空闲区域。
第二确定单元70用于确定距离游标最近的空闲区域。
距离游标最近的空闲区域,如图7所示,从图7所示的箭头位置开始,依次查询A4、A5和A6。在查询到A4时,判断A4为非空闲区域,则继续查询A5,并判断A5是空闲区域,则确定距离游标最近的空闲区域为A5。
需要说明的是,在查找空闲区域时,以游标为起点由低位向高位依次查询,不论查找到的空闲区域是由刚刚删除文件的动作产生的还是由很久之前删除文件的动作产生的,只要是以游标为起点由低位向高位依次查询的空闲区域都可以用来存储待写入数据。
例如,图7中空闲区域有A2和A5,游标的位置在A3和A4之间,以游标为起点由低位向高位依次查询,则从A4开始判断是否为空闲区域,查询到A5时判断A5为空闲区域。此时,如果A5就足以存储待写入数据,那么查询到此即可。如果A5不足以存储待写入数据,还需要继续查询空闲区域,这时假设存储设备的存储区域只有A1至A6,那么,当查询到A6时还需要查询下一个空闲区域,则从A1继续查询空闲区域。由图7可知,从A1开始继续查询空闲区域时,可以查找到空闲区域A2。
通过上述实施例,为了使存储设备的读写负载均衡,使得存储设备的损耗能够均匀,在查询空闲区域以进行待写入数据分配的时候,根据游标的位置由低位向高位进行查找,当查找到存储区域的最后一个区域时,则从低位开始重新查询。这样就保证删除文件产生的空闲区域不会立即被分配出去进行数据写入,减少存储设备个别区域集中被读写的情况,使得存储设备的区域损耗比较均匀。由于存储设备的写入和擦除(即读写)次数是在一个固定范围内的,同等情况下,减少存储设备的读写次数可以增加存储设备的寿命,另外,如果存储设备的某一区域发生损坏,整个存储设备也就相应损坏,因此,通过上述实施例使得存储设备的读写均匀,从而使得存储设备的损耗均匀,进而提高了存储设备的使用寿命,减少存储设备的损耗。
进一步地,该文件存储空间回收装置还包括更新单元。
更新单元用于在向空闲区域写入待写入数据之后,更新游标的位置,其中,更新后游标的位置处于待写入数据占用的存储空间的末端。
在向空闲区域写入待写入数据之后,更新游标的位置,更新后的游标的位置在待写入数据占用的存储空间的末端。
如图7所示,以游标为起点,查找到空闲区域A5,则向A5写入待写入数据,假设A5的容量为8M。在写入待写入数据之前,游标的位置在A3和A4之间,如果待写入数据为8M,在写入待写入数据之后,游标的位置在A5和A6之间;如果待写入数据为5M,在写入待写入数据之后,空闲区域成为两部分,一部分是存储了5M数据的存储空间,另一部分是没有存储数据的3M空间,存储数据后游标的位置在两个部分的交界处。这样,原来的空闲区域A5由8M容量变为3M的容量。
如果需要再次写入数据,则从A5中两个部分交界处的位置开始查找空闲区域,那么首先被查找到的区域为变为3M容量的A5。
上述实施例中,在写入数据后,更新游标的位置,使得游标能够及时表示存储空间存储数据后的为位置,并按照更新后的游标的位置查找下一个空闲区域,从而在下一次查找空闲区域时减少查找和判断的步骤,从而提高了查找的效率。
为了方便查找空闲区域,在文件存储空间中分别标记占用状态和非占用状态,该文件存储空间回收装置还包括第一标记单元和第二标记单元。
第一标记单元用于在确定文件存储空间中删除文件产生的空闲区域之后,将空闲区域由占用状态标记为非占用状态,第二标记单元用于在向空闲区域写入待写入数据之后,将空闲区域由非占用状态标记为占用状态。
占用状态即存储有数据的状态,非占用状态即未存储有数据的状态。在删除文件存储空间中的文件得到空闲区域之后,将空闲区域由占用状态标记为非占用状态,在向空闲区域写入待写入数据之后,将空闲区域由非占用状态标记为占用状态。
为了便于判断某一个区域为占用状态或者非占用状态,例如,可以用1和0分别表示存储空间的占用状态和非占用状态。
如图7所示,本发明实施例的文件存储空间回收装置通过下述单元和模块进行文件存储空间的回收:
第一确定单元确定删除A2的数据之后得到的空闲区域A2,第一标记单元将空闲区域A2的状态由占用状态更改为非占用状态。
判断单元判断是否有待写入数据,如果有待写入数据,准备将待写入数据写入文件存储空间的空闲区域内。
获取单元获取文件存储空间中游标的位置处于A3和A4之间,第二查找单元以游标的位置为起点,由低到高依次查找空闲区域的位置,在查找的过程中,可以通过判断区域的状态是否为非占用状态,第二确定单元确定处于非占用状态的空闲区域A5为距离游标最近的空闲区域。
确定待写入数据的大小,并确定待写入数据需要占用的存储空间为A5。这时,判断模块需要判断空闲区域A5的容量是否能够满足待写入数据的存储空间要求,如果空闲区域A5的容量能够满足待写入数据的存储空间的要求,写入模块则将待写入数据写入空闲区域A5。
如果判断出空闲区域A5的容量不能够满足待写入数据的存储空间的要求,则查找下一个空闲区域,由图7可知,在查找到A6之后从A1重新开始查找,确定模块确定空闲区域A2。在查找到空闲区域A2之后,写入模块将待写入数据分配在空闲区域A5和空闲区域A2中。
将待写入数据分配在空闲区域A5和空闲区域A2中之后,更新单元更新游标的位置在A2和A3之间。
第二标记单元标记空闲区域A5和空闲区域A2的状态为占用状态。
本发明实施例还提供了一种计算机存储介质。该计算机存储介质可存储有程序,该程序用于执行上述的文件存储空间回收方法中的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。