一种文件系统的存储方法及系统与流程

文档序号:11803221阅读:257来源:国知局
一种文件系统的存储方法及系统与流程
本发明涉及计算机文件系统技术领域,更具体的说,涉及文件系统的存储方法及系统。

背景技术:
FATFS(FileAllocationTableFileSystem)是微软公司推出著名文件系统,因其简洁、高效、易用等特性,长期占据着垄断地位。然而随着多媒体行业的发展,大容量硬盘的出现,FATFS略显力不从心。微软也因此推出了FAT16、FAT32及exFAT等文件系统来适应的新的需求。然而FAT文件分配表结构并没有革命性变化,文件无论大小,都采用同一FAT文件分配表,统一的簇的大小。其中,一个簇由1或N个扇区组成,是文件存储的最小单位。采用现有的存储文件的方式,用户在对文件系统格式化时,如果设置大的簇来适应大文件,那么会存在浪费空间的问题。因为一个簇只能被一个文件占用,如果小文件存储在空间很大的簇中,那么该簇大量的剩余空间因无法存储其他文件就会被浪费掉,所以采用设置大簇的方式来存储大量小文件,会造成浪费空间的情况。如果设置小的簇来适应小文件,那么大文件需要存储在多个小簇中,所以会产生巨大的FAT文件分配表,从而增加了簇链的搜索时间,导致造成内存消耗增加,性能下降。对于一个复杂的文件系统,不同大小的文件必然同时存在。因此,如何解决上述技术缺陷,成为目前最需要解决的问题。

