磁盘存储原理

最近学习linux内核源码,读到操作系统boot引导相关内容时,对于磁盘相关原理介绍引起我的兴趣。阅读相关资料后,对磁盘工作原理做一个总结,参考资料为深入理解计算机系统(CSAPP)。

磁盘是广泛应用的数据存储设备,存储容量比较大,相比RAM等存储设备价格低,读写速度慢,从磁盘读信息的时间是毫秒级,是DRAM的十万倍,SRAM的一百万倍,后面会对磁盘读取数据耗时计算进行详细的介绍。

1、磁盘构造

磁盘由多个盘片(platter)构成,每个盘片都有两面。盘片表面覆盖着磁性材料用于记录信息,盘片中央有一个旋转主轴控制盘片以固定的旋转速率(rotational rate)旋转,旋转速度是磁盘性能的一个参数,通常为5400~15000转每分。

磁盘的每个盘面是由一组称之为磁道(track)同心圆构成,每个磁道又被划分为多个扇区(sector)。每一个扇区中包含相等的数据位(通常为512字节),数据编码在磁盘的磁性材料中。扇区之间有一些间隙(gap)分隔开,间隙中不存储数据位,间隙存储用来标识扇区的格式化位。

磁盘存储原理_第1张图片

另外还可以用柱面(cylinder)来描述多个盘片驱动器的构造,柱面指的是所有盘片表面上到主轴中心距离相等的磁道集合。比如磁盘有3个盘片,6个面,每个面上距离中心距离相等的磁道称之为一个柱面,如下图所示:

磁盘存储原理_第2张图片

 

2、磁盘容量

磁盘容量是大家购买以及使用磁盘时考虑的一个点。磁盘容量单位有K,M,G,T。这里要主要磁盘的计量单位与内存(RAM)的计量单位尽管单位表示字母一样,但实际大小不一样。在对RAM进行计量时1K=1024bytes,1M=1024K,1G=1024M。对于磁盘来说,1K=1000,1M=1000K,1G=1000M。

衡量磁盘容量主要有以下几个因素决定:

  • 记录密度(位/英寸):磁道一英寸的段中可以放入的位数。
  • 磁道密度(道/英寸):从盘片中央出发半径为1英寸的段内可以有的磁道数。
  • 面密度(位/平方英寸):记录密度与磁盘密度的乘积。

假如某个磁盘有5个盘片,每个扇区512字节,每个面20000条磁道,每条磁道平均300个扇区,磁盘容量计算如下:

磁盘容量=512字节x300扇区x20000磁道x2表面x5盘片=30 720 000 000字节=30.72G

3、磁盘操作

磁盘通过读/写头来读写存储在磁性表面的位,读写头连接着一个传动臂的一端,通过沿着半径前后移动这个传动臂,驱动器就能将读/写头定位在任意一个扇区上。机械臂这种运动称为“寻道(seek)”

,当寻道完成后,通过磁盘的转动就可以将读写头定位在我们想要的扇区,此时读写头可以感知到这个位的值,也可以修改这个位的值。

磁盘存储原理_第3张图片

从上面的描述可以知道对磁盘数据一次读写可以分为三步:1、寻道 2、旋转磁盘 3、数据传送。寻到过程是通过转动传动臂来径向的定位磁道,旋转磁盘目的是定位初始扇区,数据传送是对磁盘数据进行读/写操作。因此磁盘读写耗时为上述三个过程耗时之和。

  • 寻道时间(Ts):寻道时间依赖读/写前磁头的位置以及传动臂在盘面上的移动速度。现代驱动器的寻道时间是通过几千次对随机扇区寻道求平均值测量的,通常为3~9ms,最大约为20ms。
  • 旋转时间(Tr):当磁头定位到期望的磁道后,就需要等待目标扇区转动到磁头下方,最坏的情况是磁头刚刚错过目标扇区,这种情况下要等待磁盘再转动一整圈。此时的时间Trmax=(1/转速)x60x1000(注意此处由于转速的常用单位为r/min,1/转速单位为min,后面x60x1000目的是将min变为ms),取平均值为最大值的一半,Tr=1/2xTrmax
  • 传送时间(Ttran):当目标扇区第一个位定位在读/写头下方后,驱动器开始读写该扇区的内容。一个扇区传送时间依赖于旋转速度以及每条磁道上的扇区数目(这里扇区数目可以粗略衡量每个扇区的宽度,用扇区宽度除以磁盘转速就是一个扇区的传送时间)公式为:Ttran=(1/转速)x(1/平均扇区数)x60x1000。

例如有一个磁盘参数如下:旋转速率15000RPM(r/min),Ts=8ms,每条磁道的平均扇区数500。计算得到Tr=1/2x(1/15000)x60x1000=2ms。Ttran=(1/15000)x(1/500)x60x1000=0.008ms

Ttotal=Ts+Tr+Ttran=10.008ms。

4、逻辑磁盘块

现代磁盘构造复杂,由多个盘面。盘面上有多个不同的记录区,为了对操作系统隐藏这些复杂性,现代磁盘将它们的构造呈现成一个简单的视图,将多个扇区定义为一个逻辑块,并对块进行编号。磁盘封装的时候有一个小的硬件设备称为磁盘控制器,维护着逻辑块号与实际的物理磁盘扇区之间的映射关系。

当操作系统想要执行一个I/O操作时,例如读取一个磁盘扇区的数据内存到主存时操作系统发送一个指令给磁盘控制器,让磁盘控制器读取某个逻辑块号。控制器上的硬件执行一个快速表查找,将一个逻辑号翻译成一个(盘面,磁道,扇区)的三元组,这个三元组唯一的标识了一个物理扇区,控制器上的硬件会解释这个三元组,将读/写头移动到适合的柱面,等待扇区移动到读/写头下,将读/写头感知的位数放到控制器的一个小缓冲区中,然后将它们复制到主存中。

5、格式化磁盘容量

磁盘控制器必须对磁盘进行格式化,然后才能在磁盘上存储数据。格式化包括用标识扇区的信息填写扇区的间隙,标识出的表面有故障的柱面并且不适用它们,并且在每个区中预留出一组柱面作为备用,如果区中个一个或者多个柱面在使用过程中坏掉,则可以使用这些备用柱面。由于存在备用柱面,所以磁盘格式化后的容量比最大容量要小。

 

你可能感兴趣的:(计算机基础)