磁盘文件存储方法和系统与流程

文档序号:14071100阅读:401来源:国知局

本发明涉及计算机存储技术领域,特别是涉及一种磁盘文件存储方法和系统。



背景技术:

在磁盘文件系统中,对文件的空间分配是以簇为单位,一个簇的大小通常为0.5k~128k,视磁盘的大小及格式化程序而定,典型windows格式化磁盘后,一个簇大小为4k,随着磁盘的使用,文件的不断创建删除,会形成磁盘碎片,即未分配使用的簇以不连续的形式存在,这样会导致文件读写性大幅度下降,造成读写效率低。



技术实现要素:

基于此,有必要针对上述问题,提供一种读写效率高的磁盘文件存储方法和系统。

一种磁盘文件存储方法,包括以下步骤:

获取文件数据、所述文件数据的空间长度以及磁盘的连续空闲空间;

检测所述磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间;

若是,则将所述文件数据存入所述长度大于或等于文件数据的空间长度的连续空闲空间;

若否,则检测所述磁盘是否存在逻辑簇的所有簇连续空闲;

当所述磁盘存在逻辑簇的所有簇连续空闲时,将所述文件数据存入所有簇连续空闲的逻辑簇中。

一种磁盘文件存储系统,包括:

第一获取模块,用于获取文件数据、所述文件数据的空间长度以及磁盘的连续空闲空间;

第一检测模块,用于检测所述磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间;

第一存储模块,用于在所述磁盘存在长度大于或等于文件数据的空间长度的连续空闲空间时,将所述文件数据存入所述长度大于或等于文件数据的空间长度的连续空闲空间;

第二检测模块,用于在所述磁盘不存在长度大于或等于文件数据的空间长度的连续空闲空间时,检测所述磁盘是否存在逻辑簇的所有簇连续空闲;

第二存储模块,用于当所述磁盘存在逻辑簇的所有簇连续空闲时,将所述文件数据存入所有簇连续空闲的逻辑簇中。

上述磁盘文件存储方法和系统,通过获取文件数据、文件数据的空间长度以及磁盘的连续空闲空间,检测磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间,若是,则将文件数据存入长度大于或等于文件数据的空间长度的连续空闲空间,若否,则检测磁盘是否存在逻辑簇的所有簇连续空闲,当磁盘存在逻辑簇的所有簇连续空闲时,将文件数据存入所有簇连续空闲的逻辑簇中,从而为文件数据分配到连续的空闲空间,减少了磁盘碎片,从而有效提高磁盘文件读写速度,读写效率高。

附图说明

图1为一实施例中磁盘文件存储方法流程图;

图2为一实施例逻辑簇的结构图;

图3为一实施例中磁盘空间组成结构图;

图4为另一实施例中磁盘文件存储方法流程图;

图5为一实施例中磁盘文件存储系统结构图。

具体实施方式

在一个实施例中,如图1所示,一种磁盘文件存储方法,包括以下步骤:

步骤s110:获取文件数据、文件数据的空间长度以及磁盘的连续空闲空间。

步骤s120:检测磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间。

在一个实施例中,在步骤s120之前,还包括:获取磁盘空闲空间长度;检测文件数据空间长度是否小于或等于磁盘空闲空间长度;若是,则进行检测磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间的步骤;若否,则输出存储失败提示信息。

具体地,当磁盘上的物理空闲空间长度足够时,则需要检测磁盘上的连续空闲空间长度是否足够,这样能给文件数据分配到连续的空间空间,有效减少文件碎片,从而保证磁盘文件读写速度,当文件数据空间长度大于磁盘上的物理空闲空间长度时,则直接输出存储失败提示信息,能有效提高文件数据存储的效率。

步骤s130:若是,则将文件数据存入长度大于或等于文件数据的空间长度的连续空闲空间。

当文件数据的空间长度小于或等于磁盘的连续空闲空间足够时,则直接将文件数据存入磁盘的连续空闲空间中,给文件数据分配到连续的空间空间,有效减少文件碎片,从而保证磁盘文件读写速度。

步骤s140:若否,则检测磁盘是否存在逻辑簇的所有簇连续空闲。

具体地,如图2、3所示,一个文件在磁盘上的空间占用是以逻辑簇为单位,一个磁盘包括逻辑簇x、逻辑簇y、逻辑簇v等等,一个逻辑簇包括多个簇,比如,逻辑簇x包括簇x+0、簇x+0…簇x+n-1。在一个实施例中,磁盘的逻辑簇为多个,步骤s140包括步骤142至146。

步骤142:检测当前逻辑簇的所有簇是否连续空闲。

具体地,磁盘上有多个分区,每个分区都有对应的fat表,查询每一个逻辑簇对应的fat表,若fat表中的对应簇的位置数值为0,则表示对应簇空闲,若fat表中的对应簇的位置数值为非0,则表示对应簇被占用。

在一个实施例中,步骤142包括步骤1422和步骤1424。

