《大话存储》第3章

编程入门 行业动态 更新时间:2024-10-18 14:14:40

《<a href=https://www.elefans.com/category/jswz/34/1768613.html style=大话存储》第3章"/>

《大话存储》第3章

文章目录

    • 前言
    • 3.1 硬盘结构
      • 3.1.1 盘片上的数据组织
      • 3.1.2 硬盘控制电路简介
      • 3.1.3 磁盘中的IO单位
    • 3.3 磁盘相关高层技术
      • 3.3.1 磁盘中的队列技术
      • 3.3.2 无序传输技术
      • 3.3.3 几种可控磁头扫描方式
      • 3.3.4 关于磁盘缓存
      • 3.3.5 影响磁盘性能的因素

前言

磁盘分为软盘和硬盘。将布满磁性粒子的一片圆形软片包裹在一个塑料壳中,中间开孔,以便电机夹住这张软片来旋转,这就是软盘。软盘和录音带是双胞胎,软盘记录的是数字信号,录音带记录的是模拟信号。软盘被设计为块式而不是流式(只能定位到磁带上某首歌曲的前后,不能直接定位到中间某句歌词)的,所以需要进行扇区划分等操作。

3.1 硬盘结构

1.结构图

  • 硬盘大致由盘片、读写头、马达、底座、电路板等几大项组合而成。

2.盘片

  • 盘片的基板由金属或玻璃材质制成,为达到高密度、高稳定性的要求,基板要求表面光滑平整,不可有任何瑕疵。然后将磁粉溅镀到基板表面上,最后再涂上保护润滑层。用到两项高科技,一是要制造出不含杂质的极细微的磁粉,二是将磁粉均匀地溅镀上去。
  • 盘片每面粗计密度为39201120000 b,密度相当高,不可有任何污染。磁头是利用气流漂浮在盘片上的,太高读取的信号就会减弱,太低可能磨到盘片表面。

3.磁头

  • 硬盘的存储原理是将数据用其控制电路通过硬盘读写头去改变磁盘表面上极细微的磁性粒子簇的N、S极性来加以储存。
  • 飞行高度(Flying Height)非常小(可比喻成要求一架波音747客机,其飞行高度需保持在1m的距离二部可坠毁)。实现这种技术,完全是靠磁盘旋转时,在盘片上空产生气流,利用空气动力学使磁头悬浮于磁片上空。几微米 -> 0.1~0.5μm -> 0.005~0.01μm
  • 早期的硬盘在每次关机之前需运行Parking程序,让磁头回到盘片最内圈的一个不含磁性粒子的区域,叫做启停区。当盘片转速达到额定速度时,磁头就会因为盘片旋转产生的气流抬起来,这时磁头才向盘片中存放数据的区域移动。

4.步进电机

  • 为了让磁头精确定位到每个磁道,用普通的电机达不到这样的精度,必须使用步进电机,利用精确的齿轮组或者音圈,每次旋转可以仅仅使磁头进行微米级的位移。音圈电机则是使用精密缠绕的铜丝,置于磁场之中,通过控制电流的流向和强度,使得磁头臂在磁场作用下作精确的步进。音圈:最开始用在喇叭的纸盆上,通过控制电流来控制纸盆的精确震动。

3.1.1 盘片上的数据组织

每个盘片的每个面都有一个读写磁头,磁头起初停在盘片的最内圈,即线速度最小的地方。这个区域不存放任何数据,称为启停区或着落区。启停区外就是数据区,在最外圈,离主轴最远的地方就是0磁道,硬盘数据的存放就是从最外圈开始的。

1.盘面

  • 硬盘的每一个盘片都有上、下两个盘面,都可以存储数据。有效盘面按从上到下的顺序从0开始依次编号。在硬盘系统中,盘面又叫做磁头号,因为每一个有效盘面都有一个对应的读写磁头。
  • 硬盘的盘片组在2~14片不等,通常有2~3个盘片,故盘面号/磁头号为0~3或0~5。
  • 磁头传动装置是使磁头作径向移动的部件,有步进电机和音圈电机两种,以很小的等距离使磁头部件作径向移动,用以变换磁道。

2.磁道

  • 磁盘在格式化时被划分成许多同心圆,即磁道,从最外圈向内圈从0开始顺序编号。每个盘面有300~1024个磁道,新式大容量硬盘盘面的磁道数更多。这些同心圆磁道不是连续记录数据,而是被划分成一段段的圆弧,这些圆弧的角速度一样。由于径向长度不一样,所以线速度也不一样,外圈的线速度较内圈的线速度大。在同样的转速下,外圈在相同的时间段里,划过的圆弧长度要比内圈大,因此外圈数据的读写要比内圈快。
  • 每段圆弧叫做一个扇区,从1开始编号,每个扇区中的数据作为一个单元同时读出或写入,是读写的最小单位。扇区内部的数据是流式记录的。磁道肉眼不可见,只是盘面上以特殊形式磁化了的一些磁化区。
  • 划分磁道和扇区的过程,即低级格式化,一般在硬盘出厂时已经格式化完毕了。高级格式化指的是对磁盘上所存储的数据进行文件系统的标记,而不是对扇区和磁道就行磁化标记。

