2024年3月31日发(作者:)
硬盘的数据结构
在上文中,我们谈了数据在硬盘中的存储的一般原理。为了能更深入的了解硬盘,我们还必
须对硬盘的数据结构有个简单的了解。硬盘上的数据按照其不同的特点和作用大致可分为5
部分:MBR区、DBR区、FAT区、DIR区和DATA区。我们来分别介绍一下:
(1)MBR区
MBR(Main Boot Record),按其字面上的理解即为主引导记录区,位于整个硬盘的0磁道0
柱面1扇区。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节(偏
移0--偏移1BDH),另外的64个字节(偏移1BEH--偏移1FDH)交给了DPT(Disk Partition
Table硬盘分区表)(见下表),最后两个字节"55,AA"(偏移1FEH- 偏移1FFH)是分区的
结束标志。这个整体构成了硬盘的主引导扇区。
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是
检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,
并将控制权交给启动程序。MBR是由分区程序(如)所产生的,它不依赖任何操
作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。
下面,我们以一个实例让大家更直观地来了解主引导记录:
例:80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00
在这里我们可以看到,最前面的"80"是一个分区的激活标志,表示系统可引导;"01 01 00"
表示分区开始的磁头号为01,开始的扇区号为01,开始的柱面号为00;"0B"表示分区的系
统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS);"FE BF FC"表示分区结束
的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764;"3F 00 00 00"表示首
扇区的相对扇区号为63;"7E 86 BB 00"表示总扇区数为12289622。
(2)DBR区
DBR(Dos Boot Record)是操作系统引导记录区的意思。它通常位于硬盘的0磁道1柱面1
扇区,是操作系统可以直接访问的第一个扇区,它包括一个引导程序和一个被称为BPB(Bios
Parameter Block)的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给
它时,判断本分区根目录前两个文件是不是操作系统的引导文件(以DOS为例,即是
和)。如果确定存在,就把其读入内存,并把控制权 交给该文件。BPB参数块记
录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个
数,分配单元的大小等重要参数。
(3)FAT区
在DBR之后的是我们比较熟悉的FAT(File Allocation Table文件分配表)区。在解释文件
分配表的概念之前,我们先来谈谈簇(cluster)的概念。文件占用磁盘空间时,基本单位不
是字节而是簇。簇的大小与磁盘的规格有关,一般情况下,软盘每簇是1个扇区,硬盘每簇
的扇区数与硬盘的总容量大小有关,可能是4、8、16、32、64……
通过上文我们已经知道,同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域
内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储。(见
图6)硬盘上的文件常常要进行创建、删除、增长、缩短等操作。这样操作做的越多,盘上
的文件就可能被分得越零碎(每段至少是1簇)。但是,由于硬盘上保存着段与段之间的连
接信息(即FAT),操作系统在读取文件时,总是能够准确地找到各段的位置并正确读出。
不过,这种以簇为单位的存储法也是有其缺陷的。这主要表现在对空间的利用上。每个文件
的最后一簇都有可能有未被完全利用的空间(称为尾簇空间)。一般来说,当文件个数比较
多时,平均每个文件要浪费半个簇的空间。
好了,我们言归正传,为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件
占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号,对一个文件的最后
一簇,则要指明本簇无后继簇。这些都是由FAT表来保存的,表中有很多表项,每项记录
一个簇的信息。
由于FAT对于文件管理的重要性,所以FAT有一个备份,即在原FAT的后面再建一个同样
的FAT。初形成的FAT中所有项都标明为"未占用",但如果磁盘有局部损坏,那么格式化程
序会检测出损坏的簇,在相应的项中标为"坏簇",以后存文件时就不会再使用这个簇了。FAT
的项数与硬盘上的总簇数相当,每一项占用的字节数也要与总簇数相适应,因为其中需要存
放簇号。FAT的格式有多种,最为常见和为读者所熟悉的是FAT16和FAT32,其中FAT16
是指文件分配表使用16位数字,由于16位分配表最多能管理65536(即2的16次方)个
簇,也就是所规定的一个硬盘分区。
由于每个簇的存储空间最大只有32KB,所以在使用FAT16管理硬盘时,每个分区的最大存
储容量只有(65536×32 KB)即2048MB,也就是我们常说的2G。现在的硬盘容量是越来越
大,由于FAT16对硬盘分区的容量限制,所以当硬盘容量超过2G之后,用户只能将硬盘划
分成多个2G的分区后才能正常使用,为此微软公司从Windows 95 OSR2版本开始使用
FAT32标准,即使用32位的文件分配表来管理硬盘文件,这样系统就能为文件分配多达
4294967296(即2的32次方)个簇,所以在簇同样为32KB时每个分区容量最大可达65G
以上。此外使用FAT32管理硬盘时,每个逻辑盘中的簇长度也比使用FAT16标准管理的同
等容量逻辑盘小很多。由于文件存储在硬盘上占用的磁盘空间以簇为最小单位,所以某一文
件即使只有几十个字节也必须占用整个簇,因此逻辑盘的簇单位容量越小越能合理利用存储


发布评论