分类:
2008-11-19 16:02:34
对于计算机的硬盘,因为要引导系统,所以还有BOOT区,分区表等等,这些东西在单片机上都用不着,硬盘对空间管理的核心就是文件分配表(FAT),为了存储不同的文件和目录结构还有一个表也十分重要,就是文件目录表(FDT)。这两个表一般都保存在硬盘每个分区的开头几个扇区之中我们的flash文件系统自然也会有这样两张表存放在flash前面的几个扇区。
FAT是什么:
我的理解:
FAT就是文件使用登记链表,如果用16位的整数来表示一个簇号(称为FAT16),这样最多能容纳65535个簇(簇的大小是扇区的整数倍)。如果把fat表看成一个元素个数对应硬盘簇数的数组,那么数组元素在数组中的位置就是他代表的簇在硬盘上的位置。
在FAT文件系统中,把硬盘把整个空间划分为很多的逻辑块,每块包含若干扇区,这样
的块叫做簇,簇的大小是由硬盘在分区的时候决定的。这样整个硬盘就有好多好多的簇,每个簇对应有一个簇号,假如簇号用一个16位的整数来表示的话(就是FAT16),就一共能表示65536个簇。簇是文件存储的最小单位。对于一个80GB的硬盘来讲,如果用
FAT16文件系统来管理硬盘,由于FAT16最大只能表示65536簇,所以每簇的空间将为
(80*1024*1024)/65536=1280Kbyte。 FAT表在这里就像个大的数组,硬盘上有多少个簇,这个数组的元素就有多少个。数组元素在数组中的位置就是他代表的簇在硬盘
上的位置。
计算机把文件占用的簇的簇号放到FAT中,所以这个表就叫做文件分配表。一开始FAT表是空的数据全部都是0x0000或者0xffff。
FAT对空间的管理:
我的理解:
一个文件在硬盘的存储是先在fat表中找空闲的簇,找到后写满空闲簇,然后再找空闲的簇,并把此空闲的簇号写在fat表上刚才写满的簇的对应的位置上,作为文件链接(为文件的读取提供索引依据),依次类推,到最后以0xfff8在FAT表中的对应位置表示文件结尾所在簇。记录文件的起始簇,就是文件名和扩展名来标记的了,其他的属性根据情况需要而定。可以定义一个结构文件目录表FDT(FDT_REC)用来详细描述文件的属性。
FAT表管理空间的原理
计算机在写文件的时候如何对FAT表操作。计算机要向文件写数据,先要到FAT表中找到一个空闲的簇,并往里面写数据,写满后,再到FAT表中寻找下一个空闲的簇,找到之后先把簇号填到刚才写满的那个簇在FAT表中的对应位置,然后继续写,写满之后再找一个空闲簇,然后再把这次找到的簇的簇号填到我们刚刚写完的那个簇在FAT表中的
对应位置,这样下去直到写完,然后我们把最末尾的簇在FAT表中的对应位置标为0xfff8表示结束。
而在读文件的时候,只要我们找到了文件的第一簇的簇号,然后就可以在FAT表中的对应位置找到下一簇的簇号,这样一直下去直到遇到0xfff8。这就好像是一条簇链,一条单向的簇链表,找到了头,就能顺序找到尾。这就是FAT表管理空间的原理.
文件的创建和删除
计算机要创建一个文件,就要先根据文件的名字,当前时间信息,构造一条FDT_REC记录,然后把这条FDT_REC记录插入到FDT表中去,一开始文件大小为0,起始簇为空(0xfff8),这样就创建了一个空文件,
删除文件的过程。删除文件时并不是把文件占用的所有簇都清空,而是先把文件在FDT表中的记录项(FDT_REC)的第一个字节置为0x5e表示这条项目已经被删除。然后在FAT表中释放该文件占用的簇。