3.柱面

  • 所有盘面上的同一磁道,在竖直方向上构成一个圆柱,即柱面。每个圆柱上的磁头由上而下从0开始编号。数据的读写按柱面进行,磁头读写数据时首先在同一柱面内从0磁头开始今次那个操作,依次向下在同一柱面的不同盘面上进行操作。只有在同一柱面所有的磁头全部读写完毕后磁头才转移到下一柱面,因为选取磁头只需通过电子切换即可,而选取柱面则必须通过机械切换,即寻道。

4.扇区

  • (1)扇区头标
    • 将每个环形磁道等距离切割,形成等长度的圆弧,每个圆弧就是一个扇区。划分扇区使数据存储更加条理化。每个扇区可以存放512B的数据和一些其他信息。有两个主要部分:存储数据地点的标识符和存储数据的数据段。
    • 扇区头标包括组成扇区三级地址的三个数字:柱面/磁道 Cylinder、磁头编号 Header、扇区号 Sector,间称CHS;
    • CHS编址方式在早期的小容量盘中非常流行,目前的大容量硬盘的设计和低级格式化方式已经有所改变,转为LBA编址方式。不再划分柱面和磁头号,这些数据由硬盘自身保留,而磁盘对外提供全部为线性的地址,即LBA地址。
    • 磁盘中的控制电路依然要找到LBA地址对应的磁道、磁头、扇区,这种对应关系保存在磁盘控制电路的ROM芯片中,磁盘初始化的时候载入缓存中以便随时查询。
    • 头标中还包含一个字段,其中显示扇区是否能可靠存储数据,或者是已发现某个故障因而不宜使用的标记。有些硬盘控制器在扇区头标中还记录指示字,可在原扇区出错时指引磁头跳转到替换扇区或磁道。最后,扇区头标以循环冗余校验CRC值作为结束,以供控制器校验扇区头标的读出情况,确保准确无误。
    • 基于CHS编址方式的磁盘最大容量:磁头数最大为255/8bit、柱面数最大为1023/10bit、扇区数最大为63/6bit,每个扇区一般为512B;255*1023*63*521/1024/1024=8024MB,即8GB。
  • (2)扇区编号和交叉因子
    • 给扇区编号的最简单方法是采用1、2、3…顺序编号。如果扇区按顺序绕着磁道来编号,那么磁盘控制电路在处理一个扇区的数据期间,可能会因为磁盘旋转太快,没等磁头反应过来,已经超过扇区间的间隔而进入了下一个扇区的头标部分,想读取这个扇区的记录,就要再等一圈。
    • IBM的一位杰出工程师想出了一个绝妙的方法,即对扇区不使用顺序编号,而是使用一个交叉因子(Interleave)进行编号。交叉因子用比值的方式来表示,如3:1表示磁道上的第1个扇区为1号扇区,跳过两个扇区即第4个为2号扇区,这个过程持续下去直到给每个物理扇区编上逻辑号为止。
    • 系统将文件存储到磁盘上时,是按柱面、磁头、扇区方式进行的,即最先是第1磁道的第1磁头所有的扇区,然后是同一柱面的下一磁头,直到整个柱面都存满。系统也是以相同的顺序去读出数据。
    • 如果是读数据,控制电路会计算此数据的ECC码,然后把ECC码与已记录的ECC码相比较;如果是写数据,控制电路会计算出此数据的ECC码,存储到数据部分的末尾。在控制电路对此扇区中的数据进行必要的处理期间,磁盘会继续旋转。由于对信息的后处理需耗费一定的时间,在这段时间内磁盘可能已经旋转了相当的角度。
    • 磁头扭斜:以原先磁道所在位置为基准,把新的磁道上全部扇区号移动约一个或几个扇区位置。可以理解为柱面与柱面间的交叉因子,只在文件很长、超过磁道结尾进行读出和写入时才发生作用。
  • 扇区号存储在扇区头标中,扇区交叉因子和磁头扭斜的信息也存放在这里。

3.1.2 硬盘控制电路简介

