-
接口
- 现代磁盘驱动器(hard disk drive) 的基本接口都很简单,驱动器由大量扇区(512字节块)组成,每个扇区都可以读写
- 在具有n个扇区的磁盘上,扇区从0到n-1编号。因此,磁盘可以被视为一组扇区,0到n-1是驱动器的地址空间(address space)
- 多扇区操作是可能的,实际上许多文件系统一次读写会有4KB内容甚至更多。但是驱动器只能保证单个扇区的写入是原子的。如果在不合时宜的时候掉电,则只能完成较大写入的一部分,即不完整写入(torn write)
- 人们通常假设访问连续块(即顺序访问)是最快的访问模式,并且通常比任何更随机的访问要快得多
-
基本几何形状
- 磁盘上有一个或多个盘片(platter),是一个圆形的坚硬固体,具有两个面,每面都被称为表面,在其表面上通过引入磁性变化来永久存储数据
- 盘片通常由硬质材料(如铝)制成,然后涂上薄薄的磁性层。即使驱动器断电,驱动器也能持久存储数据位
- 所有盘片围绕主轴(spindle) 连接在一起,主轴连接到一个电机。驱动器连接到电源时电机会以一个固定速度旋转盘片。旋转速率通常以每分钟转数(RPM, Rotations Per Minute) 来测量。例如10000RPM旋转的驱动器意味着一次旋转需要6ms
- 数据在扇区的每个表面上的同心圆中被编码,这样的一个同心圆被称为一个磁道(track),一个表面包含数以千计的磁道,紧密的排列在一起
- 从表面进行的读写操作由磁头(disk head) 完成,驱动器的每个表面都有一个磁头,磁头连接到一个磁盘臂(disk arm) 上,磁盘臂在表面上移动,将磁头定位到期望的磁道上。一个磁盘臂可以服务于一个或多个表面
- 扇区是磁道上被划分出来的一段圆弧,一个磁道上有多个扇区
-
简单的磁盘驱动器
- 假设现有一个单一磁道的简单磁盘,该磁道只有12个扇区,每个扇区大小为512字节,用0到11的数字表示,现在磁头在块6上方
-
单磁道延迟:旋转延迟
- 现在磁盘收到了读取块0的请求
- 此时磁头并不需要移动,它只需要等待盘片旋转,将0转到磁头下方,这段等待的时间是旋转延迟(rotational/rotation delay)
-
多磁道延迟:寻道时间
- 假设这个盘面现在拥有了3个磁道,每个磁道都有12个扇区,也就说明最外面的磁道包含扇区0~11,中间的磁道包含扇区12~23,最内圈的磁道包含扇区24~35,此时磁头在最内圈的磁道上
- 现在磁盘收到了读取扇区11的请求
- 驱动器首先需要将磁盘臂移动到正确的磁道上,也就是最外面的磁道,这会经过一个寻道(seek)过程,寻道也需要花费时间。寻道和旋转属于时间成本很高的磁盘操作
- 经过盘片的旋转,扇区11经过磁头下方时,数据从表面读取或写入到表面,这一过程被称为传输(transfer)
- 寻道有多个阶段:
- 磁盘臂移动时的加速阶段
- 磁盘臂加速到最大速度,随惯性移动
- 磁盘臂减速,最终让磁头停在正确的磁道上
- 停放时间(settling time) 一般不小,有0.5~2ms
-
一些其它细节
- 许多驱动器会通过磁盘倾斜(track skew) 来确保即将跨越磁道边界时,顺序读取也可以方便地服务
- 外圈磁道通常比内圈磁道拥有更多的扇区,毕竟外圆比内圆周长更长,这种磁盘被称为多区域(nulti-zoned)磁盘驱动器,其中磁盘被组织成多个区域,同一区域的磁道含有的扇区数量相同,外圈区域比内圈区域的磁道扇区数量多
- 磁盘驱动器拥有缓存(cache),也叫磁道缓冲区(track buffer)。该缓存只是少量的内存,驱动器可以使用这些内存来缓存一些内容,这可以让驱动器在将来快速响应对这些内容的访问
- 将数据放入内存后就回报写入完成,被称为后写缓存(write back),也被称为立即报告(immediate reporting)
- 将数据实际写入磁盘后再回报写入完成,被称为直写(write through)。这有的时候会让驱动器看起来更快,但是也更危险
-
计算I/O时间
- I/O时间可以被表示为三个时间之和:
- $I/O时间 = 寻道时间 + 旋转时间 + 传输时间$
- I/O速率也是含量的指标:
- $I/O速率 = 传输大小 ÷ I/O时间$
- I/O时间可以被表示为三个时间之和:
操作系统 - Operating System
/
Chapter IV 持久性
/
Section 1 IO设备与磁盘
/
1-2 磁盘