步骤1422:检测当前逻辑簇的第一个簇是否空闲;当当前逻辑簇的第一个簇不空闲时,则当前逻辑簇的所有簇不连续空闲。

具体地,当当前逻辑簇的第一个簇不空闲时,则说明当前逻辑簇的所有簇不连续空闲,剩余簇则不需要进行检测了,直接按照预设顺序获取下一个逻辑簇作为当前逻辑簇进行检测,有效优化了检测速度,提高了文件存储效率。

步骤1424:当当前逻辑簇的第一个簇空闲时,则检测当前逻辑簇的剩余簇是否连续空闲;若是,则当前逻辑簇的所有簇连续空闲;若否,则当前逻辑簇的所有簇不连续空闲。

步骤144:若是,则进行将文件数据存入所有簇连续空闲的逻辑簇中的步骤。

具体地,当当前逻辑簇的所有簇连续空闲时,则将文件数据存储至所有簇连续空闲的逻辑簇中,保证文件在写过程中分配到的磁盘空间是连续的,使文件数据在磁盘空间地址尽可能连续,减少文件碎片,从而保证磁盘文件读写速度。

步骤146:若否,则根据预设顺序获取下一个逻辑簇作为当前逻辑簇,并返回检测当前逻辑簇的所有簇是否连续空闲的步骤。

具体地,若当前逻辑簇的所有簇不连续空闲,则按照预设顺序检测磁盘的其余逻辑簇的所有簇是否连续空闲。

在一个实施例中,步骤146之前,还包括:根据预设顺序判断是否存在逻辑簇未进行检测;若是,则进行根据预设顺序获取下一个逻辑簇作为当前逻辑簇,并返回检测当前逻辑簇的所有簇是否连续空闲的步骤;若否,则输出存储失败提示信息。

具体地,磁盘中包括有多个逻辑簇,当磁盘中还有逻辑簇未进行检测时,则根据预设顺序获取下一个逻辑簇作为当前逻辑侧,继续进行检查,当磁盘中所有逻辑簇都已经检测过,则说明申请空间失败,输出存储失败提示信息,可以理解,输出存储失败提示信息的方式并不唯一,可以语音提示、在显示屏中对话框显示失败信息或用显示器显示等等。

步骤s150:当磁盘存在逻辑簇的所有簇连续空闲时,将文件数据存入所有簇连续空闲的逻辑簇中。

在一个实施例中,如图4所示,为一个比较详细的实施例,获取文件数据、文件数据的空间长度,磁盘的空闲空间以及磁盘的连续空闲空间,检测文件数据空间长度是否小于或等于磁盘空闲空间长度,若是,则检测磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间,若否,则输出存储失败提示信息,若磁盘存在长度大于或等于文件数据的空间长度的连续空闲空间,则将文件数据存入长度大于或等于文件数据的空间长度的连续空闲空间,若否,检测当前逻辑簇的第一个簇是否空闲,当当前逻辑簇的第一个簇不空闲时,根据预设顺序判断是否存在逻辑簇未进行检测,若是,则进行根据预设顺序获取下一个逻辑簇作为当前逻辑簇,并返回检测当前逻辑簇的第一个簇是否空闲的步骤,若否,则输出存储失败提示信息,当所述当前逻辑簇的第一个簇空闲时,则检测当前逻辑簇的剩余簇是否连续空闲,若是,将文件数据存入所有簇连续空闲的逻辑簇中,若否,则输出存储失败提示信息。

上述磁盘文件存储方法,通过获取文件数据、文件数据的空间长度以及磁盘的连续空闲空间,检测磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间,若是,则将文件数据存入长度大于或等于文件数据的空间长度的连续空闲空间,若否,则检测磁盘是否存在逻辑簇的所有簇连续空闲,当磁盘存在逻辑簇的所有簇连续空闲时,将文件数据存入所有簇连续空闲的逻辑簇中,从而为文件数据分配到连续的空闲空间,减少了磁盘碎片,从而有效提高磁盘文件读写速度,读写效率高。

在一个实施例中,如图5所示,一种磁盘文件存储系统,包括第一获取模块110、第一检测模块120、第一存储模块130、第二检测模块140和第二存储模块150,第一获取模块110连接第一检测模块120,第一检测模块120连接第一存储模块130,第一存储模块130连接第二检测模块140,第二检测模块140连接第二存储模块150。

在一个实施例中,第一获取模块110用于获取文件数据、文件数据的空间长度以及磁盘的连续空闲空间。

在一个实施例中,第一检测模块120用于检测磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间。

在一个实施例中,磁盘文件存储系统还包括第二获取模块和检测模块。

具体地,第二获取模块用于在第一检测模块120检测磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间之前,获取磁盘空闲空间长度,检测模块用于检测文件数据空间长度是否小于或等于磁盘空闲空间长度;若是,则控制第一检测模块120检测磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间;若否,则输出存储失败提示信息。

