磁盘的物理结构
一个磁盘驱动器两个主要的移动部件;一个是磁盘片组合(disk assembly) ,另一个是磁头组合(head assembly)。磁盘片组合由一个或多个圆盘(platter)组成,它们围绕着一根中心主轴旋转。圆盘的上表面和下表面涂覆了一薄层磁性材料,二进制位被存储在这些磁性材料上。其中,0和1在磁材料中表现为不同的模式。
磁盘被组织成磁道(track),磁道是单个盘片上的同心圆。所有盘面上半径相同的磁道构成了柱面(cylinder),从磁盘的顶视图可以看到,磁道占据大部分盘面,最靠近主轴的区域除外。沿着磁道的数据密度大于沿着半径的数据密度。在2008年,一个典型的磁盘上每英寸有大约100 000个磁道,但是沿着磁道每英寸能够存储100万个二进制位。
磁道被组织成扇区(sector)。扇区是被间隙(gap)分割的圆的片段,间隙未被磁化为0或1
虽然图片中显示每一个磁道有相同的扇区数,但实际上,每个磁道的扇区数通常是不同的,靠外圈磁道的扇区数比靠内圈磁道的扇区数多。就读写磁盘而论,扇区是不可分割的单位;就磁盘错误而论,它也是一个不可分割的单位。倘若一部分磁化层被以某种方式损坏,以至于它不再能存储信息,那么那些包含这个部分的整个扇区也不能再使用。间隙大约占整个磁道的10%,用于帮助标识扇区的起点。通常,在磁盘与主存之间所传输数据的逻辑单元称为块,其由一个或多个扇区所组成。
第二个可移动部件是磁头组合,它承载着磁头。每一个盘面有一个磁头,它极其贴近地悬浮在盘面上,但是绝对不与盘面接触(否则就要发生“头损毁”,盘片被破坏)。磁头读出经过它下面的盘面的磁方向,也能改变其磁方向,以便在磁盘上写信息。每个磁头被固定在一个磁头臂上,所有盘面的磁头随着磁头臂一同移进移出,磁头臂是固定的磁头组合的一部分。
很显然,计算整个磁盘的容量的算法是:盘面数X磁道数X扇区数X扇区字节数
磁盘的逻辑结构
要组织磁盘上存储的数据,使得可以方便的存储和访问,就要实现数据的定位。数据的定位主要有两种方式:和。
CHS地址
早期硬盘存储空间采用3维地址结构描述:
C=Cylinder(柱面。若干盘体重叠,相同的磁道(track上)构成的一个立面体)
H=Head(磁头。一张盘有两面(side),每面一个磁头)
S=Sector(扇区。盘体上的圆形轨迹为磁道,把磁道等分为若干存储区域)
磁盘的容量=柱面总数×磁头总数×每道扇区总数×每扇区容量(512byte)
LBA地址
LBA是逻辑块地址的简称,它是一种线性地址结构,它其实是由CHS计算的扇区编号顺序编址,即0柱0面1扇区为LBA 0扇区。现在的硬盘厂家为了保持兼容性,仍然提供了虚拟的CHS参数,可在BIOS设置中看到。对硬盘的数据访问是靠系统调用INT 13H中断程序实现的,它将欲访问的数据地址传递给硬盘接口电路(ATA接口)完成读写操作。
528MB的限制:早期的硬盘的CHS参数被限制为:磁头数最大16,柱面数最大1024,扇区最大63,每扇区字节数为512字节。因此1024×16×63×512B≈528MB。
8GB容量限制:将柱面数增加到16384,其他不变,共计24bit,则硬盘容量最大为:16384×16×63×512B≈8.4GB。
32GB容量限制:硬盘采用了虚拟CHS值,使得柱面数为65535,其他不变,共计26bit,这样,磁盘的总容量最大为: 65535×16×63×512B≈32GB。
137G 容量限制:由于普遍使用了LBA寻址模式和虚拟CHS参数,将扇区数进一步增加为255,共计28位,将其乘积作为LBA值。这样系统使用28位的LBA参数,约计137GB。
磁盘的存储结构
刚刚从厂商处购来的新硬盘既无任何数据,也不能写入任何数据,必须先进行低级格式化,FDISK 分区,FORMAT 高级格式化后方可使用。对硬盘的这一系列初始化工作,称之为硬盘准备。过程如下:低级格式化---------------FDISK 分区-------------------FORMAT 高级格式化。
(1)低级格式化:磁盘为了达到随机存取的目的,需要在磁盘上划分出磁道,然后又在磁道划分出扇区,每个扇区以扇区间隙、同步引导字节和扇区编号作为扇区的起始,然后才是扇区的内容,后面还有校验标记。计算机就是凭借这些标记信息来识别扇区的。低级格式化就是在磁道上标上这些标记而已。所以低级格式化的操作实际上仅仅是一个简单的写过程,写的不是数据而是标记。同时低级格式化还会剔出坏磁道。
(2)FDISK分区:允许整个物理硬盘在逻辑上划分成最多4个主分区(其中可以有一个扩展分区),以实现多个操作系统共享硬盘空间。在建立了扩展分区的前提下,可以将扩展分区划分成一个或多个逻辑分区。在硬盘上建立分区表的同时,FDISK 会把主引导记录MBR 写到硬盘的主引导记录(柱面0,磁头0,扇区1),并激活一个用户指定的主分区。下面要特别介绍一下主引导记录MBR :
MBR 称为硬盘主引导记录。它是在分区时由FDISK 建立在硬盘柱面0,磁头0,扇区1 上的,总共占用512 个字节,包括一小段执行代码(主引导代码)、磁盘特征和硬盘分区表。主引导记录(以及后面介绍的引导扇区)结束的两个字节必须是引导自举标记0x55AA。磁盘特征位于0x01B8, 指定磁盘操作系统。
主引导代码实现下列功能: a. 扫描分区表查找活动分区; b. 寻找活动分区的起始扇区; c. 将活动分区的引导扇区读到内存; d. 执行引导扇区的运行代码。 如果主引导代码未完成这些功能, 系统会显示下列的错误信息之一: Invalid partition table, Error loading operating system, Missing operating system.
主引导记录MBR 由4 个部分组成:a.主引导程序(偏移地址0000H~0088H),它负责从活动分区中装载并运行系统引导程序;b.出错信息数据区(偏移地址0089~00E1 为出错信息,10E2H~10BD 全为0 字节); c.分区表(DPT,Disk Partition Table,含4 个分区项,偏移地址01BEH~01FDH,每个分区表项长16 个字节,共64 字节),即主分区和扩展分区的信息;d.结束标志(偏移地址01EFH~01FFH ),这两个字节值为结束标志55AA,如果该标志错误系统就不能启动.
注意:硬盘的引导记录是不属于任何一个操作系统的,它先于所有的操作系统而被调入内存并发挥作用,然后才将控制权交给主分区内的操作系统,并让主分区信息表来管理硬盘。
(3)高级格式化:
这一步之前的所有操作,都是与具体的文件系统没有任何关系的,从现在开始,才涉及到具体的文件系统,换句话说,高级格式化是与我们要建立的文件系统相关的,因此我们调用高级格式化命令时,文件类型是必须提供的参数之一。
在DOS/WINDOWS系统中,用FORMAT对指定分区进行高级格式化,将分区空间划分逻辑扇区,生成DOS 引导扇区(即逻辑0 扇区)DBR,文件分配表FAT 和根文件目录表FDT。
在LINUX系统中,需要使用mkfs命令将分区进行格式化,建立想要的文件系统,如EXT2,EXT3,等。
经过以上三步后,磁盘的存储结构看起来如下图所示: