前面已经基于一个格式化的空U盘分析了一下FAT32文件系统存储的组织结构,下面我们从文件操作的角度来分析一下文件系统的运作机制。由于换了个U盘,所以仍然贴出刚格式化的空U盘的几个重要的数据区如下:

FAT32文件系统的存储组织结构(二)-LMLPHP FAT32文件系统的存储组织结构(二)-LMLPHP

FAT32文件系统的存储组织结构(二)-LMLPHP

我们可以看出,在分区格式化的时候,系统将卷标TEST_FAT32存储在2号簇,即跟目录区,如上面根目录贴图所示。同时,在FDT区2号簇标记位置写入了文件结束符FF FF FF 0F。显然,FAT32文件系统将目录当做普通文件来处理的。

下面我们在根目录下新建一个文件夹TEST1,看会有什么变化:

建立了TEST1文件夹后,FDT变成如下:

FAT32文件系统的存储组织结构(二)-LMLPHP

根目录变成如下:

FAT32文件系统的存储组织结构(二)-LMLPHP

重新分配了3号簇:

FAT32文件系统的存储组织结构(二)-LMLPHP

从上面的变化可以直观的看出,系统在新建文件夹时完成了如下动作:

     a.在父目录所在簇上建立新的目录项,存储当前所建文件夹信息。

     b.分配一个新簇,给新建的文件夹建立两个目录项:父目录和当前目录。

     c.在FDT表中新分配的簇对应的位置上写下文件结束符。

     d.建立各部分的链路关系:新建文件夹所对应的目录项的文件起始簇号字段写上新分配簇的簇号,新簇上的两个目录项的文件起始簇号字段分配写上父目录所在簇号(此处是0,本来我以为是2,即根目录所在簇,不知道为什么,可能特地用0指示根目录吧)和当前簇号(此处是3)。

为了验证我们上面分析的正确性,我们再在TEST1文件夹下建立新文件夹TEST11,看是否做了如下操作:

      a.在父目录(即TEST1)所在簇(即3号簇)上建立新的目录项,存储TEST11文件夹信息。

     b.分配一个新簇(应该是4号簇),给新建的文件夹(即TEST11)建立两个目录项:父目录和当前目录。

     c.在FDT表中新分配的簇(应该是4号簇)对应的位置上写下文件结束符。

     d.建立各部分的链路关系:新建文件夹(即TEST11)所对应的目录项的文件起始簇号字段写上新分配簇的簇号(应该是4号簇),,新簇上的两个目录项的文件起始簇号字段分配写上父目录所在簇号(3号簇)和当前簇号(应该是4号簇)。

新建TEST11文件夹后FDT变成:

FAT32文件系统的存储组织结构(二)-LMLPHP

根目录没有变化:

FAT32文件系统的存储组织结构(二)-LMLPHP

3号簇变成:

FAT32文件系统的存储组织结构(二)-LMLPHP

新分配4号簇:

FAT32文件系统的存储组织结构(二)-LMLPHP

显然我们的估计没有错的,也进一步证明我们前面的分析是正确的。

下面我们再分析建立文件的情况

我们先建立一个100字节的文件TEST.TXT,然后把这个文件拷贝到U盘的根目录下,FDT变成如下:

FAT32文件系统的存储组织结构(二)-LMLPHP

根目录变成:

FAT32文件系统的存储组织结构(二)-LMLPHP

新分配5号簇保存文件内容:

FAT32文件系统的存储组织结构(二)-LMLPHP

从上面的变化可以直观的看出,系统新建文件和新建文件夹所完成的操作是一样一样的:

     a.在父目录所在簇上建立新的目录项,存储当前所建文件信息。

     b.分配一个新簇,存储新建的文件的内容。

     c.在FDT表中新分配的簇对应的位置上写下文件结束符。

     d.建立链路关系:新建文件所对应的目录项的文件起始簇号字段写上新分配簇的簇号。

结束总结:

      1.在FAT32文件系统中,目录和文件的存储采用统一的方式。

      2.文件系统的操作的单位是簇,每新建立一个文件或文件夹,至少会重新分配一个簇号。

      3.如果一个文件或目录的内容要多个簇才能存储得下,则系统会分配多个簇来存储文件或目录的内容

      4.当需要多个簇时,这些簇可能连续也可能不连续,但无论是连续或是不连续,系统都是采用FDT链表的形式来组织的。

10-28 02:38