FAT文件系统

来源:互联网 发布:mac 产品原型设计工具 编辑:程序博客网 时间:2024/05/22 03:02

FAT文件系统总共有三个版本FAT-12.FAT-16 FAT-32

文件的存储第一种是连续分配方案。连续磁盘空间分配方案有两大优势,首先是实现简单,记录每个文件用到的磁盘块秩序记住两个数字即可,第一块的磁盘地址和文件的块树,给定第一块的编号,一个简单的加法就可以查找其他的块的编号。其次是读操作性能较好,因为单个操作中就可以读出整个文件,之后不再需要寻道和旋转延迟。所以数据会以磁盘全宽带速率输入。不足之处就是随着时间的推移磁盘会变得很零碎,结果是磁盘上最终既包括文件也有空洞。开始时候碎片不是问题,因为每个新文件都在先前的文件磁盘末尾写入,但是磁盘最终要么被充满要么压缩磁盘,那么重新使用空洞中的空闲空间。前者由于代价太高不可行后者需要维护一个空洞列表,这是可行的。但是创建一个新文件的时候,为了挑选合适大小的空洞存放文件就有必要知道要存放的文件的最终大小。


存储文件的第二种方法是为每个文件构造磁盘块链表。每个块的第一个字作为指向下一块的指针块的其他部分存放数据。这一方法可以充分利用每个磁盘块而不会浪费存储空间,同样在目录项中只需要知道存放第一块的磁盘地址文件的其他块就可以从这个首地址中查找到。

另一方面在链表分配方案中尽管顺序存取非常方便,但是随机存取相当缓慢,要获得n块操作系统每次都要从头开始,并且先读前面的n-1块。(而且由于指针占取了一些字节,每个磁盘块存储数据的字节树不再是2的整数次幂虽然这个问题不是非常严重但是怪异的大小确实降低了系统的运行速率。因为许多程序都是以长度文2的整数次幂来读写磁盘的,由于每个块的前几个字节指向下一个块的指针所占据所以要读出完整的一个块就需要从两个磁盘块中获得和拼接信息,这就因为复制引发了额外的开销。



如果取出每个磁盘块的指针字把它放在内存中的一个表中,就可以解决上述链表的两个不足。内存中的这样一个表格称为文件分配表(file allocation table,FAT)。

按这种方式组织整个块可以存放数据,进而随机存取容易的多,虽然仍然顺着链表在文件中查找给定的偏移量但是整个链表都放在内存中,所以不需要任何磁盘引用,与前面的方法一致不管文件多大在目录项中只需记住一个整数,按照它就可以找到文件的全部块。缺点是必须把整个表都存放在内存中,对于200G的磁盘和1KB大小的块这张表格有2亿项,每一项对应2亿磁盘块中的一个块,没想至少3个字节,为了提高查找速度有时需要四个字节,根据系统对空间或时间的优化方案,这张表格要占用600M或800M不太实用。

很显然FAT方案对大磁盘而言不太合适。

原创粉丝点击