硬盘的数据结构
在上文中,我们谈了数据在硬盘中的存储的一般原理。为了能更深入的了解硬盘,我们还
必须对硬盘的数据结构有个简单的了解。硬盘上的数据按照其不同的特点和作用大致可分
为 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)
是分区的结束标志。这个整体构成了硬盘的主引导扇区。大致的结构如图 5:
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用
是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系
统,并将控制权交给启动程序。MBR 是由分区程序(如 Fdisk.com)所产生的,它不依赖
任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。
下面,我们以一个实例让大家更直观地来了解主引导记录:
例: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 为例,
即是 Io.sys 和 Msdos.sys)。如果确定存在,就把其读入内存,并把控制权 交给该文件。
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 标准管理
的同等容量逻辑盘小很多。由于文件存储在硬盘上占用的磁盘空间以簇为最小单位,所以
某一文件即使只有几十个字节也必须占用整个簇,因此逻辑盘的簇单位容量越小越能合理
利用存储空间。所以 FAT32 更适于大硬盘。
(4)DIR 区
DIR(Directory)是根目录区,紧接着第二 FAT 表(即备份的 FAT 表)之后,记录着根目
录下每个文件(目录)的起始单元,文件的属性等。定位文件位置时,操作系统根据 DIR
中的起始单元,结合 FAT 表就可以知道文件在硬盘中的具体位置和大小了。
(5)数据(DATA)区
数据区是真正意义上的数据存储的地方,位于 DIR 区之后,占据硬盘上的大部分数据空间。
数据在硬盘上的存储
(创易工作室 2001 年 06 月 26 日 11:37)
硬盘是现在计算机上最常用的存储器。我们都知道,计算机之所以神奇,是因为它具有高
速分析处理数据的能力。而这些数据都被以文件的形式存储在硬盘里。不过,计算机可不
像人那么聪明。在读取相应的文件时,你必须要给出它相应的规则。这就是分区概念的形
成。 分区从实质上说就是对硬盘的一种格式化。当我们创建分区时,就已经设置好了硬盘
的各项物理参数,指定了硬盘主引导记录(即 MasterBootRecord,一般简称为 MBR)和引导
记录备份的存放位置。而对于文件系统以及其他操作系统管理硬盘所需要的信息则是通过
之后的高级格式化,即 Format 命令来实现。
硬件分区后,将会被划分为面、磁道和扇区。需要注意的是,这些只是个虚拟的概念,并
不是真正在硬盘上划道子^_^。先从面说起,硬盘一般是由一片或几片圆形薄膜叠加而成。
我们所说,每个圆形薄膜都有两个"面"(Side),这两个面都是用来存储数据的。按照面的多
少,依次称为 0 面、1 面、2 面……由于每个面都专有一个读写磁头,也常用 0 头(head)、1
头……称之。按照硬盘容量和规格的不同,硬盘面数(或头数)也不一定相同,少的只有
2 面,多的可达数十面。各面上磁道号相同的磁道合起来,称为一个柱面(cylinder)(见
图 1)。
图 1
上面我们提到了磁道的概念。那么究竟何为磁道呢?大家都知道,读写硬盘时,磁头依靠
磁盘的高速旋转引起的空气动力效应悬浮在盘面上,与盘面的距离不到 1 微米(约为头发
直径的百分之一)。由于磁盘是旋转的,则连续写入的数据是排列在一个圆周上的。我们
称这样的圆周为一个磁道(Track)。(见图 2)如果读写磁头沿着圆形薄膜的半径方向移
动一段距离,以后写入的数据又排列在另外一个磁道上。
图 2
根据硬盘规格的不同,磁道数可以从几百到数千不等;一个磁道上可以容纳数 KB 的数据,
而主机读写时往往并不需要一次读写那么多,于是,磁道又被划分成若干段,每段称为一
个扇区(Sector)。一个扇区一般存放 512 字节的数据。扇区也需要编号,同一磁道中的
扇区,分别称为 1 扇区,2 扇区。。。。这里需要注意的是,硬盘在划分扇区时,和一般
的软盘有一定的区别。软盘的一个磁道中,扇区号依次编排,即 2 号与 1 号相邻,3 号与 2
号相邻,以此类推。而在硬盘的一个磁道中,扇区号是按照某个间隔跳跃着编排的。我们
举一个例子来说明:在某个硬盘上,以实际存储位置而论,2 号扇区并不是 1 号扇区后的
第一个,而是第 5 个,3 号扇区又是 2 号扇区后的第 5 个,以此类推。这个"5"就是我们说
的交叉因子。(见图 3)当然,这个交叉因子的设定并不是绝对的,每个种类的硬盘为根
据自身的情况加以变化。选择适当的交叉因子,可使硬盘驱动器读写扇区的速度与硬盘的
旋转速度相匹配,提高存储数据的速度。
图 3
计算机对硬盘的读写,处于效率的考虑,是以扇区为基本单位的。即使计算机只需要硬盘
上存储的某个字节,也必须一次把这个字节所在的扇区中的 512 字节全部读入内存,再使
用所需的那个字节。不过,在上文中我们也提到,硬盘上面、磁道、扇区的划分表面上是
看不到任何痕迹的,虽然磁头可以根据某个磁道的应有半径来对准这个磁道,但怎样才能
在首尾相连的一圈扇区中找出所需要的某一扇区呢?原来,每个扇区并不仅仅是由 512 个
字节组成的,在这些由计算机存取的数据的前、后两端,都另有一些特定的数据,这些数
据构成了扇区的界限标志,标志中含有扇区的编号和其他信息。计算机就凭借着这些标志
来识别扇区(见图 4)。
图 4
(责任编辑 Jacky school@staff.ccidnet.com)
评论1