Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363738
  • 博文数量: 84
  • 博客积分: 1970
  • 博客等级: 上尉
  • 技术积分: 970
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-13 20:42
文章分类
文章存档

2011年(1)

2010年(4)

2009年(29)

2008年(50)

我的朋友

分类:

2009-01-04 11:18:56

一个FAT(FAT12/FAT16/FAT32)文件系统卷由四个部分组成.

a.       保留区(Reserved Region) 

分区的保留区(Reserved Region)中的第一个扇区必须是BPB(BIOS Parameter Block) 此扇区也称作引导扇区” “保留扇区或是零扇区具体分为:

BS_DrvNum  一个字节 操作系统的参数  0x00为软盘 0x80为硬盘

BS_Reservedl 一个字节 保留 必须为0

BS_BootSig           扩展引导标记(0x29)

BS_VolID      四个字节  卷的序列号

BS_VolLab     11个字节  11个字长的卷标

BS_FilSysType   8个字节  “FAT12” “FAT16” “FAT” 表示格式类型

Executable Code  62字节  引导分区

b.       FAT

FATFile Allocation Table 文件分配表

操作系统分配磁盘空间按簇来分配的. 因此文件占用磁盘空间时,基本单位不这字节而是簇,即使某个文件只有一个字节,操作系统也会给他分配一个最小单元即一个簇. 为了可以将磁盘空间有序地分配给相应的文件,而读取文件的时候又可以从相应的地址读出文件,我们把整个磁盘空间分成32K字节的簇来管理,每个簇在FAT表中占据16位的位置,称为一个表项。FAT项数与硬盘上的总簇数相关(因为每一个项要代表一个簇,簇越多当然需要的FAT表项越多)。每一项占用的字节数也与总簇数有关(因为其中需要存放簇号,簇号越大当然每项占用的字节数就大).FAT的格式有多种,最为常见是FAT16FAT32,其中FAT16是指文件分配表使用16,由于16位分配表最多能管理65536(即216次方)个簇,又由于每个簇的存储空间最大只有32KB,所以在使用FAT16管理硬盘时,每个分区的最大存储量只有(65536*32KB)2048MB,也就是我们常说2G,现在的硬盘容量越来越大,由于FAT16对硬盘分区的容量限制,所以超过2G之后,用户只能将硬盘分成多个2G的分区后才能正常使用.

         对于大文件,需要分配多个簇.用一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,而往往会分成若干个段,像一条链子一样存放。这种存储方式称为文件的链式存储.为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号,对一个文件的最后一簇,则要指明本簇无后继簇。这些都是由FAT表来保存的FAT表的对应表项中记录着它所代表的有关信息:诸如是否空,是否是坏簇,是否已经是某个文件的尾簇.

         由于FAT对于文件管理的重要性,所以FAT有一备份,即在原FAT的后面再建一个同样的FAT.

c.       根目录区(Root Directory Region)

对于FAT16紧接着第二个FAT表后面一个扇区,就是根目录区了.根目录区中存放目录项,每个目录项为32个字节,记录一个文件或目录的信息(长文件例外)以下为目录项的结构:

00H-07H  文件名   ASCII字符  不足8个时必须填满

08H-0AH  扩展名   ASCII字符  不足3个时必须填满

0BH  文件的属性 .0为只读 .1隐藏 .2系统 .3卷标 .4目录 .5存档

0CH  保留  10个字节

16H   上次更新的时间

18H   上次更新的日期

1AH   起始的簇号 如果文件有多簇号,可根据FAT中对应的信息可得下一簇号

1CH   文件长度

d.       文件和目录数据区

目录项所占的最后一扇区,便是真正存放数据或是目录的位置

阅读(1644) | 评论(0) | 转发(0) |
0

上一篇:ruby数组和哈西表

下一篇:select()函数

给主人留下些什么吧!~~