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。

FAT文件系统学习和思考的更多相关文章

  1. FAT文件系统规范v1.03学习笔记---4.文件和目录数据区之长目录项

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  2. FAT文件系统规范v1.03学习笔记---3.根目录区之FAT目录项结构

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  3. FAT文件系统规范v1.03学习笔记---1.保留区之 Fat32 FSInfo扇区结构和备份启动扇区

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  4. FAT文件系统规范v1.03学习笔记---2.FAT区之FAT数据结构(Fat Data Structure)

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  5. FAT文件系统规范v1.03学习笔记---1.保留区之启动扇区与BPB

    1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...

  6. FAT32文件系统学习(3) —— 数据区(DATA区)

    FAT32文件系统学习(3) —— 数据区(DATA区) 今天继续学习FAT32文件系统的数据区部分(Data区).其实这一篇应该是最有意思的,我们可以通过在U盘内放入一些文件,然后在程序中读取出来: ...

  7. 关于分布式锁原理的一些学习与思考-redis分布式锁,zookeeper分布式锁

    首先分布式锁和我们平常讲到的锁原理基本一样,目的就是确保,在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法.变量. 在一个进程中,也就是一个jvm 或者说应用中,我们很容易去处理控制,在j ...

  8. <FAT文件系统> -- DBR

    FAT16是比较简单的文件系统,相比NFTS等文件系统,该系统的学习比较easy,容易上手,同时对于数据存储的机理以及数据的恢复有一定的帮助.FAT文件系统有一定的弊端,不能支持太大的数据存储. FA ...

  9. FAT32文件系统学习(上)

    2011-06-02 22:30:48 目的:需要编写SD读图片的底层驱动程序.所以要了解一个SD卡常用文件系统基本概念.累计学习用时2.5小时. 一,FAT32的保留区 1,引导扇区 :引导扇区是F ...

随机推荐

  1. 如何选择版本控制系统之二---Git的研发应用场

    之前写了一篇<如何选择版本控制系统 ---为什么选择Git版本控制系统>,地址是:http://www.cnblogs.com/goldenfish/p/6876864.html,有兴趣的 ...

  2. redis入门指南-第7章-管理

    7.1 持久化 1.RDB方式 2.AOF方式 Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(poi ...

  3. javaWeb学习总结(4)- HTML 关于head中的<meta>标签

    关于<meta> 标签 <meta>标签出现在网页的标题部分,这些信息并不会出现在浏览器页面的显示之中,只会显示在源代码中.也就是在...当中. 主要用途是设置网页语言的编码方 ...

  4. R语言-Kindle特价书爬榜示例 & 输出HTML小技巧(转)

    自从买了kindle以后,总是想要定期刷有没有便宜的书,amazon经常有些1元/2元的书打特价,但是每次都去刷那些榜单太麻烦了,而且榜单又不能按照价格排名,捞书有点累 所以自己用R语言的rvest包 ...

  5. 【R与数据库】R + 数据库 = 非常完美

    前言 经常用R处理数据的分析师都会对dplyr包情有独钟,它强大的数据整理功能让原始数据从杂乱无章到有序清晰,便于后期进一步的深入分析,特别是配合上数据库的使用,更是让分析师如虎添翼,轻松搞定Exce ...

  6. More 3D Graphics (rgl) for Classification with Local Logistic Regression and Kernel Density Estimates (from The Elements of Statistical Learning)(转)

    This post builds on a previous post, but can be read and understood independently. As part of my cou ...

  7. 详解C# Tuple VS ValueTuple(元组类 VS 值元组)

    C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化,并且网上也有大量的介绍,这里利用详尽的例子详解Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了解Val ...

  8. Java常用类之String类、Stringbuffer和Random类练习

    定义一个StringBuffer类对象, 1)使用append方法向对象中添加26个字母,并倒序遍历输入 2)删除前五个字符 package 第十一章常用类; /** * 定义一个StringBuff ...

  9. php 数据连接 基础

    1.造连接对象 $db= new MYSQLi("localhost","root","123","test_0306" ...

  10. 基于Vue全家桶开发的前端组件管理平台

    项目背景 项目背景是外包类建站公司里,设计环节沉淀了大量可复用组件,设计师往往只需要微调组件就拼凑出页面,交付给前端,理论上这些组件在前端也可以复用,但实际上前端每次都要重新实现整个页面,浪费很多人力 ...