- 1 扇区头标
- 将每个环形磁道等距离切割,形成等长度的圆弧,每个圆弧就是一个扇区。划分扇区的目的是为了使数据存储更加条理化,就像一个大仓库要划分更多的房间一样。每个扇区可以存放512个字节的数据和一些其他信息。一个扇区有两个主要部分:存储数据地点的标识符和存储数据的数据段。
- 扇区头标包括组成扇区三级地址的三个数字:
- 。扇区所在的柱面
- 。磁头编号
- 。扇区在磁道上的位置,即扇区号
柱面(Cylinder),磁头(Header)和扇区(Sector)三者简称CHS,所以扇区的地址又称为CHS地址。
- 磁头通过读取当前扇区的头标中的CHS地址,就可以知道当前是处于盘片上的哪个位置,比如是内圈还是外圈,哪个磁头正在读写(同一时刻,只能有一个磁头在读写)等。
- CHS编址方式在早期的小容量硬盘中非常流行,但是目前的大容量硬盘的设计和低级格式化方式已经有所变化,所以CHS编址方式已经不再使用,而转为LBA编址方式。LBA编址方式不再划分柱面和磁头号,这些数据由硬盘自身保留,而磁盘对外界提供的地址全部为线性地址,机LBA地址。
- 所谓线性,指的是把磁盘想象成只有一个磁道,这个磁道是无限长的直线,扇区为这条直线上的等长线段,从1开始顺序编号,直到无限远。显然,这种方式屏蔽了柱面、磁头这些复杂的东西,向外提供了简单的方式,所以非常利于编程。然而磁头中的控制电路依然要找到某个LBA地址到底对应着哪个磁道哪个磁头上的哪个扇区,这种对应关系保存在磁盘控制电路的ROM芯片中,磁盘初始化的时候载入缓存中以便随时查询。
头标中还包括一个字段,其中有显示扇区能否可靠存储数据,或者是已经发现某个故障因而不宜使用的标记。有些硬盘控制器在扇区头标中还有指示字,可在原扇区出错时指引磁头跳转到替换扇区或磁道。最后,扇区头标以循环冗余校验CRC值作为结束,以供控制器检验扇区头标的读出情况,确保准确无误。
2扇区编号和交叉因子
- 给扇区编号的最简单方法是1,2,3,4,5,6等顺序编号。如果扇区按顺序绕着磁道依次编号,那么磁盘控制电路在处理一个扇区的数据期间,可能会因为磁盘旋转太快,没等磁头反应过来,已经超过扇区间的间隔而进入了下一个扇区的头标部分,则此时磁头若想读取这个扇区的记录,就要再等一圈,等到盘片旋转回来之后再次读写,这个等待时间无疑是非常浪费的。
- 显然要解决这个问题,靠加大扇区间的间隔是不现实的,那会浪费很多磁盘空间,许多年前,IBM的一位杰出工程师想出了一个绝妙的办法,即对扇区不使用顺序编号,而是使用一个交叉因子进行编号的。交叉因子用比值的方法表示,如3:1表示磁盘的第一个扇区为1号扇区,跳过2个扇区即第4个扇区为2号扇区,这个过程持续下去直到每个物理扇区编上逻辑号为止。
- 当设置1:1的交叉因子时,如果硬盘控制器处理信息足够快,那么读出磁道上的全部扇区只需要旋转一周。但如果硬盘控制器的处理动作没有这么快,则只有磁盘所转的次数等于针对这个磁道的交叉因子时,才能读出磁道上的全部数据。将交叉因子设定为2:1是,磁头要读出磁道上的全部数据,磁盘只需转两周。如果2:1的交叉因子仍不够慢,这时可将交叉因子调整为3:1。
在早期的硬盘管理工作中,设置交叉因子需要用户自己完成。用BIOS中的低级格式化程序对硬盘进行低级格式化时,就需要指定交叉因子,有时还需要设置几种不同的值来比较其性能,而后确定一个比较好的值。现在的硬盘BIOS已经自己解决了这个问题,所以一般低级格式化程序中就不再提供这一设置选项了。
系统将文件存储到磁盘上时,是按柱面、磁头、扇区方式进行的,即最先是第1磁道的第1磁头下(也就是第1盘面的第1磁道)所有的扇区,然后是同一柱面的下一磁头,直到整个柱面都存满。系统也是以相同的顺序去读出数据。读数据时通过告诉磁盘控制器要读出数据所在的柱面号、磁头号和扇区号(物理地址的三个组成部分)进行读取(现在都是直接使用LBA地址来告诉磁盘所要读写的扇区)。磁盘控制电路则直接将磁头部件步进到相应的柱面,选中相应磁头,然后立即读取当前磁头下所有的扇区头标地址,然后把这些头标中的地址信息与期待检出的磁头很柱面号做比较。如果不是要读写的扇区号则读取扇区头标地址进行比较,直到相同以后,控制电路知道当前磁头下的扇区就是要读写的扇区,然后立即让磁头读写数据。
如果是读数据,控制电路会计算此数据的ECC码,然后把ECC码与已记录的ECC码相比较;如果是写数据,控制电路会计算出此数据的ECC码,存储到数据部分的末尾。在控制电路对此扇区中的数据进行必要的处理期间,磁盘会继续旋转。由于对信息的后处理需要耗费一定的时间,在这段时间内磁盘可能已旋转了相当的角度。
交叉因子的确定是一个系统级的问题。一个特定的硬盘驱动器的交叉因子取决于磁盘控制器的速度、主板的时钟速度、与控制电路相连的输出总线的操作速度等。如果磁盘的交叉因子太高,就需多花一些时间等待数据在磁盘上存入和读出。相反,太低也同样影响性能。
前面已经说过,系统在磁盘上写入信息时,写满一个磁道后会转到同一柱面的下一个磁头,当柱面写满时,再转向下一柱面。从同一盘面的一个磁道转到另一个磁道,也就是从一个柱面转到下一个柱面,这个动作叫做换道。在换道期间磁盘始终保持旋转,这就会带来一个问题:假定系统刚刚结束了对一个磁道前一个扇区的写入,并且已经设置了最佳交叉因子比值,现在准备在下一磁道的第一扇区写入,这时必需等到磁头换道结束,让磁头部件重新定位到下一道上。如果这种操作占用的时间超过了一点,尽管是交叉存取,磁头仍会延迟到达。这个问题的解决办法是以原先磁道所在位置为基准,把新的磁道上全部扇区号移动约一个或几个山区的位置,这就是磁头扭斜。磁头扭斜可以理解为柱面与柱面之间的交叉因子,已经由生产厂家设置好,一般不用去改变它。磁头扭斜的更改比较困难,但是它们只在文件很长,超过磁道结尾进行读出和写入时才发挥作用,所以扭斜设置不正确所带来的时间损失比采用不正确的扇区交叉因子值带来的损失要小得多。交叉因子和磁头扭斜可用专用工具软件来测试和更改,更具体的内容这里就不再详述了,毕竟现在很多用户没有见过这些参数。
注释:最初,硬盘低级格式化程序只是行驶有关磁盘控制器的专门职能来完成设置任务,由于这个过程可能会破坏低级格式化的磁道上的全部数据,现在也极少采用了。
扇区号存储在扇区头标中,扇区交叉因子和磁头扭斜的信息也存放在这里。
扇区交叉因子由写入扇区头标中的数字设定,所以,每个磁道可以有自己的交叉因子。在大多数驱动器中,所有磁道都有相同的交叉因子。但有时因为操作上的原因,也可能导致各磁道上有不同的扇区交叉因子。比如在交叉因子重置程序工作时,由于断电或人为中断会造成一些磁道的交叉因子发生了改变。而另一些磁道的交叉因子没有改变。这种不一致性对计算机不会产生不利影响,只是有最佳交叉因子的磁道要比其他磁道的工作速度更快。