不知看到这大家是否有点疑惑,每个扇区包含相等的数据位,那明显距离圆心更近的同心圆扇区看起来能存的数据比最外围的扇区小很多,那岂不是外围的数据位要迁就最内部的?
是的。为了让每个磁道都有相等的扇区数,外圈磁道的扇区之间间隔很大,不过以前硬盘的数据存储密度很低,所以还能接受。
而随着硬盘存储密度的上升这样就造成了极大的浪费,因此就搞了个 zoned-bit recording
技术,目的就是在外圈磁道上放置比内圈磁道更多的扇区,看下这个图就明白了。
具体怎么实现我就不展开了,这不重要。
重要的是解惑,并不是像有些书上说的,死板的按照最内圈的扇区数来确定所有磁道的扇区数。
硬盘通常由一个或者多个盘片组成。
例如下图就有三个盘片,每个盘片有上下两个盘面,对应的会有六个磁头。
磁头号从上到下以 0 开始计数,由磁头臂带领着磁头做圆弧形运动。每个盘面的磁道也由 0 开始计数,相同编号的磁道组成的区域称之为柱面,发挥下想象力应该可以 get 到,我再贴个图助力一下。
为什么要有柱面这一术语呢?
因为几个磁头其实都是依靠同一个磁头臂运动的,所以要转就一起转,并且都是一个角度。
因此想要数据读取的快,那么数据就应该在统一柱面上顺序存储,比如最上面的盘面的第 1 个磁道上写不下了,那继续写到背部的第二个盘面上,这样磁头臂只要寻道一次即可,读数据的时候也只要寻道一次即可。
从这里我们也可以知道如果一个硬盘的盘片越多,速度就越快。
硬盘访问的时间
从上文我们已经知道硬盘是以扇区为基本单位的,所以硬盘的访问就是要找到对应的扇区。
盘片的表面是磁性的,盘片随着主轴旋转而转动,当要访问某个扇区的时候首先要转动磁头臂找到对应的磁道,这叫寻道时间。
这时盘片还是在旋转中的,磁头可以感知到下方数据位上的值,等旋转到目标扇区的时候就晓得该读/写数据了,这个时间称为旋转时间,所以我们买硬盘的时候会看到 7200RPM、15000RPM 啥的,转的越快磁盘找到扇区的时间就越短。
最后就是读取数据的传送时间了。
所以硬盘数据访问延迟就是这三个时间相加,而最慢的就是寻道时间,我给下 CSAPP 提供的数据:
总延时=寻道时间+旋转时间+传送时间=9ms+4ms+0.02ms=13.02ms
当然不同的硬盘总延时肯定不一样,反正知道寻道时间最慢就行了。
逻辑磁盘块
从上述的物理结构我们已经知道需要找到盘面,再找到磁道,最后找到扇区才能读取数据,有点复杂。
没必要把这么不友好的访问姿势暴露给操作系统,所以就搞了个逻辑磁盘块,屏蔽了底层访问的细节,提供编号 0 、1、2.....n 这样的逻辑块序列来对应具体的物理块。
这样操作系统要访问磁盘就很舒服了,不过最终还是要找到对应的扇区的,而磁盘控制器就维护了逻辑块和实际物理扇区的映射关系。
磁盘控制器属于硬盘里面的一个硬件,它会将逻辑块翻译成:盘面、磁道、扇区这么一个三元组。
至此平时我们说的逻辑块与硬盘的物理访问也对应上了。
最后
身为普通程序员我觉得对硬盘的了解到这个地步就差不多了,该知道的都知道了。
如果有什么纰漏指出欢迎指正!