FAT文件系统学习和思考

FAT(File Allocation Table)文件系统

  前两天面试,导师说我基础差,要赶紧补起来了。今天晚上看了FAT32文件系统,基本的信息都是百度百科中"FAT文件系统"词条中的,做了一点总结,整理成表,问题的原因有自己的理解,可能有偏差。看的过程中有几个问题,自己思考外加网上百度,有一点解释,但是又不太通的地方,网上的回答也不太深入,可能得找本书,才搞得清楚一些。下面进入正文:

1.基本信息

  FAT文件系统中的扇区大小一般为512Byte,也就是2^-1KB,2^11M;簇大小是不固定的,随着分区的增大而扩增。

  FAT12 FAT16 FAT32
磁盘容量范围 最大为8M 32M—2GB 512M-8TB
问题 文件碎片严重 大容量磁盘利用率低

1.运行速度比FAT16慢

2.不能向下兼容

3.分区小于512M时,FAT32不起作用

4.单个文件不能大于4G(具体为4G-2byte)

原因  

当分区容量增大时,簇大小也增大(最大为64KB)

若是存储小文件时,比如文件大小为2k,则剩余的62k都为空闲区域,被浪费

1.分配表增大,更复杂

3.见思考

4.见思考

2.关于FAT的一些思考

  (1)为什么FAT32文件系统中簇的大小不固定/为什么FAT系统中簇的大小随着分区大小的增大而扩增?

  回答这个问题首先要清楚一个公式:

              分区大小(M)=簇的个数(cluster)*簇的大小(sector/cluster簇所占扇区个数)*扇区大小(2^-11M)

  簇的个数是不变的(和分区表的位数有关,eg:FAT12为2^12=4096,FAT16为2^16=65536……),扇区大小一般为512Byte,因此要增大分区大小,只能通过增大簇的大小来实现。

这里其实有点疑惑,似乎簇的个数也是可以改变的,看到了FAT32文件系统簇的个数必须大于65527个这样的说法,暂时还不清楚,先记录下来,后续学习在更改。

8.2加注:FAT32文件系统簇的个数必须大于的是65537,并不是65527。65536正好是2^16,可能的原因是当文件簇个数小于等于65536时,16位的FAT表已经够用,因此不需要使用32位的。

(2)为什么FAT32文件系统单个文件大小不能超过4G(4G-2Byte)?

  这个限制和文件目录项有关。

文件目录项中有一个属性是文件长度,该属性占的字节数是4字节,也就是32bit,而2^32bit=4GB,因此文件长度的最多值为4GB。这个解释是从网上看到的,百度百科上说:准确的说这个限制是4GB-2bit,这减去的2Byte做了什么,一并后续补充吧。

8.2加注:因为目录项的前两个字节在设计文件系统的时候保留,并不用来存储目录内容,因此要除去这两个字节。

(3)为什么FAT32文件分区最小为512M?

  初步认为是和前面提到的FAT32文件系统的簇个数最小为65527个有关,但是按照这样计算:

FAT32最小的簇大小为4KB,也就是8个扇区(4/2^-1)使用分区大小计算公式:

  分区大小=65527*8*2^-11≈255.9,这样还是有点不对。╮(╯▽╰)╭不懂。

 

今晚就只看了一点,提出的三个问题,解释都有点问题,后续再深入学习吧,先睡!明天第一天实习↖(^ω^)↗

8.2加注:因为FAT32文件系统簇的个数最少为65537个,最小簇的大小为4KB,使用上面的公式计算分区大小为:

  65537*8*2^-11≈256.0039。

posted @ 2016-07-24 23:59  姜姜csu  阅读(936)  评论(0编辑  收藏  举报