注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

文件分配表(FAT)及其结构 (转载)  

2011-03-03 09:27:52|  分类: 汇编与逆向 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
文件分配表(FAT)及其结构
文件分配表(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簇

 

···

n4

···

FFF

···

n2

···

n3

···

该磁盘文件所占据的逻辑空间:

···

 

 

 

 

···

第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所示。
                   文件分配表(FAT)及其结构 (转载) - 还东国 - 还东国的博客
                                    图6-5 12位FAT表项的组成
                               文件分配表(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"(文件结束簇)
  评论这张
 
阅读(853)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017