只有存储介质还远远不够,要让数据可以被读写,还要有足够的速度和稳定性满足需求,这就需要配套的电路。

  • Buffer Memory:缓冲区存储器
  • Interface Controller:接口控制器
  • Micro-processor:微控制器,缩写为MCU
  • PRML:Partial-Pesponse Maximum-Likelihood Read Cannel
  • Timing ASIC:时间控制专用集成电路
  • Servo Demodulator:伺服解调器
  • Digital Signal Processor(DSP):数字信号处理器
  • Preamp:预放大器
  • Positioning Driver:定位驱动器
  • VCM (Voice Coil Motor):音圈电动机
  • Magnetic Media Disk:磁介质盘片
  • Spindle Motor:主轴电机
  • Spindle Driver:主轴驱动器
  • Read/Write Head:读/写磁头

3.1.3 磁盘中的IO单位

  • 磁盘读写的时候都是以扇区为读写单位进行寻址的。
  • 对于磁盘来说,一次磁头的连续读或写叫做一次IO。
  • 目前4KB大小扇区的硬盘已经发布。因为操作系统的Page、文件系统的Block一般都是4KB大小,所以硬盘扇区512B的容量一直为行业所诟病。将扇区容量与上层的单位匹配,可以大大提高效率。

3.3 磁盘相关高层技术

3.3.1 磁盘中的队列技术

  • 假设3个人先后写数据,分别写到最内圈、最外圈、最内圈,此时机械臂在写完第1个数据后,会先写第2个数据,最后再写第2个数据。实现队列功能的程序控制代码是存放在磁盘控制电路芯片中的,而不是主板上的磁盘控制器上。由控制器发给磁盘指令,然后由磁盘自己的DSP固化电路或微处理器载入代码从而执行指令排队功能。
  • 要实现排队技术,仅仅有磁盘驱动器自身是不够的,还必须在磁盘控制器(主板上的磁盘控制)电路中固化代码处理排队,和磁盘达成一致。或者不使用固化代码方式,而是修改磁盘控制器驱动程序,加入处理排队的功能从而配合磁盘驱动器。
  • Intel在WinHEC 2003会议上发布了高级主机控制器接口0.95版规范(Advanced Host Controller Interface,AHCI),为驱动程序和系统软件提供了发现并实施命令队列、热插拔及电源管理等高级SATA功能的标准接口。这个接口是在新的控制器硬件之上的驱动层面提供一层接口,解决了磁盘控制器不支持硬盘驱动器自身的排队这个问题。

3.3.2 无序传输技术

  • 一种提高磁盘性能的技术,控制器发出一条指令要求读取某些扇区中的内容,磁盘可以不从数据所在的初始扇区开始读,而使采取就近原则。
  • 例如,磁头恰好处于待读取数据的尾部,此时如果等待磁盘旋转到磁头位于这块数据的头部时才开始读,就要等一圈时间,也就是“旋转延迟”。磁头按照能读多少先读多少的原则,然后立即发送给控制器,控制器立即通过DMA将数据放到内存,等磁盘转到数据块头部时再读出剩余的部分发给控制器,这样就避免了时间的浪费。这种技术同样也要由磁盘控制器来支持,或是通过控制器硬件,或是通过驱动程序。
  • 通过指令排队和无序传输可以最大化利用磁盘资源。把麻烦留给控制器,把简单留给磁盘,因为控制器的处理速度永远比磁盘的机械运动快。

3.3.3 几种可控磁头扫描方式

假设目前磁盘控制器的队列中存在如下的一些IO,这些IO所需查找的磁道号按照先后排列顺序为98、183、37、122、14、124、65、67,而当前磁头处于53号磁道,磁头执行寻道操作有以下几种模式:

1. FCFS(First Come First Serve)

  • 磁头完全按照IO进入的先后顺序执行寻道操作。 此模式下磁头滑过的磁道总数为640,如图3-8。

2. SSTF(Shortest Seek Time First)

  • 控制器会优先让磁头跳到离当前磁头位置最近的一个IO磁盘去读写,再跳到离刚度写完的这个磁道最近的一个IO磁道去读写,依此类推。
  • 本例中,如果此时IO队列中不断有位于53号磁道周围磁道的IO进入,如50、50、51,那么诸如183号这种离53号磁道较远的IO将会被饿死,永远也轮不到183号磁道的IO。所以SSFT模式的限制也是很大的。

3. SCAN(回旋扫描模式)

  • 最传统、最经典的扫描方式。类似于电梯模型,从一到到另一端,然后折返,再折返,循环下去。磁头从最内侧的磁道依次向外圈磁道寻道。如果当前队列中没有某个磁道的IO在等待,那么磁头就不会跳到这个磁道上,而是直接略过去。在SCAN模型中,即使最内圈或者最外圈的磁道没有IO,磁头也要触及到之后才能折返。
  • SCAN模式不会饿死任何IO,同样也会带来不必要的开销,因为磁头不会中途折返。如果磁头正从中间磁道向外圈移动,此时队列中进入一个内圈磁道的IO,那么此时磁头并不会折返,这个IO只能等待磁头触及最外圈之后折返回来被执行。