具体地,当磁盘上的物理空闲空间长度足够时,则需要检测磁盘上的连续空闲空间长度是否足够,这样能给文件数据分配到连续的空间空间,有效减少文件碎片,从而保证磁盘文件读写速度。当文件数据空间长度大于磁盘上的物理空闲空间长度时,则直接输出存储失败提示信息,能有效提高文件数据存储的效率。

在一个实施例中,第一存储模块130用于在磁盘存在长度大于或等于文件数据的空间长度的连续空闲空间时,将文件数据存入长度大于或等于文件数据的空间长度的连续空闲空间。

当文件数据的空间长度小于或等于磁盘的连续空闲空间足够时,则直接将文件数据存入磁盘的连续空闲空间中,给文件数据分配到连续的空间空间,有效减少文件碎片,从而保证磁盘文件读写速度。

在一个实施例中,第二检测模块140用于在磁盘不存在长度大于或等于文件数据的空间长度的连续空闲空间时,检测磁盘是否存在逻辑簇的所有簇连续空闲。

具体地,一个文件在磁盘上的空间占用是以逻辑簇为单位,一个逻辑簇包括多个簇。在一个实施例中,磁盘的逻辑簇为多个,第二检测模块140包括第一检测单元、第一存储单元和逻辑簇处理单元。

具体地,第一检测单元用于检测当前逻辑簇的所有簇是否连续空闲。

具体地,磁盘上有多个分区,每个分区都有对应的fat表,查询每一个逻辑簇对应的fat表,若fat表中的对应簇的位置数值为0,则表示对应簇空闲,若fat表中的对应簇的位置数值为非0,则表示对应簇被占用。

在一个实施例中,第一检测单元包括第二检测单元和第三检测单元。

第二检测单元用于检测当前逻辑簇的第一个簇是否空闲;当当前逻辑簇的第一个簇不空闲时,则当前逻辑簇的所有簇不连续空闲。

具体地,当当前逻辑簇的第一个簇不空闲时,则说明当前逻辑簇的所有簇不连续空闲,剩余簇则不需要进行检测了,直接按照预设顺序获取下一个逻辑簇作为当前逻辑簇进行检测,有效优化了检测速度,提高了文件存储效率。

第三检测单元用于当当前逻辑簇的第一个簇空闲时,则检测当前逻辑簇的剩余簇是否连续空闲;若是,则当前逻辑簇的所有簇连续空闲;若否,则当前逻辑簇的所有簇不连续空闲。

第一存储单元用于当当前逻辑簇的所有簇连续空闲时,控制第二存储模块150将文件数据存入所有簇连续空闲的逻辑簇中。

具体地,当当前逻辑簇的所有簇连续空闲时,则将文件数据存储至所有簇连续空闲的逻辑簇中,保证文件在写过程中分配到的磁盘空间是连续的,使文件数据在磁盘空间地址尽可能连续,减少文件碎片,从而保证磁盘文件读写速度。

逻辑簇处理单元用于当当前逻辑簇的所有簇不连续空闲时,根据预设顺序获取下一个逻辑簇作为当前逻辑簇,并控制第一检测单元再次检测当前逻辑簇的所有簇是否连续空闲。

具体地,若当前逻辑簇的所有簇不连续空闲,则按照预设顺序检测磁盘的其余逻辑簇的所有簇是否连续空闲。

在一个实施例中,第二检测模块140还包括逻辑簇判断单元。

逻辑簇判断单元用于在当前逻辑簇的所有簇不连续空闲时,逻辑簇处理单元根据预设顺序获取下一个逻辑簇作为当前逻辑簇之前,根据预设顺序判断是否存在逻辑簇未进行检测;若是,则控制逻辑簇处理单元根据预设顺序获取下一个逻辑簇作为当前逻辑簇;若否,则输出存储失败提示信息。

具体地,磁盘中包括有多个逻辑簇,当磁盘中还有逻辑簇未进行检测时,则根据预设顺序获取下一个逻辑簇作为当前逻辑侧,继续进行检查,当磁盘中所有逻辑簇都已经检测过,则说明申请空间失败,输出存储失败提示信息,可以理解,输出存储失败提示信息的方式并不唯一,可以语音提示、在显示屏中对话框显示失败信息或用显示器显示等等。

在一个实施例中,第二存储模块150用于当磁盘存在逻辑簇的所有簇连续空闲时,将文件数据存入所有簇连续空闲的逻辑簇中。

上述磁盘文件存储系统,第一获取模块110获取文件数据、文件数据的空间长度以及磁盘的连续空闲空间,第一检测模块120检测磁盘是否存在长度大于或等于文件数据的空间长度的连续空闲空间,第一存储模块130用于若是,则将文件数据存入长度大于或等于文件数据的空间长度的连续空闲空间,第二检测模块140用于若否,则检测磁盘是否存在逻辑簇的所有簇连续空闲,第二存储模块150用于当磁盘存在逻辑簇的所有簇连续空闲时,将文件数据存入所有簇连续空闲的逻辑簇中,从而为文件数据分配到连续的空闲空间,减少了磁盘碎片,从而有效提高磁盘文件读写速度,读写效率高。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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