建立磁盘空簇表及查找磁盘空簇的方法和装置的制作方法

文档序号:6465201阅读:217来源:国知局
专利名称:建立磁盘空簇表及查找磁盘空簇的方法和装置的制作方法
技术领域
本发明涉及磁盘读写技术,特别涉及建立磁盘空簇表及查找磁盘空簇的 方法和装置。
背景技术
磁盘是一种存储介质,文件分配表(FAT, File Allocation Table )是用 于磁盘数据索引和定位的一种链式格式。按照现有微软定义的spec规范将 ^!盘进行FAT格式化之后,可以将^兹盘空间按照扇区为单位进行划分,每 个扇区通常为512字节。
FAT格式化后,磁盘的基本组织形式可以包括引导区域(大小为1 个扇区)、FAT (包含的扇区数依据实际情况确定)和数据区域(包含的扇 区数依据实际情况确定)。
依据具体FAT格式的不同,上述基本组织形式中可能还会增加根文件 夹等不同的区域,并且在某些FAT格式下,上述FAT还可以对应有完全备 份,通常将上述FAT称为FAT1,将其对应的完全备份称为FAT2, FAT2 与FATl逻辑同步,在FATl被破坏后将FAT2拷贝到FATl继续正常操作, FAT2还和FATl逻辑连续,即FATl的结束位置与FAT2的起始位置连续。
下面分别筒要介绍磁盘基本组织形式中的各个部分。
上述引导区域,存储有FAT区域和数据区域的大小及起始位置等基本 信息。
上述数据区域以簇为存储单位,每个簇包括2"个扇区,其中n取自然数, 因此一个蔟的大小可以为1K、 2K、 4K、 8K、 16K、 32K和64K,实际中一 个簇通常不超过32K。按照从数据区域起始位置开始的顺序,依次为每个簇编号,这些编号称为簇号,作为簇所处位置的标识,簇号可以使用不同比特
位的数据标记。根据标记簇号的比特位,可以将FAT格式分为三种用12 比特标记蔟号的称为FAT12,用16比特标记簇号的称为FAT16,用32比 特标记簇号的称为FAT32。
上述FAT实际上是一个数据表,包括若干个记录项,每个记录项的值 对应标示数据区域中一个簇的使用状态,上述使用状态包括是否为空簇、是 否为坏簇等。图1以FAT16格式为例,示出了FAT的简要结构,从起始位 置开始,记录项1~6的值按顺序分别标示磁盘数据区域中簇号2~簇号7标 示的簇的使用状态,即磁盘中第2簇~第7簇的使用状态,根据FAT的实际 大小,记录项6之后可能还包括其他记录项,这里不再——示出,而以省略 号代替。当记录项的取值为0时,表示该记录项标示的簇为空簇,例如图1 所示的第2簇、第4簇和第5簇就是空簇。记录项的值还会依据FAT格式 的不同而不同,例如在FAT32中记录项的值为0x00000000时,表示该记录 项标示的簇为空簇。
当在磁盘中写入数据时,需要查找空簇。例如当需要在磁盘中存储录音 数据时,我们首先要在磁盘中创建一个新的音频文件,然后再将录音数据写 到该音频文件中,写数据的过程包含指定写入位置和执行写入磁盘两个步 骤,其中指定写入位置就要查找空簇。目前在磁盘中查找空簇的方法有以下 两种
第一、查找空簇与写入数据同步进行。
在这种方式中,从FAT起始位置开始依次检查FAT中记录项的值,具 体为将FAT中从磁盘读取到磁盘所在系统的内存中进行,查找到值为0的 记录项,就可以得到该记录项对应的簇号,进而查找到空簇的位置。由于必 须依次检查每一个记录项的值,当FAT起始位置开始的很大一段区域都已 经被占用,或者某个空簇与下一个空簇之间相隔很大一段已经被占用的区域 时,按照这种查找方式将在已经被占用的区域上花费很多时间,再加上检查 空簇时从磁盘到内存的读取过程,使得查找空簇的速度较慢,进而导致写入数据的速度也较慢。
仍然以上述向磁盘中写入录音数据为例,写数据的速度必须符合录音比 特率的要求,高比特率的录音,同样时间内要求写入磁盘中的数据比低比特 率多,也就要求写入磁盘相应位置的速度要快,如果写入速度太慢会导致丢 失数据,因此上述第一种查找空簇与写入数据同步进行的方式,即使对于低 比特率录音,也很有可能无法达到要求的写入速度,从而造成数据丢失。
第二、写入数据之前收集磁盘空簇分布信息。
在这种方式中,首先在磁盘所在系统的内存中创建一个空簇表,该空簇 表包括若千个表项,每个表项对应磁盘数据区域中的一个簇,通过表项的表
项值标示对应的簇是否为空簇。图2以FAT16为例示出了其对应空簇表的 筒要结构,其中从起始位置开始表项1 表项6按顺序对应簇号2 簇号7标 示的簇,并通过各自的表项值标示第2簇~第7簇是否为空簇,例如当表项 值为l比特数据l时,该表项对应的簇为空簇,如图2中所示的第2簇、第 4簇和第5簇。
以图2为例,在开始写入数据之前的准备阶段,首先从FAT起始位置 开始依次检查记录项1~6的值,如果所检查记录项的值为0即标示对应的簇 为空簇时,在空簇表对应该簇的表项中填写表项值1,如果所检查的记录项 值不为0即标示对应的簇不为空簇,在空簇表对应该簇的表项中填写表项值 0。在开始写入数据之后,直接从空簇表起始位置开始依次检查表项1 6的 值,检查到值为1的表项时,得到该表项对应的簇号,进而查找到空簇的位 置。
显然,上述第二种方式相比于第一种方式,在写入数据时省去了从磁盘 中将FAT读到内存再顺序检查记录项的值的步骤,而可以直接根据内存空 簇表中表项值查找空簇,使得写入数据速度较快,但是在写入数据之前的准 备阶段需要花费较长时间获得磁盘中的空簇分布信息,并且空簇表会占用磁 盘所在系统的内存空间,对于大容量磁盘,其簇数很多,就需要花费很长的 时间并占用较大的内存空间,对于小内存系统来说是无法实现的。

