磁盘存储器

磁盘存储器由磁盘驱动器磁盘控制器盘片三个部分构成

磁盘的存储单元,自上而下分为

  • 盘面 -- 磁盘的记录面,一个磁盘由多个盘面构成,每一个盘面有配套的读写磁头,盘面间共轴转动
  • 扇区 -- 盘面的扇形区域,盘面根据角度均分为若干个扇形区域,扇区中间有一定的间隙,称为扇区间隙
  • 磁道 -- 根据半径区分的,磁头能访问的存储区域。由于磁道的存储密度相同,磁道间的编址空间与存储空间随着半径递增。或者降低外层磁道信息线密度以保证磁道间一致性。

存储区域内存在相关信息

  • 记录面数 -- 磁头数 = 盘面数
  • 柱面数 -- 单个记录面上的磁道数,即盘面沿着半径方向被分割成多少个部分
  • 扇区数 -- 单个记录面上的扇区数,即盘面沿着旋转方向被分割成多少个部分

最早的磁盘是IBM推出的温彻斯特磁盘(温盘)

磁记录原理

磁头和磁性记录相对移动时,电磁转换以实现数据的读写操作

磁盘的管理

磁盘的初始化

磁盘的初始化分为低级格式化高级格式化

低级格式化将磁盘分为若干个扇区,扇区分为头部、尾部和数据部分,并使用CRC字段校验。低级格式化只是物理片段的划分,所以也叫物理格式化。

高级格式化则是在分区上建立文件系统,初始化根目录等操作。因此也称为逻辑格式化。

磁盘的容量也分为非格式化容量与格式化容量。非格式化容量是磁盘的理论存储上限,磁盘的磁记录表面可用的磁化单元总量;格式化容量是格式化后的实际可用存储容量。因此 非格式化容量 > 格式化容量

磁盘的地址编码方式

|柱面(磁道)号|盘面(磁头)号|扇区号|

磁盘阵列

RAID是将多个物理磁盘统一组合为一个逻辑磁盘的方式,数据在多个物理盘间交叉分割存储并并行访问,以获得更好的存储性能与安全性。

磁盘的文件系统

文件管理

将磁盘进行分区,每一个分区的起始位置和大小记录在MBR中,而后是引导块进行OS的文件块加载进行自举。

BIOS存储在ROM中,进行在硬件自检后加载引导块以启动操作系统。

磁盘的调度算法

磁盘读写时间由三个部分构成

  • 寻道时间
  • 旋转延迟时间
  • 数据传输时间

寻道时间由跨越磁道时间mm和磁头臂启动时间ss构成

Ts=mn+sT_s = mn+s

平均寻道时间是最大寻道时间的一半

旋转延迟时间为目标扇区旋转到磁头下的耗时,假设盘面转速为rr,平均旋转延迟时间为

Tr=12rT_r = \frac{1}{2r}

数据传输时间为读写 bb 字节所需的时间。如果每条磁道存储NN字节,则平均数据传输时间为

Tt=brNT_t= \frac{b}{rN}

总平均存取时间为

Ta=Ts+Tr+TtT_a = T_s+ T_r+T_t

磁盘的存取时间中,寻道时间是最主要的时间开销部分,因此主要目标是降低寻道时间的开销。

响应时间还需要考虑排队延迟和控制器时间的开销

磁盘调度算法

FCFS算法

最简单且最公平的算法,但是大量进程竞争磁盘时,磁头会频繁长距离移动导致效率低下

最短寻道时间优先(SSTF)

基于贪心算法,每一次都寻找最短时间开销的磁道请求。

SSTF可能在一个磁道区域来回移动导致较远的磁道出现"饥饿"现象

SCAN算法

根据当前的移动方向向最远处磁道移动,到达最远处后反向到达最内侧磁道。

SCAN算法也称为电梯算法。它对最新扫描过的扇区不公平,需要更大的耗时才会返回该区域,因此局部性不如FCFS和SSTF。

C-SCAN算法

C-SCAN算法在到达磁盘最外侧边缘时,直接返回最内侧,返回过程不执行服务。当磁头从最内侧移动到最外侧时才进行服务。

LOOK/C-LOOK 调度

基于SCAN/C-SCAN改良,不到达磁道物理边缘,而只到达当前方向上的最远请求位置后就反向。

NStepSCAN & FSCAN 算法

由于SSTF/SCAN/C-SCAN 算法会出现磁道黏着现象。假设有进程始终在访问某个磁道,那么磁头就只会在当前磁道工作,导致其他磁道进程饥饿

NStepSCAN将任务队列划分为若干长度为N的子队列,队列间FCFS,队列内SCAN。新请求放入新的队列当中,不放入正在执行的队列中。

FSCAN将NStepSCAN简化为 N=2N=2 的形式,即维护当前服务队列和新请求的队列两个部分,将当前扫描过程中新增的请求全放入新请求队列中,降低了实现开销。

减少延迟时间的算法

  • 交替编号 -- 盘面内奇偶分离编号,减少执行时间导致错过扇区的长延迟
  • 错位命名 -- 盘面间错位编号,减少旋转延迟

提高磁盘IO速度的方法

  • 改进文件目录结构与目录以降低目录查找时间
  • 选择号的文件存储结构
  • 提高磁盘IO速度,如高速缓存、提前写、延迟读、虚拟盘、RAID等方式

SSD

SSD 是基于Flash技术的存储设备,是E^2PROM的变体。

SSD的读写操作以页为单位进行,擦除操作以块单位进行。

SSD 的随机写速度较慢且擦写寿命较低,擦除的用时也比较长。因此提出了磨损均衡算法:

  • 动态磨损均衡 -- 写入数据时优先擦写访问少的块,将负载分散在不同块中
  • 静态磨损均衡 -- 控制器定期定期进行高磨损块的数据迁移,高磨损块以只读为主,低磨损块更多承担擦写任务,以提升平均寿命

静态磨损均衡的实际性能好于动态磨损均衡