4. C-SCAN(单向扫描模式)

  • 磁头总是从内圈向外圈扫描,达到外圈之后迅速返回内圈,返回途中不接受任何IO,然后再从内圈向外圈扫描。

5. LOOK和C-LOOK(智能监察单向扫描模式)

  • 相对于SCAN模式的区别在于,磁头不必达到终点之后再折返,而只要完成最两端的IO即可折返。
  • 关于几种扫描模式的选择,总的来说,在负载不高的情况下,SSTF模式可以获得最佳的性能。但是鉴于可能造成某些的IO饿死的问题,所以在高负载条件下,SCAN或者C-SCAN、C-LOOK模式更为合适。
  • 在大量随机IO的情况下,磁盘的磁头臂会像蜜蜂翅膀一样振动。

3.3.4 关于磁盘缓存

  • 磁盘上必须有缓存,用来接收指令和数据,还被用来进行预读。磁盘缓存时刻处于打开状态。缓存在磁盘上表现为一块电路板上的RAM芯片,目前有2、8、16、32、64MB等容量规格。所谓“禁用”磁盘缓存指的其实是Write Through模式,即磁盘收到写入指令和数据后,必须先将其写入盘片,然后才向控制器返回成功信号,相对于“禁用”缓存。实际上,指令和数据首先到达的一定是缓存。
  • SCSI指令中有两个参数可以控制对磁盘缓存的使用:
    • DPO(Disable Page Out):禁止缓存中的数据页(缓存中的数据以页为单位存在)被换出。不管是读还是写,被置了这个参数位的数据在缓存空间不够的时候不能覆盖缓存中的其他数据,也就是不能将其他数据换出。
    • FUA(Force Unit Access):强制盘片访问。对于写操作,磁盘必须将受到的数据写入盘片才返回成功信号,也就是进行Write Through。对于读操作,磁盘受到指令后,直接去盘片上读取数据,而不搜索缓存。
  • 所以,当某个SCSI指令的DPO和FUA都被设置为1时,相当于完全不使用缓存的提速功能了,但是指令和数据依然会先到达缓存中,这一点需要分清和理解。
  • 目前基于SCSI指令的磁盘比如SCSI/FC/SAS等都支持FUA和DPO。对于基于ATA指令的IDE/SATA/USB-SATA/USB-IDE等,尚不支持这两个功能位,有另外的函数来绕过缓存。
  • 一次性禁用磁盘写缓存也是可以的,通过调用操作系统提供的一些借口即可实现,操作系统会利用对应磁盘的驱动程序来讲磁盘的写缓存一次性关闭,直到下次磁盘掉电火之歌Reset为止,禁用效果会一直保持。对于用于磁盘阵列中的磁盘,写缓存一律禁用。

3.3.5 影响磁盘性能的因素

  • 磁盘每个时刻只允许一个磁头来读写数据,不管盘以内盘片和磁头再多,也只能提高容量,不可能提高硬盘的吞吐量和IO性能。
  • 影响硬盘性能的因素包括以下几种:
    • 转速:影响硬盘连续IO时吞吐量性能的首要因素。读写数据时,磁头不会动,全靠盘片的转动来将对应扇区中的数据感应给磁头,所以盘片转的越快,数据传输时间就越短。在连续IO情况下,磁头臂寻道次数很少,所以要提高吞吐量或者IOPS的值,转速就是首要影响因素。目前中高端硬盘一般都为10000转每分或者15000转每分。也有厂家要实现20000转每分的硬盘,已经有了成行的产品,最终是否会被广泛应用,还尚待观察。
    • 寻道速度:影响磁盘随机IO性能的首要因素。随机IO时,磁头臂需要频繁更换磁道,用于数据传输的时间相对于换道消耗的时间来说是很少的,根本不在一个数量级上。如果磁头臂能够以更高的速度更换磁道,就能提升随机IOPS值。目前高端磁盘的平均寻道速度都在10ms以下。
    • 单碟容量:影响磁盘性能的一个间接因素。单碟容量越高,证明相同空间内的数据量越大,数据密度越大。在相同的转速和寻道速度下,具有高数据密度的硬盘会显示出更高的性能。在相同的开销下,单碟容量高德硬盘会读出更多的数据。目前已有厂家研发出单碟容量超过300GB的硬盘,但是还没有投入使用。
    • 接口速度:影响磁盘性能的一个最不重要的因素。目前的接口速度在理论上都已经满足了磁盘所能达到的最高外部传输带宽。在随机IO环境下,接口速度显得更加不重要,因为此时瓶颈几乎全部都在寻道速度上。不过,高端硬盘都用高速接口,这是普遍做法。

更多推荐

《大话存储》第3章

本文发布于:2024-03-23 16:33:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1740371.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:大话

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!