文件分配表(FAT)及其结构
原链接:https://blog.csdn.net/qianjintianguo/article/details/712590?utm_source=blogxgwz6
文件分配表(FAT)是文件管理系统用来给每个文件分配磁盘物理空间的表格,它告诉操作系统,文件存放在磁盘的什么地方。
1.FAT表的大小及位置
FAT在磁盘上是安排在紧接DOS引导扇区(DBR)之后的。在FAT16系统中,它总是从DOS的逻辑1扇区开始。
在磁盘上共有FAT表的两个拷贝(一个是基本FAT表,另一个是FAT表的备份),两者在磁盘上前后紧排在一起,其大小根据分区的大小不同而变化,FAT16中的文件分配表情况可参见表6-3中的BPB信息项。
FAT表之后紧接着是根目录,根目录之后是数据区。
图6-1说明了常用磁盘上各数据区中DBR、FAT及根目录FDT的相对位置和大小。在硬盘中,FAT16的文件分配表(FAT)仍然是存放在逻辑1扇区开始的若干个扇区内,一个文件分配表占用多少个扇区根据硬盘分区和逻辑盘容量大小情况的不同而不同。
2.文件的簇号链
磁盘格式化后,用户文件是以簇为单位存放在数据区中,一个文件至少占用一个簇。当一个文件占用多个簇时,这些簇的簇号不一定是连续,但这些簇号间有由存储该文件时确定了的顺序,即每个文件都有其特定的“簇号链”。
设一个磁盘文件长度为4个簇,其首簇号为n1,簇号链为“n1->n4->n3->n2”。该文件在FAT中的簇号链,以及其逻辑空间和物理存放空间的对应关系如图6-4所示。
FAT表项:
第00簇 |
|
该磁盘文件所占据的逻辑空间: | ||||||||||
··· |
|
|||||||||||
第n1簇 | 簇号:n1------------>n4------------>n3-------------->n2 | |||||||||||
··· | 文件所占据的物理空间 | |||||||||||
第n2簇 | 不一定连续 | |||||||||||
··· | 该磁盘文件所占据的物理空间: | |||||||||||
第n3簇 |
|
|||||||||||
··· | 簇号: n1 n2 n3 n4 | |||||||||||
第n4簇 | ||||||||||||
··· |
图6-4FAT表中的文件簇链对应关系示意图
在磁盘上的每一个可用的簇在FAT中就只有一个登记项,通过在对应簇号的登记项内填入“表项值”来表明数据区中的该簇是否占用、空闲或是已损坏的。损坏的簇是在格式化的过程中,通过FORMAT命令发现。在一个簇中,只要有一个扇区有问题,该簇就不能够使用。
磁盘上的簇在FAT中的表项占12、16或32位。在FAT16文件系统中,每簇在FAT中所取表项值是占12位还是16位与所用磁盘的容量有关,12位表项值可表示4096个簇,若磁盘的簇数大于4096,则用16位表项值。一般来说,软盘和小于20740个扇区(10MB)的硬盘DOS分区可用12位映射一个簇,如多于20740个扇区的硬盘分区,则采用16位的FAT。FAT12和FAT16表项的组成如图6-5和6-6所示。
图6-5 12位FAT表项的组成
图6-6 16位FAT表项的组成
FAT文件系统是以簇为单位给文件分配磁盘空间的,每个簇在FAT表中占有一个登记项。所以,在FAT表中,簇编号也即为登记项的编号。每一个登记项作为一个簇的标志信息按照FAT12、FAT16和FAT32结构的不同分别为1.5个字节、2个字节和4个字节。该标志信息可取的表项值及其含义如表6-5所示。
表6-5文件分配表中的每个簇号可取的表项值及其含义
表项值(12位) | 表项值(16位) | 表项值(32位) | 簇描述信息含义 |
000H | 0000H | 00000000H | "0"值(未分配使用) |
001H--FEFH | 0001--FFEFH | 00000001--FFFFFFEFH | "一个簇号"(已占用) |
FF0H--FF6H | FFF0--FFF6H | FFFFFFF0--FFFFFFF6H | 保留 |
FF7H | FFF7H | FFFFFFF7H | 坏簇 |
FF8H--FFFH | FFF8H--FFFFH | FFFFFFF8--FFFFFFFFH | "EOF"(文件结束簇) |
从表6-5中可看出,簇在FAT中的占用1.5个字节、2个字节或4个字节的登记项必须是下列值之一:
·一个“0”值,表示这个簇未被分配使用。
·一个“001H~FEFH”、“0001H~FFEFH”或“00000001H~FFFFFFEFH”之间的值,表示该簇已经被占用,且该值即是该簇所在文件中下一个簇号的指针。
·一个“BAD”(FF7H、FFF7H或FFFFFFF7H),表明该簇有坏扇区,不能使用。
一个“EOF”(FF8H~FFFH、FFF8H~FFFFH或FFFFFFF8H~FFFFFFFFH之间的任一值),表明该簇是文件中的最后一簇。
在FAT的簇登记项中,0号登记项和1号登记项是表头,簇的登记项从2号开始。系统隐含文件IO.SYS所在的首簇号总是0002。
3.FAT表的组成格式及功能
综上所述,现将FAT表的组成格式及功能总结如下:
·表明磁盘类型。FAT的第0簇和第1簇为保留簇,其中第0字节(首字节)表示磁盘类型,其值与BPB中磁介质说明符对应的磁盘类型相同。
·表明一个文件所占用各簇的簇链分配情况。FAT从002簇开始分配给文件。表项值“001H--FEFH”、“0001H--FFEFH”或“00000001H--FFFFFFEFH”中的任一值表明文件的下一簇号。文件的起始簇号由文件目录表(FDT)中每个目录登记项的第26、27字节决定,作为FAT的入口,起始簇号在FAT中的表项值即文件的第2簇号,第二簇号的表项值即第3簇号,依此类推,直到表项值为FF8H--FFFH、FFF8H--FFFFH或FFFFFFF8H--FFFFFFFFH,表示该簇为文件的最后一簇。
·标明坏簇和可用簇。若软盘格式化时发现坏扇区,即在相应簇的表项中写入FF7H(或FFF7H),表明该扇区所在簇不能使用,DOS就不会将它分配给用户文件。
磁盘上未用,但可用的“空簇”的表项值为000H(或0000H)。当需要存放新文件时,文件管理系统将它们按一定顺序分配给新文件。
虽然FAT表记录了文件所用的磁盘空间信息,但是DOS引导区、两个FAT表、文件目录区等并不由FAT表中的簇表示。
4.FAT表登记项与文件的簇链关系
以FAT16文件系统的16位登记项为例,文件寻找簇链的计算步骤为:
·假如我们已经从文件目录表(FDT)中查得该文件的起始簇号。
·将该起始簇号换为10进制数a,a即为查找下一簇号的本簇号。
·a*2(若是12位FAT项,则a*1.5的乘积取整),即得到FAT中的相对位移b该位置存放文件簇链的下一簇号。
·从该相对位移b开始取一个字(低位在前,高位在后。如果是12位的FAT项,则按以下原则:若本簇号a为偶数,则保留该字低12位,否则保留高12位)。
·重复以上簇链的查找过程,直至找到其值为FF8--FFF的簇号。
5.文件簇链的操作实例
下面用一个例子来说明文件簇链的查找过程:
·假如已经从FDT中知道一个在1.44MB软盘上文件11.TXT的起始簇号为02。
·a=02即为查找下一簇号的本簇号。
用DEBUG调出第一个FAT的内容如下:
A:/>DEBUG
-L CS:0 0 1 7 (将A盘第1扇区开始的7个扇区的根目录FAT读入内存)
-D CS:0 (显示FAT的部分内容)
0F74:0000 F0 FF FF 03 40 00 FF 5F-01 07 F0 FF FF FF FF FF ....@.._........
0F74:0010 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF ...............o
......
·由文件起始簇号2*1.5=3.0,取整后得3,即0003开始的一个字中存放下一簇号。
·从FAT的第3字节开始,取一个字4003。
·由于本簇号2为偶数,则保留低12位,003(第3簇)。
·重复以上的查找过程:
3*1.5=4.5,4.5取整后为4,即0004开始的一个字中存放下一簇号。
从FAT的第4字节开始,取一个字0040。
由于本簇号3为基数,则保留低12位,004(第4簇)。
·再重复以上的查找过程:
4*1.5=6,即0006开始的饿一个字中存放下一簇号。
从FAT的第6字节开始,取一个字5FFFH。
由于本簇号4为偶数,则保留低12位,FFFH(表明第4簇为结束簇)。
由此得到该文件的簇号链为:2=>3=>4。
文件分配表(FAT)及其结构的更多相关文章
- 硬盘结构介绍--mbr及分区
硬盘刚买来使用时需要经过分区然后格式化才能够使用,硬盘经过分区后,分区软件便会写一个主引导扇区,这个扇区位于硬盘的 0 磁道 0 柱面第1扇区(即0区)(注意:该扇区为隐含扇区,0道0面的全部扇区均为 ...
- FAT和EXFAT文件系统
文件系统 文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构:即在磁盘上组织文件的方法.在移动存储设备上比较常用的有FAT文件系统和ExFAT文件系统. FAT分区依据FAT表中每个簇链的所 ...
- 硬盘的结构和介绍,硬盘MBR详细介绍(超详细彩图)
一.物理结构 1.磁道,扇区,柱面和磁头数 硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等.每个盘片有两面,都可记录信息.盘片被分成许多扇形的区域,每个区域叫一 ...
- U盘FAT32文件系统
一.FAT文件系统分为四个部分 参考别人的博客 1.http://blog.163.com/ourhappines@126/blog/static/121363154201311811495492/ ...
- 基于stm32f103zet6的FAT16文件系统学习1(初识FAT16)
有了之前读写block的基础之后,准备弄个文件系统,之前没有接触过这东西,所以有很多都晕晕的,但是看到fat的源代码之后还是挺有信心的,因为之前一直过uboot,所以这个文件当然是小巫见大巫了.首先来 ...
- FAT32文件系统的存储组织结构(一)
对磁盘的物理结构,逻辑结构和存储结构有了比较深入的了解后,我们来仔细探讨FAT32文件系统的存储组织结构.说到文件系统的组织结构,我们应该马上意识到,这指的是文件系统在同一个分区内的组织结构,在这个话 ...
- [OS] 操作系统常考知识点
转自:http://jennica.space/2017/03/21/os-principle/ 大纲如下: 1.操作系统概述2.操作系统运行环境3.进程线程模型4.处理器调度5.同步机制6.存储模型 ...
- 手机SD卡损坏补救措施
现在的应用程序越来越重,比如微信.来往之类的,稍微用一段时间,就会占用几十MB甚至上百MB的空间.而有时候甚至手机会出现"无响应"的现象,需要你选择"继续等待" ...
- 制作FAT12软盘以查看软盘的根目录条目+文件属性+文件内容
[-1]Before for specific info , please visit http://wiki.osdev.org/Loopback_Device [0]我们先上干货,看到效果后,我们 ...
随机推荐
- HDU 1006 模拟
Tick and Tick Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- Windows远程连接Ubuntu上的MySQL数据库
原因:mysql安装好后,默认监听3306端口,并且只允许localhost访问,只允许root用户在localhost上登录. 我的环境: Ubuntu16.04 ...
- git系列之---工作中项目的常用git操作
0.本地git的安装 官网下载 1.git 配置 git config user.name 查看 用户名 git config user.email 查看 邮箱 git config --glo ...
- C# protobuf自动更新cs文件
网上的教程大都是手动通过protoc编译, 比较难用 给当前工程添加"Google.Protobuf"和"Grpc.Tools"的引用(通过nuget), 然后 ...
- css3新增边框、阴影、边框、背景、文本、字体
css3和css有什么区别?简单来讲css3是css(层叠样式表)技术的升级版本,css3新特征有很多,例如圆角效果.图形化边界.块阴影与文字阴影.使用RGBA实现透明效果.渐变效果.使用@Font- ...
- BFC的语法
先说一下什么是BFC(Block Formatting Contexts) BFC:块级格式化上下文(独立的渲染区).通俗的说是块级元素布局逻辑或规则,想要触发BFC就要是块级元素,要不把它转为块级元 ...
- 来简单说说var,let,const,function,import,class
一.var和let var已经在JavaScript中存在很长一段时间了,但是它存在了一些不足的地方,接下来我们就来看看吧 首先var存在变量提升,这是怎么一回事呢,我们看下面代码 为什么是它呢,是因 ...
- 「Flink」使用Java lambda表达式实现Flink WordCount
本篇我们将使用Java语言来实现Flink的单词统计. 代码开发 环境准备 导入Flink 1.9 pom依赖 <dependencies> <dependency> < ...
- 在centos7上安装hadoop
1.使用hadoop是需要jdk环境的,因为hadoop里面有java程序,而运行java程序需要jdk. 2.从宿主机上传文件到虚拟机有很多方法,我选择的是在虚拟机安装lrzsz,安装lrzsz命令 ...
- 字节码操作、javassist使用
一.功能 1.动态生成新的类 2.动态改变某个类的结构(添加.删除.修改 新的属性.方法) 二.优势 1.比反射开销小,性能高 2.JAVAasist性能高于反射,低于ASM 使用javassis ...