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。