发明内容
有鉴于此,本发明的第一个目的在于提供一种建立磁盘空簇表的方法, 该方法能够节省存储空间。
本发明的第二个目的在于提供一种查找磁盘空簇的方法,该方法既能节 省存储空间又能保证写入数据速度。
本发明的第三个目的在于提供一种建立磁盘空簇表的装置,使用该装置 能够节省存储空间。
本发明的第四个目的在于提供一种查找磁盘空簇的装置,使用该装置既 能节省存储空间又能保证写入数据速度。
本发明的技术方案是这样实现的
一种建立磁盘空簇表的方法,所述磁盘包括磁盘文件分配表FAT,所述FAT 中包括用于标示》兹盘中对应簇是否为空簇的记录项,关键在于,该方法包括步 骤
将所述FAT中的至少两个所述记录项设置为一个FAT段,且FAT段之间
连续;
建立空簇表,所述空簇表中包括和所述FAT段一一对应的表项,所述表项 的表项值标示对应的FAT段中是否包括标示空簇的记录项。
较佳地,所述空簇表在磁盘所在系统开机后建立,所述表项的表项值标示 对应的FAT段中是否包括标示空簇的记录项的设置过程为
Al、为所述空簇表中的表项设置初始值,所述初始值标示对应的FAT段中 不包括标示空蔟的记录项;将从FAT起始位置开始的第一个FAT段作为当前 FAT段;
Bl、读取当前FAT段,通过检查当前FAT段中的记录项的值,判断当前 FAT段中是否包括标示空簇的记录项,如果是,则执行步骤C1;否则直接执行 步骤Dl;
Cl、将当前FAT段对应的表项的初始值,修改为标示对应的FAT段中包括标示空簇的记录项的表项值,然后执行步骤D1;
Dl、将当前FAT段的下一个FAT段作为更新后的当前FAT段,判断所述 更新后的当前FAT段的起始位置是否超出所述FAT的结束位置,如果是则结束 流程,否则继续返回执行步骤Bl。
较佳地,所述空簇表在每次开始写入数据之前重新建立,重新建立的空簇 表覆盖上一次建立的空簇表;所述表项的表项值标示对应的FAT段中是否包括 标示空簇的记录项的设置过程为
A2、将从FAT起始位置开始的第 一个FAT段作为当前FAT段;
B2、读取当前FAT段,通过检查当前FAT段中的记录项的值,判断当前 FAT段中是否包括标示空簇的记录项,如果是,则执行步骤C2;否则直接执行 步骤D2;
C2、将当前FAT段对应的表项的表项值,设置为标示对应的FAT段中包括 标示空簇的记录项的表项值,然后执行步骤E2;
D2、将当前FAT段对应的表项的表项值,设置为标示对应的FAT段中不包 括标示空簇的记录项的表项值,然后执行步骤E2;
E2、将当前FAT段的下一个FAT段作为更新后的当前FAT段,判断所述 更新后的当前FAT段的起始位置是否超出所述FAT的结束位置,如果是则结束 流程,否则继续返回执行步骤B2 。
较佳地,所述判断当前FAT段中是否包括标示空簇的记录项为
从当前FAT l殳起始位置开始,依次4全查记录项的值,当4全查到一个记录项 的值标示空簇时,确定当前FAT段中包括标示空簇的记录项。
较佳地,磁盘的引导区域中存储有所述FAT的起始位置和大小;所述判断 更新后的当前FAT段的起始位置是否超出所述FAT的结束位置,是依据所述引 导区域中的存储内容进行的。
较佳地,每个FAT段的大小为一个扇区。
一种查找磁盘空簇的方法,所述磁盘包括磁盘文件分配表FAT,所述FAT 中包括用于标示磁盘中对应簇是否为空簇的记录项;关键在于,将FAT中的至少两个所述记录项设置为一个FAT段,且FAT段之间连续;建立空簇表,该空 簇表包括和FAT段——对应的表项,所述表项的表项值标示对应的FAT段中是 否包括标示空簇的记录项;该方法还包括
通过检查空簇表中标示对应的FAT段中包括标示空簇的记录项的表项值, 确定对应的包括标示空簇的记录项的FAT段;
通过确定的FAT段中的记录项,查找磁盘中对应的空簇。
较佳地,所述确定对应的包括标示空簇的记录项的FAT段为
将从空簇表起始位置开始的第一个表项作为当前表项;
检查当前表项的表项值是否标示对应的FAT段中包括标示空簇的记录项, 如果是则继续执行查找磁盘中空簇的位置的步骤,并在查找结束后将当前表项 的下一表项作为更新后的当前表项,再返回执行检查当前表项的表项值的步骤, 直到更新后的当前表项为空簇表中的最后一个表项;否则将当前表项的下一表 项作为更新后的当前表项,再返回执行检查当前表项的表项值的步骤,直到更 新后的当前表项为空簇表中的最后一个表项。
一种建立磁盘空簇表的装置,该装置中包括FAT模块,存储用于标示磁 盘中对应簇是否为空簇的记录项;关键在于,该装置还包括
设置模块,用于将所述FAT模块中存储的至少两个所述记录项设置为 一个 FAT段,且FAT段之间连续;
建立模块,用于建立包括和所述FAT段——对应的表项的空簇表,所述表 项的表项值标示对应的FAT段中是否包括标示空簇的记录项。
较佳地,所述建立模块包括
第 一建立执行单元,用于在磁盘所在系统开机后建立包括和所述FAT段一 一对应的表项的空簇表,所述表项的表项值标示对应的FAT段中是否包括标示 空簇的记录项;
初始值设置单元,用于为空簇表中的表项设置初始值,所述初始值标示对 应的FAT段不包括标示空蔟的记录项;
第一判断单元,用于从FAT模块中的第一个FAT段开始,读取当前FAT段,通过检查当前FAT段中的记录项的值,判断当前FAT段中包括标示空簇的 记录项时,通知修改单元执行操作,并将当前FAT段的下一个FAT段作为更新 后的当前FAT段,进一步判断所述更新后的当前FAT段的起始位置是否超出所 述FAT模块的结束位置,如果是则结束操作,否则重复执行读取FAT模块中的 当前FAT段的操作;判断当前FAT段中不包括标示空簇的记录项时,直接将当 前FAT段的下一个FAT段作为更新后的当前FAT段,进一步判断所述更新后 的当前FAT段的起始位置是否超出所述FAT模块的结束位置,如杲是则结束操 作,否则重复执行读取FAT模块中的当前FAT段的操作;
修改单元,用于接收所述第一判断单元的通知,将空簇表中当前FAT段对 应的表项的初始值,修改为标示对应的FAT段中包括标示空簇的记录项的表项 值。
较佳地,所述建立模块包括
第二建立执行单元,用于在每次开始写入数据之前重新建立包括和所述 FAT段——对应的表项的空簇表,所述表项的表项值标示对应的FAT段中是否 包括标示空簇的记录项,重新建立的空簇表覆盖上一次建立的空簇表;
第二判断单元,用于从FAT模块中的第一个FAT段开始,读取当前FAT 段,通过检查当前FAT段中的记录项的值,判断当前FAT段中包括标示空簇的 记录项时,通知第 一表项值设置单元执行操作,并将当前FAT段的下一个FAT 段作为更新后的当前FAT段,进一步判断所述更新后的当前FAT段的起始位置 是否超出所述FAT模块的结束位置,如果是则结束操作,否则重复执行从FAT 模块中读取当前FAT段的搡作;判断当前FAT段中不包括标示空簇的记录项时, 通知第二表项值设置单元执行操作,并将当前FAT段的下一个FAT段作为更新 后的当前FAT段,进一步判断所述更新后的当前FAT段的起始位置是否超出所 述FAT模块的结束位置,如果是则结束操作,否则重复执行从FAT模块中读取 当前FAT段的操作;
第一表项值设置单元,用于接收第二判断单元的通知,将当前FAT段对应 的表项值,设置为标示对应的FAT段中包括标示空簇的记录项的表项值;第二表项值设置单元,用于接收第二判断单元的通知,将当前FAT段对应
的表项值,设置为标示对应的FAT段中不包括标示空簇的记录项的表项值。
较佳地,所述判断当前FAT段中是否包括标示空簇的记录项,是通过从当 前FAT端起始位置开始依次检查记录项的值实现的,当检查到一个记录项的值 标示空簇时,确定当前FAT段中包括标示空簇的记录项。
较佳地,磁盘的引导区域中存储有所述FAT模块的起始位置和大小;所述 判断更新后的当前FAT段的起始位置是否超出所述FAT的结束位置,是依据所 述引导扇区中的存储内容进行的。
一种查找磁盘空簇的装置,该装置中包括FAT模块,存储用于标示磁盘 中对应簇是否为空簇的记录项;关键在于,该装置还包括
设置模块,用于将所述FAT模块中存储的至少两个所述记录项设置为 一个 FAT段,且FAT段之间连续;
建立模块,用于建立包括和所述FAT段——对应的表项的空簇表,所述表 项的表项值标示对应的FAT段中是否包括标示空簇的记录项;
查找模块,用于通过检查空簇表中标示对应的FAT段中包括标示空簇的记 录项的表项值,确定对应的包括标示空簇的记录项的FAT段;通过确定的FAT 段中的记录项,查找磁盘中对应的空簇。
较佳地,所述查找模块包括
检查单元,用于检查当前表项的表项值是否标示对应的FAT段中包括标示 空簇的记录项,如果是通知查找执行单元执行操作,并在查找执行单元结束查 找操作后,将当前表项的下一表项作为更新后的当前表项,再重复执行检查当 前表项的表项值的操作,直到更新后的当前表项为空簇表中的最后一个表项; 否则直接将当前表项的下一表项作为更新后的当前表项,再重复执行检查当前 表项的表项值的操作,直到更新后的当前表项为空簇表中的最后一个表项;
查找执行单元,用于检查所述检查单元确定的FAT段中的记录项,查找磁 盘中对应的空簇的记录项,查找磁盘中对应的空簇。
从以上技术方案可以看出,在节省存储空间方面,本发明提供的建立磁盘空簇表及查找磁盘空簇的方法和装置中,由于将磁盘中的FAT分为FAT 段,每个FAT段中包括至少两个记录项,空簇表中的每个表项对应一个FAT 段,这样避免了使空簇表中的每个表项对应FAT中的一个记录项,减少了 空簇表中表项的数量,从而节省了空簇表所占用的存储空间。
在保证写入数据速度方面,本发明提供的查找磁盘空簇的方法和装置 中,由于在写入数据开始之前的准备阶段,只需确定每个FAT段中是否包 括标示空簇的记录项,即只要检查到某FAT段中包括的第一个标示空簇的 记录项,就可以确定该FAT段为包括标示空簇的记录项的FAT段,而不必 检查该FAT段中的所有记录项的值,使得收集磁盘中空簇分布信息的过程 较快,较快地进入写入数据的过程;又由于写入数据开始之后,直接检查空 簇表中的表项值,确定包括标示空簇的记录项的FAT段,因此先锁定了存 在空簇的范围,然后只在小范围内通过记录项的值查找空簇位置,省去了检 查不包括标示空蔟的记录项的范围所耗费的时间,使得本发明查找磁盘空簇 的方法基于节省存储空间的前提下,能够保证较快的写入数据速度。


