一种在文件分配表中给文件分配空间的方法及装置的制作方法

文档序号:6463786阅读:162来源:国知局
专利名称:一种在文件分配表中给文件分配空间的方法及装置的制作方法
技术领域
本发明涉及计算机原理领域,尤其涉及一种在文件分配表中给文件分配空 间的方法及装置。
背景技术
在FAT (文件分配表)文件系统中,会将磁盘空间按一定数目的扇区为单 位进行划分,这样的单位称为簇。
FAT文件系统有两种给文件分配空间策略单簇分配和簇组分配。
相对于这两种策略,有两个变量clustAllocStart和groupAllocStart来分别记 录单簇分配和簇组分配开始的簇数。在给文件分配空间时,首先从clustAllocStart 或者groupAllocStart开始查找是否有满足条件的空闲簇,如果查找不到,再从 FAT表头开始查找满足条件的空闲簇。
上面的查找空闲蔟或簇组的操作都是通过读盘操作实现的,因此在慢速磁 盘(如电子硬盘,FLASH)上,在磁盘空间快要满的时候,给文件分配空间将 会变得非常耗时。以1G的电子硬盘为例,1G的电子硬盘的FAT表占用的空间 为1M,在快满的时候,每分配一次差不多都要把整个FAT表读一遍,按照1M/S 的速度,每分配一次耗用的时间差不多为1S,读的速度可能快些,按照2M/S 算的话,每分配一次也要0.5S。
因此,上述的缺陷已经成为使用慢速磁盘的障碍。

发明内容
鉴于上述的分析,本发明的目的在于提供一种在文件分配表中给文件分配 空间的方法及装置,用以解决现有技术中存在的通过读盘操作查找空闲簇或簇 组速度慢的问题。
本发明的目的主要是通过以下技术方案实现的
本发明提供了一种在文件分配表中给文件分配空间的方法,预先设置有一
块内存空间,用于存放磁盘的空闲空间,所述方法包括
步骤A:加载文件分配表时,将磁盘的空闲空间映射到该内存空间; 步骤B:当需要给文件分配空间时,直接到该内存空间中查找待分配的空闲
空间;或者,当从磁盘上删除文件时,将释放出来的空闲空间映射到该内存空间。
进一步地,预定义有空闲簇链表及空闲簇链表项对应的结构体、空闲簇组 链表及空闲簇组链表项对应的结构体,则所述步骤A具体包括
步骤A1:扫描文件分配表,当找到空闲簇时,判断该空闲簇的相邻簇是否 也为空闲簇,如果是,执行步骤A2,否则执行步骤A3;
步骤A2:4艮据该空闲簇和其相邻簇构成的连续空闲空间与簇组的大小关系, 决定将该连续空间加到空闲簇链表或者加到空闲簇组链表;
步骤A3:直接将该空闲簇加到空闲簇链表。
进一步地,所述步骤A2具体包括
判断该空闲簇和其相邻簇构成的连续空闲空间是否大于簇组如果比簇组 大,填充空闲簇组链表项对应的结构体,将该连续空闲空间加到空闲簇组链表, 否则填充空闲簇链表项对应的结构体,将该连续空闲空间加到空闲簇链表。
进一步地,所述步骤B具体包括当需要给文件分配空间时,根据给文件分配的是簇或簇組修改所述空闲簇
组链表或空闲簇链表;或者,
当从》兹盘上删除文件时,将归还的簇或簇组的信息填充到相应的结构体中, 并将该结构体按照预定策略插入到相应的空闲簇链表或空闲簇组链表中。
进一步地,所述空闲簇组链表项对应的结构体包括空闲簇组起始簇、下 一个空闲簇组链表项的地址;所述空闲簇链表对应的结构体包括空闲簇的起 始簇、从起始簇可供连续使用的簇数、下一个空闲簇链表项的地址。
本发明还提供了 一种在文件分配表中给文件分配空间的装置,所述装置包 括映射单元、存储单元和查找单元,其中,
所述存储单元,设置于内存中,用于存放映射到其中的^f兹盘的空闲空间;
所述映射单元,当加载文件分配表时,所述映射单元用于根据磁盘的使用 情况,将磁盘的空闲空间映射到所述存储单元;当从磁盘上删除文件时,所述 映射单元还用于将释放出来的空闲空间映射到所述存储单元;
所述查找单元,用于在需要给文件分配空间时,到所述存储单元中查找待 分配的空闲空间。
本发明有益效果如下本发明通过把查找空闲空间的4喿作由读盘操作变为 内存操作,从而极大地提高给文件分配空间的效率。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分的从说明 书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可 通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获
4曰付。