技术实现要素:
有鉴于此,本发明的设计目的在于,提供一种文件系统的存储方法及系统,以节省文件系统的空间,降低对内存的消耗,而且提高文件系统的性能。本发明实施例是这样实现的:一种文件系统的存储方法,包括:将获取到的文件存储在簇的多个子簇中,所述子簇为在磁盘的每个簇中被预先均匀划分出来的;当所述簇中存储的文件数为一个时,则在文件分配表中记录所述簇对应的下一个子簇号;当所述簇中存储的文件数大于一个时,则在该簇中建立一个记录着所述簇的每个子簇对应的下一个子簇号的文件分配从表,并在所述文件分配表中记录该簇具有所述文件分配从表。优选地,在上述的文件系统的存储方法中,当所述簇不存在对应的下一个子簇号时,则在所述文件分配表中记录所述簇对应的下一个子簇号为空。优选地,在上述的文件系统的存储方法中,当所述簇的子簇不存在对应的下一个子簇号时,则在所述文件分配从表中记录所述子簇对应的下一个子簇号为空。优选地,在上述的文件系统的存储方法中,当所述簇中存储的文件数为一个,且删除所述簇的子簇中的文件时,则在所述文件分配从表中记录所述簇的子簇为未分配状态。优选地,在上述的文件系统的存储方法中,当所述簇中存储的文件数大于一个,且删除所述簇的子簇中的文件时,则在所述文件分配从表中记录所述簇的子簇为未分配状态。优选地,在上述的文件系统的存储方法中,当所述簇中存储的文件数大于一个,且删除所述簇中的所有文件时,则删除所述文件分配从表,且在所述文件分配表中记录所述簇为未分配状态。优选地,在上述的文件系统的存储方法中,当在所述磁盘中存储一个文件,且所述磁盘的簇中存在文件分配从表时,则将所述文件优先存储至所述文件分配从表所在的簇中。优选地,在上述的文件系统的存储方法中,所述子簇占据一个扇区的空间。一种FAT文件系统的存储系统,包括:子簇分配模块,用于在磁盘的每个簇中预先均匀的划分出多个子簇;存储模块,用于将获取到的文件存储在簇的多个子簇中;文件分配表记录模块,用于当所述簇中存储的文件数为一个时,则在文件分配表中记录所述簇对应的下一个子簇号;当所述簇中存储的文件数大于一个时,则在所述文件分配表中记录该簇具有所述文件分配从表;文件分配从表建立模块,用于当所述簇中存储的文件数大于一个时,则在该簇中建立一个记录着所述簇的每个子簇对应的下一个子簇号的文件分配从表。与现有技术相比,本实施例提供的技术方案具有以下优点和特点:在本发明提供的方案中,文件可以存储在簇的子簇中,并且如果将两个以上的文件存储在一个簇中时,只需在该簇中建立一个文件分配从表,并记录在文件分配表中,这样就可以通过文件分配表访问到文件分配从表,从而访问到每个簇的子簇,所以本发明可以将磁盘中的每个簇的空间都充分利用起来;而且,通过在簇中建立文件分配从表的方式,不会产生巨大的文件分配表,从而不会增加簇链的搜索时间。因此,本发明提供的方案不仅充分的利用了磁盘的空间,而且有效降低了簇链搜索的时间。附图说明为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明所提供的一种文件系统的存储方法的流程图;图2为本发明所提供的一种磁盘整体存放效果示意图;图3为本发明所提供的一种文件分配表的示意图;图4为本发明所提供的一种文件分配从表的示意图;图5为本发明所提供的一种文件系统的存储系统的模块图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例提供了一种文件系统的存储方法,包括:将获取到的文件存储在簇的多个子簇中,所述子簇为在磁盘的每个簇中被预先均匀划分出来 的;当所述簇中存储的文件数为一个时,则在文件分配表中记录所述簇对应的下一个子簇号;当所述簇中存储的文件数大于一个时,则在该簇中建立一个记录着所述簇的每个子簇对应的下一个子簇号的文件分配从表,并在所述文件分配表中记录该簇具有所述文件分配从表。由于上述文件系统的存储方法的具体实现存在多种方式,下面通过具体实施例进行详细说明:请参见图1所示,图1所示的为一种文件系统的存储方法的流程图,该方法包括:步骤S11、将获取到的文件存储在簇的多个子簇中,所述子簇为在磁盘的每个簇中被预先均匀划分出来的;在步骤S11中,在使用磁盘的空间之前,需要对磁盘进行格式化。在进行格式化时,需要确定好每子簇的扇区数,每簇的子簇数,将在簇内划分出来的空间称为子簇。为了达到最好的效果,通常每子簇1个扇区,每簇的子簇数=扇区字节数/元素字节数。格式化后,并不存在文件分配从表。步骤S12、当所述簇中存储的文件数为一个时,则在文件分配表中记录所述簇对应的下一个子簇号;在步骤S12中,如果在簇中所存储的文件只有一个,不管这个文件是否完全占用了整个簇的空间,那么都需要在文件分配表中记录这个簇对应的下一个子簇号;如果这个簇中的文件并没有对应的下一个子簇号,那么在文件分配表中记录这个簇对应的为空。步骤S13、当所述簇中存储的文件数大于一个时,则在该簇中建立一个记录着所述簇的每个子簇对应的下一个子簇号的文件分配从表,并在所述文件分配表中记录该簇具有所述文件分配从表。在步骤S13中,如果在簇中所存储的文件大于一个时,假设在簇中存储两个文件,那么在文件分配表中就没有办法记录这两个文件分别指向的两个子簇号,因为文件分配表中记录的只是一个簇与一个子簇的对应关系,而无法记录这个簇中的两个子簇与另外两个子簇的对应关系。所以在文件分配表中一个簇只能指向一个子簇,无法指向两个子簇,这是由文件分配表的结构所决定的。所以如果希望能够记录下簇中的两个子簇能够分别对应另外两个子簇,那么需要在该簇中建立一个文件分配从表,用这个文件分配从表来记 录该簇中每个子簇对应的下一个子簇号。当在该簇中建立文件分配从表以后,需要在文件分配表中记录该簇中具有文件分配从表。在图1所示的实施例中,文件可以存储在簇的子簇中,并且如果将两个以上的文件存储在一个簇中时,只需在该簇中建立一个文件分配从表,并记录在文件分配表中,这样就可以通过文件分配表访问到文件分配从表,从而访问到每个簇的子簇,所以本发明可以将磁盘中的每个簇的空间都充分利用起来;而且,通过在簇中建立文件分配从表的方式,不会产生巨大的文件分配表,从而不会增加簇链的搜索时间。因此,本发明提供的方案不仅充分的利用了磁盘的空间,而且有效降低了簇链搜索的时间。在图1所示的实施例中,当所述簇不存在对应的下一个子簇号时,则在所述文件分配表中记录所述簇对应的下一个子簇号为空。当所述簇的子簇不存在对应的下一个子簇号时,则在所述文件分配从表中记录所述子簇对应的下一个子簇号为空。当所述簇中存储的文件数为一个,且删除所述簇的子簇中的文件时,则在所述文件分配从表中记录所述簇的子簇为未分配状态。当所述簇中存储的文件数大于一个,且删除所述簇的子簇中的文件时,则在所述文件分配从表中记录所述簇的子簇为未分配状态。当所述簇中存储的文件数大于一个,且删除所述簇中的所有文件时,则删除所述文件分配从表,且在所述文件分配表中记录所述簇为未分配状态。当在所述磁盘中存储一个文件,且所述磁盘的簇中存在文件分配从表时,则将所述文件优先存储至所述文件分配从表所在的簇中。下面通过具体事例进行详细说明,请参见图2至图4所示,图2所示的为磁盘整体存放效果图,图3所示的为文件分配表的示意图,图4所示的为文件分配从表的示意图。在图2至图4所示的实施例中,存在两种类型的文件分配表,其中,新增类型的文件分配表是动态创建的。FATFS文件系统原有的表可以叫文件分配表,新增的叫文件分配从表。在图2至图4所示的实施例中,为了便于分析说明,在从这里开始,我们假定一个扇区为16字节,一个子簇就一个扇区。而一个簇有4个扇区,即4个子簇。而整个磁盘假定有6个簇,文件分配表中每个元素32位。6个簇约需2个扇区存放,假定就放在第0簇的后两个扇区。图2展示了整体存放 效果,其中根目录占据第1簇与第3簇,文件1占据第2簇及第4簇中第0子簇。文件2占据第4簇第1子簇、第2子簇,及第5簇。图3所示的为文件分配表,文件分配表中主要是一个单向链表,每个元素的位置对应一个簇,其最高位叫做文件分配从表标志,表示本簇是否有文件分配从表;其余位指向下一个子簇,叫簇索引。在图3所示的文件分配表中,每个元素的最高位(b31)为文件分配从表标志,低位(b0-b30)为簇索引。在图3中,上面一行即为00001000,这八个位代表当前的簇是否存在文件分配从表,其中,0表示不存在文件分配从表,1表示存在文件分配从表。那么第5位,即第四簇中存在文件分配从表,所以从左向右看的第五位的数字为1,结合图2来看确实是在第四簇中的第三子簇存在文件分配从表。另外,在图3所示的每个方框表示一个32位的元素,方框内,上面的数字表示本簇是否存在文件分配从表,其中0表示不存在文件分配从表。下面的数字指向下一个子簇,其中0表示本簇未分配,-1表示已分配或文件最后簇,-2表示没有真实的簇对应或坏簇。图4所示的为文件分配从表,文件分配从表也是一个单向链表,每个元素的位置代表一个子簇,其值指向下一个子簇。子簇属于某个簇,文件分配从表存储在其簇内最后的子簇上。一个文件分配从表占据一个子簇,表示所属簇内的链式关系。其中,图4中的每个方框表示一个32位的元素,方框内数字表示下一个子簇的索引,其中0表示本子簇未分配,-1表示已分配或文件最后簇。在图4的第一个方框内为-1,表示文件1为最后簇;第二个方框为18,表示第17子簇内的文件2的簇索引为第18子簇,即第二个方框是第17子簇,第17子簇的簇索引为第18子簇;第三个方框为20,表示第18子簇内的文件2的的簇索引为第20子簇,即第三个方框是第18子簇,第18子簇的簇索引为第20子簇;第四个方框为-1,该第19子簇存放的为文件分配从表,且正好为最后簇,所以为-1。通过上述实施例可以看出,本发明提供的文件分配表与文件分配从表的有机结合,协调工作,实现簇链的遍历。首先文件的目录信息(DIRENTRY)说明了这个文件的第一个子簇的簇号,据这个子簇编号可计算出所归属的簇。簇与文件分配表的元素对应,可以在文件分配表中检查簇的子表是否存在。 如果这个簇的文件分配从表不存在,则整个簇为文件所使用,下一簇是文件分配表中的簇索引;否则,则在文件分配从表中搜索下一个簇。在图2至图4所示的实施例中,还可以对剩余空间进行计算。首先,在文件分配表中扫描所有簇,如果为0表示这个簇为空闲;当存在文件分配从表时,再文件分配从表中扫描所有子簇,如果为0表示这个子簇为空闲。这样便可以计算它的剩余空间。在图2至图4所示的实施例中,新建一个文件或文件复制时,需要为其分配一定大小的空间。推荐分配方法如下:首先,所需空间被切割为N个簇。为其在文件分配表中分配这N个簇。这个过程与原FATFS大致相同。其次,簇切割余下的子簇,应通过文件分配表搜寻所有文件分配从表,在文件分配从表中为其分配子簇。如果无法从现有的文件分配从表分配余下的子簇,需要在一个空白簇创建文件分配从表,然后分配。在图2至图4所示的实施例中,删除文件时,需要先遍历文件链,释放对其分配的簇及子簇,在子簇释放过程中,如果文件分配从表内所有子簇都空了,则文件分配从表被删除,文件分配表中的文件分配从表标志置0。另外,上述已讲解了双FAT表的数据结构,逻辑及工作原理。基于上述已可以改造出一个双FAT表的文件系统了。但具体实施时逻辑与流程将更复杂,需要考虑更多的情况,进行更深的优化、提供更强大的功能。例如:在文件分配表中,如果文件分配从表标志为1,则簇索引可以转义,表示本簇中空白子簇的数量,这样可以加快分析速度。增大文件:此应当分析此文件对应的最后簇是否有空白子簇,如果有应该先分配这些子簇。然后再按新建文件的规则分配空间。减小文件:减小后文件的尾簇对应的簇会有更多的空闲子簇,如果该簇没有文件分配从表,应该创建文件分配从表,并在文件分配从表中反映这些空闲子簇。虚拟U盘:分析文件分配表与及所有文件分配从表,将双FAT表变为一个大的FAT表,转化为当前流行操作系统(如Windows等)能识别的文件系统。请参见图5所示,图5所示的为一种FAT文件系统的存储系统,该存储系统1包括:子簇分配模块11,用于在磁盘2的每个簇中预先均匀的划分出多个子簇;存储模块12,用于将获取到的文件存储在簇的多个子簇中;文件分配表记录模块13,用于当所述簇中存储的文件数为一个时,则在文件分配 表中记录所述簇对应的下一个子簇号;当所述簇中存储的文件数大于一个时,则在所述文件分配表中记录该簇具有所述文件分配从表;文件分配从表建立模块14,用于当所述簇中存储的文件数大于一个时,则在该簇中建立一个记录着所述簇的每个子簇对应的下一个子簇号的文件分配从表。需要说明的是,图1至图5所示的实施例只是本发明所介绍的优选实施例,本领域技术人员在此基础上,完全可以设计出更多的实施例,因此不在此处赘述。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1