图1为现有技术中FAT的结构示意图2为现有技术中FAT与空簇表的对应关系示意图3为本发明中FAT与空簇表的对应关系示意图4为本发明中建立空簇表的流程图5为本发明中写入数据时根据空簇表查找空簇的流程图6为本发明中建立空簇表的装置的结构示意图7为图6中所示建立模块的第一种内部结构示意图8为图6中所示建立模块的第二种内部结构示意图9为本发明中查找磁盘空簇的装置的结构示意图。
具体实施例方式
为使本发明的目的和优点更加清楚,下面结合附图和实施例对本发明作 进一步详细的说明,这些说明是非限制性的。
在本发明建立石兹盘空簇表的方法中,将FAT中的至少两个用于标示磁 盘中对应簇是否为空簇的记录项设置为 一 个F AT段,且F AT段之间连续; 建立空簇表,该空簇表包括和FAT段——对应的表项,所述表项的表项值 标示对应的FAT段中是否包括标示空簇的记录项。
上述建立的空簇表,是占用存储空间(例如磁盘所在系统中的物理内存 或者虛拟内存)的一个数据表,将该数据表占据的存储空间划分为不同的存 储位置,每个存储位置就是一个表项。
建立空簇表实际就是申请一块存储空间,因此空簇表可以在磁盘所在系 统开机后建立,而不管是否写入数据,后续每一次向磁盘中写入数据时,都 实时更新该空簇表中的表项值即可;也可以是针对每次写入数据重新建立, 例如如果需要向磁盘中写入音频数据,在创建音频文件时可以建立空簇表 一,如果后续需要向磁盘中写入视频数据,则在创建视频文件时建立空簇表 二,空簇表二会覆盖之前建立的空簇表一。
无论空簇表的建立方式如何,在本发明的方法中,都存在两种——对应 的固定关系,第一是FAT中每个记录项的值对应标示磁盘中的一个簇是否 为空簇,这与通常方法中的对应关系相同;第二是空簇表中的每个表项与一 个FAT段固定对应。
图3以FAT16为例示出了本发明中的FAT与空簇表的对应关系,这里 以将FAT中的每2个记录项分为一个FAT段为例,即包括记录项1和记录 项2的为FAT段1、包括记录项3和记录项4的为FAT段2、包括记录项5 和记录项6的为FAT段3,其中FAT段1~3按顺序依次由空簇表中的表项 1 3的表项值标示,根据FAT的实际大小,在图3所示记录项6之后可能还 存在其他的记录项,这里不再——举出,而使用省略号表示。可以看出当一个F A T段中包括标示空蔟的记录项时,空簇表中与该F A T段对应的表项值 为1,而当一个FAT段中不包括标示空簇的记录项时,空簇表中与该FAT 段对应的表项值为0。
在将FAT分段以及建立空簇表的前提下,本发明查找磁盘空簇的方法 中,写入数据时,通过检查空簇表中标示对应的FAT段中包括标示空簇的 记录项的表项值,确定所对应包括标示空簇的记录项的FAT段,通过确定 的FAT段中的记录项,查找磁盘中对应的空簇。
可见,在开始写入数据后,只需检查空簇表中的表项值、确定包括标示 空簇的记录项的FAT段,再按照通常的方法在上述确定出的FAT段中,通 过记录项的值查找磁盘中空簇的位置。
本发明建立磁盘空簇表及查找磁盘空簇的方法所取得的效果可以从节 省存储空间和保证写入数据速度两方面来说明。
首先在节省存储空间方面,本发明建立磁盘空簇表及查找磁盘空簇的方 法中,由于在FAT中划分了 FAT段,每个FAT段中包括至少两个记录项, 空簇表中的每个表项对应一个FAT段,这样避免了使空簇表中的每个表项 对应FAT中的一个记录项,减少了空簇表中表项的数量,从而节省了空簇 表所占用的存储空间。
以具体的数据实例进一步说明上述节省存储空间的效果。假定FAT中
划分的每个FAT段为1个扇区512字节,每个字节8比特;空簇表中的表 项值为1比特;以2G大小的石兹盘为例。
对于FAT16格式来说,每个簇号占用2个字节,则FAT中记录项的值 也是2个字节,也就是说每个FAT段中可以包括256个记录项。根据现有 微软定义的spec规范,FAT16格式的磁盘,数据区簇的总数不会超过65535 个,那么按照最大总数以及每个FAT段包括的记录项个数,共需要256个 FAT段就可以标示全部的簇,再按照每个FAT段在空簇表中对应表项需要 1比特存储空间,可以确定共需要256比特的存储空间就可以实现本发明空 簇表的存储,而如果按照现有使用空簇表的方法,则需要65535比特的存储空间才可以实现空簇表的存储。
对于FAT32格式来说,每个簇号占用4个字节,则FAT中记录项的值 也是4个字节,也就是说每个FAT段中可以包括128个记录项。根据现有 规范,FAT32格式的磁盘,数据区簇的总数不会超过524288个,那么按照 最大总数以及每个FAT段包括的记录项个数,共需要4096个FAT段就可 以标示全部的簇,再按照每个FAT段在空簇表中对应表项需要1比特存储 空间,可以确定共需要4096比特的存储空间就可以实现本发明空簇表的存 储,而如果按照现有使用空簇表的方法,则需要524288比特的存储空间才 可以实现空簇表的存储。
其次在保证写入数据速度方面,本发明查找磁盘空簇的方法中,由于在 写入数据开始之前的准备阶段,只需通过检查每个FAT段中记录项的值判 断该FAT段中是否包括标示空簇的记录项,即只要检查到某FAT段中有一 个记录项的取值标示空簇,就可以确定该FAT段中包括标示空簇的记录项, 而不必从检查该FAT段中的所有记录项的值,使得收集磁盘中空簇分布信 息的过程较快,较快地进入写入数据的过程;又由于写入数据开始之后,直 接检查空簇表的表项值、确定包括标示空簇的记录项的FAT段,再读取检 查确定出的FAT段中记录项的值,因此先锁定了存在空簇的范围,然后只 在小范围内通过记录项的值查找空簇的位置,省去了检查不包括标示空簇的 记录项的范围所耗费的时间。上述两方面的原因,使得本发明查找磁盘空簇 的方法基于节省存储空间的前提下,能够保证较快的写入数据速度。
下面分别介绍本发明中建立空簇表和写入数据的具体实施例,其中建立 空簇表的过程可以依照图4所示流程进行,写入数据的过程可以依照图5所 示流程进行。
图4和图5所示流程的应用场景设定如下在》兹盘所在系统开机后就建 立空簇表,即根据磁盘的大小,在磁盘所在系统的物理内存中申请一个存储 空间(使用TableBuffer表示);FAT中包括FAT1和FAT2,其中FAT2为 FAT1的完全备份并逻辑连续和同步;空簇表中的每个表项与FAT1中的一个FAT段固定对应,具体为从空簇表起始位置开始排列的表项,分别依次
对应从FAT1起始位置开始排列的FAT段;每一个FAT段大小为 一个扇区, 并在磁盘所在系统的物理内存中申请一块临时存放读出当前扇区的空间(使 用SectorBuffer表示);在创建的空簇表中,表项值为1比特数据1时标示 对应的FAT段中包括标示空簇的记录项,表项值为1比特数据0时标示对 应的FAT段中不包括标示空簇的记录项。当然上述空簇表也可以存放于磁 盘所在系统的虚拟内存中,主要针对物理内存本身较小的系统。 在写入数据开始之前,图4所示流程包括
步骤401:为空簇表中每个表项设置初始值,将从FAT1起始位置开始 的FAT1首扇区作为当前扇区;将从空簇表起始位置开始的第一个表项作为 当前表项。
在本步骤中,可以为空簇表中的每一个表项都设置初始值0,用来标示 不包括标示空簇的记录项的FAT,殳。
步骤402:检查当前扇区中记录项的值,判断当前扇区中是否包括标示 空簇的记录项,如果是,继续执行步骤403,否则执行步骤404。
本步骤中,将当前扇区读到临时申请的内存空间中,检查该读出的当前 扇区记录项的值,具体方式是从当前扇区起始位置开始依次检查,当检查到 第一个记录项取值标示空簇时,确定当前扇区中包括标示空簇的记录项。
步骤403:将空簇表中的当前表项的表项值值修改为1。
本步骤中,在步骤402检查出当前扇区中存在空簇时,将空簇表中当前 表项的初始值修改为表项值1。
步骤404:更新当前表项和当前扇区。
本步骤中,将当前扇区的下一个扇区作为更新后的当前扇区;将空簇表 中当前表项的下一个表项作为更新后的当前表项。
步骤405:判断当前扇区的起始位置是否超出FAT1的结束位置,如果 是则结束流程,否则返回继续执行步骤402。
本步骤中,按照流程开始之前的假设,FAT文件系统中包括FAT 1和FAT2,其中FAT2为FAT1的完全备份,因此在FAT1未被破坏之前,所有 的操作只针对FAT1。判断可以根据引导扇区中记载的FAT1、 FAT2的大小
和起始位置。
如果在其他的应用场景下,FAT1没有对应的备份FAT2,同样可以执 行这一判断步骤,同样可以根据磁盘的引导扇区中FAT1的起始位置和大小 来完成这一判断。
上述图4所示的实施例中,如果采用计算机程序实现各个步骤,可以针 对空簇表中的表项和FAT1中的记录项分别设置指针,其中表项指针按照1 比特的幅度移动,记录项指针按照一个FAT段的幅度移动。在步骤401中, 将表项指针指向当前表项,将记录项指针指向当前记录项。在步骤404中, 对当前表项和当前记录项的更新,可以通过将表项指针后移、将记录项指针 后移来实现。
上述图4中以磁盘所在系统开机后就建立空簇表为例,如果采用每写入 一次数据就重建建立空簇表的方式,也可以在建立时仅仅申请存储空间,而 不为空簇表中的表项设置初始值,这样在步骤403中就可以直接在当前表项 中填写标示对应FAT段中包括标示空簇的记录项的值1,并且在步骤403 和步骤404之间增加一个步骤403,,内容为在当前表项中填写标示对应FAT 段中不包括标示空簇的记录项的值0。
在开始写入数据之后,图5所示流程包括
步骤501:将从FAT1起始位置开始的首扇区作为当前扇区;将从空簇 表起始位置开始的第一个表项作为当前表项。
步骤502:判断空簇表当前表项的表项值是否为1 ,如果是执行步骤504, 否则4丸4亍503。
步骤503:将当前扇区读取到内存中申请的临时空间,通过当前扇区中 记录项的值查找磁盘中空簇的位置。
本步骤中,将当前扇区读取到内存中申请的临时空间,从当前扇区的起 始位置开始依次检查到结束位置,通过记录项的值查找空簇的位置与通常的方法冲目同。
在本步骤中,在查找出空簇位置时就可以针对该空簇进行写入数据的操作。
步骤504:更新当前表项和当前扇区。
本步骤中,将当前扇区的下一个扇区作为更新后的当前扇区;将空簇表 中当前表项的下一个表项作为更新后的当前表项。
步骤505:判断当前扇区的起始位置是否超出FAT1的结束位置,如果 是则结束流程,否则返回执行步骤502。
本步骤中,;险查的方式与步骤505中所述相同。同样地,如果在其他的 应用场景下,FAT1没有对应的备份FAT2,同样可以执行这一判断步骤, 同样可以根据磁盘的引导扇区中FAT1的起始位置和大小来完成这一判断。
上述图5所示的实施例中,如果采用计算机程序实现各个步骤,可以针 对空簇表中的表项和FAT1中的记录项分别设置指针,其中表项指针按照1 比特的幅度移动,记录项指针按照一个FAT段的幅度移动。在步骤501中, 将表项指针指向当前表项,将记录项指针指向当前记录项。在步骤504中, 对当前表项和当前记录项的更新,可以通过将表项指针后移、将记录项指针 后移来实现。
图6为本发明建立空簇表的装置的结构示意图,该装置包括FAT模块, 用于存储用于标示磁盘中对应簇是否为空簇的记录项,这与通常情况下相 同。图6所示装置中还包括
设置模块,用于将所述FAT模块中存储的至少两个所述记录项设置为 一个 FAT段,且FAT段之间连续。
建立模块,用于建立包括和所述FAT段——对应的表项的空簇表,所 述表项的表项值标示对应的FAT段中是否包括标示空簇的记录项。
本发明建立空簇表的装置可以完全基于本发明建立空簇表的方法执行 操作,因此对应在磁盘所在系统开机时即建立空簇表,以及每次写入数据时 建立空簇表两种情况,上述装置中的建立模块的内部结构可以包括以下两种情况。
第一、图7示出了这种情况下建立模块的内部结构,该建立模块包括 第 一建立执行单元,用于在磁盘所在系统开机后建立包括和所述FAT段一
空簇的记录项。
初始值设置单元,用于为空簇表中的表项设置初始值,所述初始值标示对 应的FAT段不包括标示空簇的记录项。
第一判断单元,用于从FAT模块中的第一个FAT段开始,读取当前FAT 段,通过检查当前FAT段中的记录项的值,判断当前FAT段中包括标示空簇的 记录项时,通知修改单元执行操作,并将当前FAT段的下一个FAT段作为更新 后的当前FAT段,进一步判断所述更新后的当前FAT段的起始位置是否超出所 述FAT模块的结束位置,如果是则结束操作,否则重复执行读取FAT模块中的 当前FAT段的操作;判断当前FAT段中不包括标示空簇的记录项时,直接将当 前FAT段的下一个FAT段作为更新后的当前FAT段,进一步判断所述更新后 的当前FAT段的起始位置是否超出所述FAT模块的结束位置,如果是则结束操 作,否则重复执行读取FAT模块中的当前FAT段的操作。
修改单元,用于接收所述第一判断单元的通知,将空簇表中当前FAT 段对应的表项的初始值,修改为标示对应的FAT段中包括标示空簇的记录 项的表项值。
第二、图8示出了这种情况下建立模块的内部结构,该建立模块包括 第二建立执行单元,用于在每次开始写入数据之前重新建立包括和所述 FAT段——对应的表项的空簇表,所述表项的表项值标示对应的FAT段中是否 包括标示空簇的记录项,重新建立的空簇表覆盖上一次建立的空簇表。
第二判断单元,用于从FAT模块中的第一个FAT段开始,读取当前FAT 段,通过检查当前FAT段中的记录项的值,判断当前FAT段中包括标示空簇的 记录项时,通知第一表项值设置单元执行操作,并将当前FAT段的下一个FAT 段作为更新后的当前FAT段,进一步判断所述更新后的当前FAT段的起始位置是否超出所述FAT模块的结束位置,如果是则结束操作,否则重复执行从FAT 模块中读取当前FAT段的操作;判断当前FAT段中不包括标示空簇的记录项时, 通知第二表项值设置单元执行操作,并将当前FAT段的下一个FAT段作为更新 后的当前FAT段,进一步判断所述更新后的当前FAT段的起始位置是否超出所 述FAT模块的结束位置,如果是则结束操作,否则重复执行从FAT模块中读取 当前FA丁段的操作。
第一表项值设置单元,用于接收第二判断单元的通知,将当前FAT段对应 的表项值,设置为标示对应的FAT段中包括标示空簇的记录项的表项值。
第二表项值设置单元,用于接收第二判断单元的通知,将当前FAT段 对应的表项值,设置为标示对应的FAT段中不包括标示空簇的记录项的表 项值。
无论建立模块是上述哪一种内部结构,其中的第 一判断单元或第二判断 单元判断当前FAT段中是否包括标示空簇的记录项,都是通过从当前FAT 端起始位置开始依次检查记录项的值实现的,当检查到一个记录项的值标示 空簇时,确定当前FAT段中包括标示空簇的记录项。
当磁盘的引导区域中存储有所述FAT模块的起始位置和大小时,上述 两种建立模块结构中,第一判断单元或第二判断单元判断更新后的当前FAT 段的起始位置是否超出所述FAT的结束位置,是依据所述引导扇区中的存 储内容进行的。
图9为本发明查找磁盘空簇的装置的结构示意图,与图6所示的区别在 于,该查找磁盘空簇的装置中进一步包括一个查找模块,用于通过检查空簇 表中标示对应的FAT段中包括标示空簇的记录项的表项值,确定对应的包 括标示空簇的记录项的FAT段;通过确定的FAT段中的记录项,查找磁盘 中对应的空簇。
本发明查找磁盘空簇的装置可以完全基于本发明查找磁盘空簇的方法 执行操作,上述查找模块的内部结构可以包括
检查单元,用于检查当前表项的表项值是否标示对应的FAT段中包括标示空簇的记录项,如果是通知查找执行单元执行操作,并在查找执行单元结束查 找操作后,将当前表项的下一表项作为更新后的当前表项,再重复执行检查当 前表项的表项值的操作,直到更新后的当前表项为空簇表中的最后一个表项; 否则直接将当前表项的下一表项作为更新后的当前表项,再重复执行检查当前 表项的表项值的操作,直到更新后的当前表项为空簇表中的最后一个表项。
查找^l行单元,用于纟企查所述4企查单元确定的FAT ^:中的记录项,查 找磁盘中对应的空簇的记录项,查找石兹盘中对应的空蔟。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的 保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改 进等,均应包含在本发明的保护范围之内。
权利要求
1、一种建立磁盘空簇表的方法,所述磁盘包括磁盘文件分配表FAT,所述FAT中包括用于标示磁盘中对应簇是否为空簇的记录项,其特征在于,该方法包括步骤将所述FAT中的至少两个所述记录项设置为一个FAT段,且FAT段之间连续;建立空簇表,所述空簇表中包括和所述FAT段一一对应的表项,所述表项的表项值标示对应的FAT段中是否包括标示空簇的记录项。
2、 如权利要求l所述的方法,其特征在于,所述空簇表在磁盘所在系统开 机后建立,所述表项的表项值标示对应的FAT段中是否包括标示空簇的记录项 的设置过程为Al、为所述空簇表中的表项设置初始值,所述初始值标示对应的FAT段中 不包括标示空簇的记录项;将从FAT起始位置开始的第一个FAT段作为当前 FAT段;Bl、读取当前FAT段,通过检查当前FAT段中的记录项的值,判断当前 FAT段中是否包括标示空簇的记录项,如果是,则执行步骤C1;否则直接执行 步骤Dl;Cl、将当前FAT段对应的表项的初始值,修改为标示对应的FAT段中包括 标示空簇的记录项的表项值,然后执行步骤Dl;Dl、将当前FAT段的下一个FAT段作为更新后的当前FAT段,判断所述 更新后的当前FAT段的起始位置是否超出所述FAT的结束位置,如果是则结束 流程,否则继续返回执行步骤Bl。
3、 如权利要求l所述的方法,其特征在于,所述空簇表在每次开始写入数 据之前重新建立,重新建立的空簇表覆盖上一次建立的空簇表;所述表项的表 项值标示对应的FAT段中是否包括标示空簇的记录项的设置过程为A2、将从FAT起始位置开始的第一个FAT段作为当前FAT段;B2、读取当前FAT段,通过检查当前FAT段中的记录项的值,判断当前 FAT段中是否包括标示空簇的记录项,如果是,则执行步骤C2;否则直接执行 步骤D2;C2、将当前FAT段对应的表项的表项值,设置为标示对应的FAT段中包括 标示空簇的记录项的表项值,然后执行步骤E2;D2、将当前FAT段对应的表项的表项值,设置为标示对应的FAT段中不包 括标示空簇的记录项的表项值,然后执行步骤E2;E2、将当前FAT段的下一个FAT段作为更新后的当前FAT段,判断所述 更新后的当前FAT段的起始位置是否超出所述FAT的结束位置,如果是则结束 流程,否则继续返回执行步骤B2。
4、如权利要求2或3所述的方法,其特征在于,所述判断当前FAT段中 是否包括标示空簇的记录项为从当前FAT段起始位置开始,依次检查记录项的值,当检查到一个记录项 的值标示空蔟时,确定当前FAT段中包括标示空簇的记录项。
5、 如权利要求2或3所述的方法,其特征在于,磁盘的引导区域中存储有 所述FAT的起始位置和大小;所述判断更新后的当前FAT段的起始位置是否超 出所述FAT的结束位置,是依据所述引导区域中的存储内容进行的。
6、 如权利要求1所述的方法,其特征在于,每个FAT段的大小为一个扇区。
7、 一种查找石兹盘空蔟的方法,所述》兹盘包括石兹盘文件分配表FAT,所述 FAT中包括用于标示》兹盘中对应簇是否为空簇的记录项;其特征在于,将FAT 中的至少两个所述记录项设置为一个FAT段,且FAT段之间连续;建立空簇表, 该空簇表包括和FAT段——对应的表项,所述表项的表项值标示对应的FAT段 中是否包括标示空簇的记录项;该方法还包括通过检查空蔟表中标示对应的FAT段中包括标示空簇的记录项的表项值, 确定对应的包括标示空簇的记录项的FAT段;通过确定的FAT段中的记录项,查找》兹盘中对应的空簇。
8、 如权利要求7所述的方法,其特征在于,所述确定对应的包括标示空簇的记录项的FAT段为将从空簇表起始位置开始的第一个表项作为当前表项; 检查当前表项的表项值是否标示对应的FAT段中包括标示空簇的记录项, 如果是则继续执行查找磁盘中空簇的位置的步骤,并在查找结束后将当前表项 的下一表项作为更新后的当前表项,再返回执行检查当前表项的表项值的步骤, 直到更新后的当前表项为空簇表中的最后一个表项;否则将当前表项的下一表 项作为更新后的当前表项,再返回执行检查当前表项的表项值的步骤,直到更 新后的当前表项为空簇表中的最后一个表项。
9、 一种建立磁盘空簇表的装置,该装置中包括FAT模块,存储用于标示 磁盘中对应簇是否为空簇的记录项;其特征在于,该装置还包括设置模块,用于将所述FAT模块中存储的至少两个所述记录项设置为一个 FAT段,且FAT段之间连续;建立模块,用于建立包括和所述FAT段——对应的表项的空簇表,所述表 项的表项值标示对应的FAT段中是否包括标示空簇的记录项。
10、 如权利要求9所述的装置,其特征在于,所述建立模块包括第 一建立执行单元,用于在磁盘所在系统开机后建立包括和所述FAT段一 一对应的表项的空簇表,所述表项的表项值标示对应的FAT段中是否包括标示 空簇的记录项;初始值设置单元,用于为空簇表中的表项设置初始值,所述初始值标示对 应的FAT段不包括标示空簇的记录项;第一判断单元,用于从FAT模块中的第一个FAT段开始,读取当前FAT 段,通过检查当前FAT段中的记录项的值,判断当前FAT段中包括标示空簇的 记录项时,通知修改单元执行操作,并将当前FAT段的下一个FAT段作为更新 后的当前FAT段,进一步判断所述更新后的当前FAT段的起始位置是否超出所 述FAT模块的结束位置,如果是则结束操作,否则重复执行读取FAT模块中的 当前FAT段的操作;判断当前FAT段中不包括标示空簇的记录项时,直接将当前FAT段的下一个FAT段作为更新后的当前FAT段,进一步判断所述更新后 的当前FAT段的起始位置是否超出所述FAT模块的结束位置,如果是则结束操 作,否则重复执行读取FAT模块中的当前FAT段的操作;修改单元,用于接收所述第一判断单元的通知,将空簇表中当前FAT段对 应的表项的初始值,修改为标示对应的FAT段中包括标示空簇的记录项的表项 值。
11、 如权利要求9所述的装置,其特征在于,所述建立模块包括 第二建立执行单元,用于在每次开始写入数据之前重新建立包括和所述FAT段——对应的表项的空蔟表,所述表项的表项值标示对应的FAT段中是否 包括标示空簇的记录项,重新建立的空簇表覆盖上一次建立的空簇表;第二判断单元,用于从FAT模块中的第一个FAT段开始,读取当前FAT 段,通过检查当前FAT段中的记录项的值,判断当前FAT段中包括标示空簇的 记录项时,通知第一表项值设置单元执行操作,并将当前FAT段的下一个FAT 段作为更新后的当前FAT段,进一步判断所述更新后的当前FAT段的起始位置 是否超出所述FAT模块的结束位置,如果是则结束操作,否则重复执行从FAT 模块中读取当前FAT段的操作;判断当前FAT段中不包括标示空簇的记录项时, 通知第二表项值设置单元执行操作,并将当前FAT段的下一个FAT段作为更新 后的当前FAT段,进一步判断所述更新后的当前FAT段的起始位置是否超出所 述FAT模块的结束位置,如果是则结束操作,否则重复执行从FAT模块中读取 当前FAT段的操作;第一表项值设置单元,用于接收第二判断单元的通知,将当前FAT段对应 的表项值,设置为标示对应的FAT段中包括标示空簇的记录项的表项值;第二表项值设置单元,用于接收第二判断单元的通知,将当前FAT段对应 的表项值,设置为标示对应的FAT段中不包括标示空簇的记录项的表项值。
12、 如权利要求IO或11所述的装置,其特征在于,所述判断当前FAT段 中是否包括标示空簇的记录项,是通过从当前FAT端起始位置开始依次检查记 录项的值实现的,当才全查到一个记录项的值标示空簇时,确定当前FAT段中包括标示空簇的记录项。
13、 如权利要求10或11所述的装置,其特征在于,磁盘的引导区域中存 储有所述FAT模块的起始位置和大小;所述判断更新后的当前FAT段的起始位 置是否超出所述FAT的结束位置,是依据所述引导扇区中的存储内容进行的。
14、 一种查找磁盘空簇的装置,该装置中包括FAT模块,存储用于标示 磁盘中对应簇是否为空簇的记录项;其特征在于,该装置还包括设置模块,用于将所述FAT模块中存储的至少两个所述记录项设置为 一个 FAT段,且FAT段之间连续;建立模块,用于建立包括和所述FAT段——对应的表项的空簇表,所述表 项的表项值标示对应的FAT段中是否包括标示空簇的记录项;查找模块,用于通过检查空簇表中标示对应的FAT段中包括标示空簇的记 录项的表项值,确定对应的包括标示空簇的记录项的FAT段;通过确定的FAT 段中的记录项,查找磁盘中对应的空簇。
15、 如权利要求14所述的装置,其特征在于,所述查找模块包括 检查单元,用于检查当前表项的表项值是否标示对应的FAT段中包括标示空簇的记录项,如果是通知查找执行单元执行操作,并在查找执行单元结束查 找操作后,将当前表项的下一表项作为更新后的当前表项,再重复执行检查当 前表项的表项值的操作,直到更新后的当前表项为空簇表中的最后一个表项; 否则直接将当前表项的下 一表项作为更新后的当前表项,再重复执行检查当前 表项的表项值的操作,直到更新后的当前表项为空簇表中的最后一个表项;查找执行单元,用于检查所述检查单元确定的FAT段中的记录项,查找磁 盘中对应的空簇的记录项,查找磁盘中对应的空簇。
全文摘要
本发明公开了一种建立磁盘空簇表的方法和装置,将磁盘文件分配表FAT中的至少两个用于标示磁盘中对应簇是否为空簇的记录项设置为一个FAT段,且FAT段之间连续;建立空簇表,该空簇表包括和FAT段一一对应的表项,所述表项的表项值标示对应的FAT段中是否包括标示空簇的记录项。本发明还公开了一种查找磁盘空簇的方法和装置,基于上述建立的磁盘空簇表,该方法包括写入数据时,通过检查空簇表中标示对应的FAT段中包括标示空簇的记录项的表项值,确定所对应包括标示空簇的记录项的FAT段,通过确定的FAT段中的记录项,查找磁盘中对应的空簇。应用本发明,既能节省存储空间又能保证写入数据速度。
文档编号G06F3/06GK101303667SQ20081012579
公开日2008年11月12日 申请日期2008年6月25日 优先权日2008年6月25日
发明者马魁勇 申请人:炬力集成电路设计有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1