图1为本发明所述方法的流程示意图; 图2为一段FAT表的值;
图3为参照图2中FAT表的值建立的空闲簇链表的示意图; 图4为参照图2中FAT表的值建立的空闲簇组链表的示意图; 图5参照图4给文件分配一个簇组后的空闲簇组链表的示意图; 图6为参照图3给文件分配一簇后的空闲簇链表的示意图; 图7为图5归还一个簇组后的空闲蔟组链表的示意图; 图8为参照图6归还一簇后的空闲簇链表的示意图; 图9为参照图8归还一簇后的空闲簇链表的示意图; 图10为参照图7归还一蔟后的空闲蔟组链表的示意图; 图11为参照图9归还一簇后的空闲簇链表的示意图; 图12为本发明所述装置的结构示意图。
具体实施例方式
本发明提出一种在FAT文件系统中给文件分配空间的方法及装置,其基本 思想是把查找空闲空间的操作由读盘操作变为内存操作,从而极大地提高给文 件分配空间的效率。
下面结合附图来具体描述本发明的优先实施例,其中,附图构成本申请一 部分,并与本发明的实施例一起用于阐释本发明的原理。
首先结合附图对本发明所述方法进行详细说明。
如图1所示,图1为本发明实施例所述方法的流程示意图,具体可以包括 以下步骤
步骤101:预先申请一块内存空间用于存放映射的磁盘的空闲空间;同时, 根据FAT表的使用情况和簇组的大小建立两个链表空闲簇链表和空闲簇组链表,并定义空闲簇链表项对应的结构体和空闲簇組链表项对应的结构体,所述 结构体分别用于存储空闲簇组链表项和空闲簇链表项的信息;本发明中,可以
依据起始簇的大小建立有序的空闲簇链表。
步骤102:当加载FAT表时,根据磁盘的使用情况,把磁盘的空闲空间映 射到该内存空间;具体的说就是,扫描整个FAT表,如果找到空闲簇(对应的 FAT表项为O),判断其相邻的簇是否也是空闲,如果其相邻的簇不是空闲簇, 填充空闲簇链表项对应的结构体,把该空闲簇加到空闲簇链表。如果其相邻的 簇是空闲簇,则要判断该簇和其相邻的簇所组成的连续空闲空间是否比簇组大, 如果比簇组大,填充空闲簇組链表项对应的结构体,把该连续空闲空间加到空 闲簇组链表;否则填充空闲簇链表项对应的结构体,把该连续空闲空间加到空 闲簇链表。
步骤103:当需要给文件分配空间时,直接到该内存空间中查找可以分配的 空闲空间;具体的说就是,当给文件分配空间时,如果釆用单簇分配,即给文 件分配的是一个簇组,直接从空闲簇组链表头取空闲簇组,同时把表头从空闲 簇组链表摘除。如果采用簇组分配,即给文件分配的是一簇,从空闲簇链表头 取空闲簇,同时把表头的从起始簇可以连续使用的簇数减1,如果从起始簇可以 连续使用的簇数减1后变为0,则把表头从空闲簇链表摘除。
这里,采用单簇分配还是簇组分配是才艮据分配的文件的大小及义兹盘的空闲 空间决定的,如果分配的字节数大于簇组的大小且在磁盘上能找到不小于簇組 大小的连续簇,则采用簇组分配,否则采用单簇分配。
或者,
步骤104:当从磁盘上删除文件时,把释放出来的空闲空间映射到该内存空间;具体的说就是,如果归还的空闲空间是一个簇组,则把该簇组的信息填充
到空闲簇组对应的结构体后,直接放到空闲簇组链表的尾部。如果归还的是一 簇,需要查找空闲簇链表,判断归还的簇是否可以和空闲簇链表中已经存在的 空闲簇组成连续的空间。如果不能组成连续的空间,则把该簇的信息填充到空
闲簇对应的结构体,把该结构体插入到空闲簇链表中;如果能够组成连续的空 间,则要判断组成的连续空间是否比簇组大,如果没有簇组大,则和相邻的空 闲簇组成连续的空间,不需要向空闲簇链表加入新项;如果比簇组大,需要从 该连续空间中摘除一个簇组加入到空闲簇组链表的尾部。
本发明中,空闲簇组链表项对应的结构体包括空闲簇组起始簇、下一个 空闲蔟组链表项的地址;空闲簇链表项对应的结构体包括空闲簇的起始簇、 从起始簇可以连续使用的簇数、下一个空闲簇链表项的地址。
为了进一步理解本发明,下面举例进行说明。
首先,定义两个结构体,分别用于存储空用簇组表项和空闲簇表项信息 typedef struct FatGroupEntryCtl
WORD32 dwStartClust; /*空闲簇组的起始簇*/
struct FatGroupEntryCtl *ptNext; /*指向下一个空闲簇组表项*/
} T_FatGroupEntryCtl; typedef struct FatEntryCtl
{
WORD32 dwStartClust;/*空闲簇的起始簇*/
WORD32 dwAvailCount; /*从起始簇开始可以连续使用的簇数*/structFatEntryCtl*ptNext; /*指向下一个空闲簇表项*/ )T一FatEntryCtl;
以上T—FatGroupEntryCtl是空闲簇组链表项对应的结构体,包括空闲簇组的 起始簇和下一个空闲簇组链表项的地址;T一FaffintryCtl是空闲簇链表项对应的 结构体,包括空闲蔟的起始蔟、从起始簇开始可以连续使用的簇数和下一个空 闲簇链表项的地址。
根据上面定义的结构体,在加载FAT文件系统的时候,依据FAT表的使用 情况和簇组的大小建立空闲簇组链表和空闲簇4连表。
如图2到图4所示,图2为一段FAT表的值,如果簇组的大小为3,则建 立的空闲簇链表如图3所示,建立的空闲簇组链表如图4所示。
当建立空闲簇组链表和空闲簇链表后,再给文件分配空间就可以通过操作 这两个链表实现。如果给文件分配簇组,直接从空闲簇组链表头取空闲簇组, 同时把表头从空闲簇组链表摘除。参照图4,给文件分配一个簇组后空闲簇组链 表如图5所示。如果给文件分配的是一簇,从空闲簇链表头取空闲簇,同时把 表头的从起始簇可以连续使用的簇数减1,如果从起始簇可以连续使用的簇数减 l后变为O,则把表头从空闲簇链表摘除。参照图3,给文件分配一簇后空闲簇 链表如图6所示。
当从磁盘上删除文件时,如果归还的是一个簇组,则把该簇组的信息填充 到空闲簇组对应的结构体后,直接放到空闲簇组链表的尾部。参照图5,把C1 中分配出去的簇组再归还后的空闲簇组链表如图7所示。如果归还的是一簇, 需要查找空闲簇链表,判断归还的簇是否可以和空闲簇链表中已经存在的空闲 簇组成连续的空间。如果不能组成连续的空间,则把该簇的信息填充到空闲簇对应的结构体,把该结构体插入到空闲簇链表中。参照图6,把C2中分西己出的 簇2归还回空闲簇链表,由于与其相邻的第3簇已经被分配出去,所以不能组 成连续的空间。归还后的空闲簇链表如图8所示(这里采用优选方案,空闲簇 链表按照起始簇大小排序)。如果能够组成连续的空间,则要判断组成的连续空 间是否比簇组大,如果没有簇组大,则和相邻的空闲簇组成连续的空间,不需 要向空闲簇链表加入新项。参照图8,把簇3归还后的空闲簇链表如图9所示。 如果比簇组大,需要从该连续空间中摘除一个簇组加入到空闲簇组链表的尾部。 参照图7和图9,把簇4归还后的空闲簇组链表和空闲簇链表分别如图10、图 11所示。
下面结合附图对本发明所述装置进行详细说明。
如图12所示,图12为本发明所述装置的结构示意图,具体包括存储单元、 映射单元和查找单元,下面对各个单元分别进4亍详细说明。
存储单元,从内存中划分出来的一块内存空间,用于存放映射到其中的磁 盘的空闲空间;根据FAT表的使用情况和簇组的大小建立两个链表空闲簇链 表和空闲簇组链表,并定义空闲簇链表项对应的结构体和空闲簇组链表项对应 的结构体。
映射单元,当加栽文件分配表时,所述映射单元用于根据磁盘的使用情况, 将磁盘的空闲空间映射到所述存储单元;映射单元扫描整个FAT表,如果找到 空闲簇(对应的FAT表项为0),判断其相邻的簇是否也是空闲,如果其相邻的 簇不是空闲簇,填充空闲簇链表项对应的结构体,把该空闲簇加到空闲簇链表。 如果其相邻的簇是空闲簇,则要判断该簇和其相邻的簇所组成的连续空闲空间 是否比簇组大,如果比簇组大,填充空闲簇组链表项对应的结构体,把该连续空闲空间加到空闲簇组链表;否则填充空闲簇链表项对应的结构体,把该连续 空闲空间加到空闲蔟链表。
当从^f兹盘上删除文件时,所述映射单元用于将释放出来的空闲空间映射到 所述存储单元;具体的说就是,如果归还的空闲空间是一个簇组,则把该簇组 的信息填充到空闲簇组对应的结构体后,直接放到空闲簇组链表的尾部。如果 归还的是一簇,需要查找空闲簇链表,判断归还的簇是否可以和空闲簇链表中 已经存在的空闲簇组成连续的空间。如果不能组成连续的空间,则把该簇的信 息填充到空闲簇对应的结构体,把该结构体插入到空闲簇链表中;如果能够组 成连续的空间,则要判断组成的连续空间是否比簇组大,如果没有簇组大,则 和相邻的空闲簇组成连续的空间,不需要向空闲簇链表加入新项;如果比簇组 大,需要从该连续空间中摘除一个簇组加入到空闲簇组链表的尾部。
查找单元,用于在需要给文件分配空间时,到所述存储单元中查找可以分 配的空闲空间;具体的说就是,当给文件分配空间时,如果采用单簇分配,即 给文件分配的是一个簇组,直接从空闲簇组链表头取空闲簇组,同时把表头从 空闲蔟组链表摘除。如果采用簇组分配,即给文件分配的是一簇,从空闲簇链 表头取空闲簇,同时把表头的从起始簇可以连续使用的簇数减1,如果从起始簇 可以连续使用的簇数减1后变为0,则把表头从空闲簇链表摘除。
关于本发明实施例所述装置的具体实现过程,由于在以上方法的叙述中已 作详细说明,此处不再赘述。
综上所述,本发明提供了一种在文件分配表中给文件分配空间的方法及装 置,通过把查找空闲空间的操作由读盘操作变为内存操作,而内存操作要比读 盘操作快得多,从而极大地提高给文件分配空间地效率。同时,本发明提出的FAT文件系统中给文件分配空间的方法只是把空闲簇映射到内存,分配出去的 FAT表项都是存在^f兹盘上,因此即使在操作FAT表的过程中系统发生异常重启 也不会出现FAT表不一致,进而导致文件系统崩溃的情况。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局 限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易 想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护 范围应该以权利要求书的保护范围为准。
权利要求
1. 一种在文件分配表中给文件分配空间的方法,其特征在于,预先设置有一块内存空间,用于存放磁盘的空闲空间,所述方法包括步骤A加载文件分配表时,将磁盘的空闲空间映射到该内存空间;步骤B当需要给文件分配空间时,直接到该内存空间中查找待分配的空闲空间;或者,当从磁盘上删除文件时,将释放出来的空闲空间映射到该内存空间。
2、 根据权利要求1所述的方法,其特征在于,预定义有空闲簇链表及空闲 簇链表项对应的结构体、空闲簇组链表及空闲簇组链表项对应的结构体,则所 述步骤A具体包括步骤A1:扫描文件分配表,当找到空闲簇时,判断该空闲簇的相邻簇是否 也为空闲簇,如果是,执行步骤A2,否则执行步骤A3;步骤A2:才艮据该空闲簇和其相邻簇构成的连续空闲空间与簇组的大小关系, 决定将该连续空间加到空闲簇链表或者加到空闲簇组链表;步骤A3:直接将该空闲簇加到空闲簇链表。
3、 根据权利要求2所述的方法,其特征在于,所述步骤A2具体包括判断该空闲簇和其相邻簇构成的连续空闲空间是否大于簇组如果比簇组 大,填充空闲簇组链表项对应的结构体,将该连续空闲空间加到空闲簇组链表, 否则填充空闲簇链表项对应的结构体,将该连续空闲空间加到空闲簇链表。
4、 根据权利要求l到3中任意一项所述的方法,其特征在于,所述步骤B 具体包括当需要给文件分配空间时,根据给文件分配的是簇或簇组修改所述空闲簇 组链表或空闲簇链表;或者,当/人》兹盘上删除文件时,将归还的簇或簇组的信息填充到相应的结构体中, 并将该结构体按照预定策略插入到相应的空闲簇链表或空闲簇组链表中。
5、 根据权利要求2或3所述的方法,其特征在于,所述空闲簇组链表项对 应的结构体包括空闲簇组起始簇、下一个空闲簇组链表项的地址;所述空闲 簇链表对应的结构体包括空闲簇的起始簇、从起始簇可供连续使用的簇数、 下一个空闲簇链表项的地址。
6、 一种在文件分配表中给文件分配空间的装置,其特征在于,所述装置包 括映射单元、存储单元和查找单元,其中,所述存储单元,设置于内存中,用于存放映射到其中的磁盘的空闲空间; 所述映射单元,当加载文件分配表时,所述映射单元用于根据磁盘的使用 情况,将^F兹盘的空闲空间映射到所述存储单元;当从^f兹盘上删除文件时,所述 映射单元还用于将释放出来的空闲空间映射到所述存储单元;所述查找单元,用于在需要给文件分配空间时,到所述存储单元中查找待 分配的空闲空间。
全文摘要
本发明公开了一种在文件分配表中给文件分配空间的方法及装置,预先设置有一块内存空间,用于存放磁盘的空闲空间,所述方法包括加载文件分配表时,将磁盘的空闲空间映射到该内存空间;当需要给文件分配空间时,直接到该内存空间中查找可以分配的空闲空间;或者,当从磁盘上删除文件时,将释放出来的空闲空间映射到该内存空间;所述装置包括映射单元、存储单元和查找单元。本发明通过把查找空闲空间的操作由读盘操作变为内存操作,而内存操作要比读盘操作快得多,从而极大地提高给文件分配空间地效率。
文档编号G06F17/30GK101286177SQ20081011079
公开日2008年10月15日 申请日期2008年5月30日 优先权日2008年5月30日
发明者周元庆, 周立超, 骐 杨, 伟 颜 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1