0%

操作系统持久性--存储设备(1)--磁盘构造

磁盘

根据存储器层次结构,磁盘容量大但访问速度极其慢。

并且磁盘设备不像内存设备是通用的(所有内存几乎具有一致的访问接口)

不同的磁盘特性各不相同(所以需要后面的文件系统软件统一这些接口,抽象思想)

  • 访问粒度不同:内存可以按字节粒度访问,磁盘的访问单位至少要几百字节。
  • 访问速度(时间)不同:内存可以随机访问,磁盘能在顺序访问,如果要访问不连续的位置吗,需要机械运动(慢)

磁盘结构

磁盘驱动器存储数据的原理是 通过磁性将写入到快速旋转的金属薄盘上。

image-20240611100839851

一个完整的磁盘结构组成:

  • 磁头:每个表面都有一个磁头,能够按同心圆读取数据。

    • 为了达到整个表面(任意一个磁道),每个磁头都连接到一个磁臂,所有磁臂连接到同一臂杆(可以由内向外反复移动)。所以所有磁头都是同时移动的。
  • 盘片(可能有多个):容纳磁性材料的薄圆板。通常两面(两面都可存储数据)。盘片不断旋转。

  • 磁道(track):每个盘片被划分为一圈一圈的有一定宽度的同心圆,这就是磁道。

    • 磁盘可以在无需移动磁臂的情况下,读取同一磁道的所有数据(因为盘片在转)。所以磁盘访问同一磁道上的数据,比不同磁道上的要快。
  • 扇区(sector):扇区是磁盘的最小访问单元(一般为,512B),磁盘不能读取单个字节。它必须至少读取或写入一个扇区。

    • 操作系统如果要更改磁盘中的一个字节,就不得不读取整个扇区,然后写入整个扇区。(这是个问题,解决办法:延迟磁盘的读写。)
  • 柱面:

    • 一些早期的文件系统将相关数据放在不同的表面但在同一个柱面中。这个想法是可以读取来自柱面中不同磁道的数据,而无需进行寻道。一旦柱面已满,文件系统就会开始将数据放置在相邻柱面之一中。随着磁盘密度的增加,柱面的重要性下降了。如今,访问同一柱面内的不同磁道的成本与访问同一盘片上相邻磁道的成本大致相同。

两点实现细节:

  1. 轨道倾斜(track skewing):为了最大化顺序存取速度,每个磁道上的逻辑扇区零与前一磁道上的扇区零错开一定量,该量对应于磁盘将磁头 从一个磁道移动到另一磁道,或者 从一个表面上的磁头切换到另一个表面上的磁头扇区往往会偏斜,因为从一个磁道切换到另一个磁道时,磁盘需要时间来重新定位磁头(即便移到相邻磁道)。如果没有这种偏斜,磁头将移动到下一个磁道,但所需的下一个块已经旋转到磁头下,因此驱动器将不得不等待整个旋转延迟,才能访问下一个块。
  2. 另一个事实是,外圈磁道通常比内圈磁道具有更多扇区,这是几何结构的结果。那里空间更多。这些磁道通常被称为多区域(multi-zoned)磁盘驱动器,其中磁盘被组织成多个区域,区域是表面上连续的一组磁道。每个区域每个磁道具有相同的扇区数量,并且外圈区域具有比内圈区域更多的扇区。

磁盘驱动器通常包含几 MB 的缓冲内存(buffer memory)磁盘控制器使用该内存来缓冲从磁盘读取或写入磁盘的数据、用于磁道缓冲写入加速。

  • 磁道缓冲(track buffering): 预读

    磁道缓冲通过存储磁头已读取但操作系统尚未请求的扇区来提高性能。特别是,当磁头移动到磁道时,它可能必须等待其需要访问的扇区在磁头下方旋转。当磁盘等待时,它将未请求的扇区读取到其机架缓冲区,以便如果操作系统稍后请求这些扇区,它们可以立即返回。

  • 写入加速(write acceleration)延迟写(后写,write back)

    将要写入的数据存到自己的内存中,就向操作系统报告(写入)。磁盘固件稍后将写入内容从内存刷新到盘片。后写缓存有时会使驱动器看起来“更快”,但可能有危险。如果文件系统或应用程序要求将数据按特定顺序写入磁盘以保证正确性,后写缓存可能会导致问题(请阅读文件系统日志的章节以了解详细息)。

磁盘访问过程和性能

通过一个场景来查看磁盘的访问过程:操作系统向磁盘发出读取一个或多个连续扇区的请求(命令)。

磁盘扇区通过逻辑块地址(logical block address,LBA)来指定要访问的盘面磁道扇区

LBA: 每个磁盘扇区或闪存块的唯一标识符,通常编号从 1 到磁盘/闪存设备的大小。磁盘接口将此标识符转换为扇区的物理位置。

为了响应操作系统的请求:

磁盘必须

  • 首先寻找(seek)正确的磁道,【寻道,Seek】
  • 等待第一个所需扇区旋转到磁头,【旋转,Rotate】
  • 然后传输块。【传输,Transfer】

因此,一次磁盘访问的时间为

1
磁盘访问时间=寻道时间+旋转时间+传输时间
  • 寻道

磁盘必须首先寻找——将其臂移动到所需的磁道上。为了进行寻道,磁盘首先启动电机,将臂组件移动到磁盘上大致正确的位置。然后,当磁臂停止因寻道运动而振动时,磁盘开始读取嵌入在扇区中的定位信息,以确定其准确位置,并进行细粒度的定位校正以固定在所需的磁道上。一旦磁头定位在正确的磁道上,磁盘就会使用信号强度和定位信息对磁臂位置进行微小修正,以将磁头保持在所需的磁道上

  • 旋转

一旦磁盘头定位在正确的磁道上,它必须等待目标扇区在其下方旋转。该等待时间称为旋转延迟。如今,大多数磁盘的旋转速度为 4200 RPM 到 15,000 RPM(每次旋转 15 毫秒到 4 毫秒),对于许多工作负载,旋转延迟的合理估计是完整旋转时间的一半 — 7.5 毫秒到 2 毫秒

一旦磁盘头确定在新磁道上,大多数磁盘立即开始将扇区读入其缓冲存储器,无论请求了哪些扇区。这样,如果有对已经通过磁头下方的扇区之一的请求,则可以立即传输数据,而不必延迟近一个完整旋转的请求来重新读取数据。

  • 传输

    • 一旦磁盘头到达所需的扇区,当扇区在磁头下方旋转时,磁盘必须将数据从该扇区传输到其缓冲存储器(用于读取),反之亦然(用于写入)。然后,对于读取,它必须将数据从其缓冲存储器传输到主机的主存储器。对于写入,传输顺序相反

    • 由于磁盘的外部磁道比其内部磁道具有容纳更多扇区的空间,并且由于给定磁盘以恒定速率旋转,因此外部磁道的表面传输带宽通常高于内部磁道。

    • 对于磁盘读取,一旦扇区已传输到磁盘的缓冲存储器,它们必须通过某些连接传输到主机的内存,例如 SATA(串行 ATA)、SAS(串行连接 SCSI)、光纤通道或 USB(通用串行bus)。对于写入,传输朝另一个方向进行。主机内存和磁盘缓冲区之间传输数据的时间就是主机传输时间。典型带宽范围为USB 2.0的60 MB/s 到光纤通道的2500 MB/s。

    • 对于多扇区读取,磁盘在表面和磁盘缓冲存储器之间以及缓冲存储器和主机内存之间进行管道(串行)传输;因此,对于大型传输,总传输时间将由其中的瓶颈决定。类似地,对于写入,磁盘将主机传输与寻道、旋转和表面传输重叠;同样,总传输时间将由瓶颈决定。

案例研究 : 东芝 MK3254GSY

图 12.3 显示了最新的笔记本电脑 2.5 英寸磁盘的一些关键参数。

Platters/Heads 2/4:两个盘(四个盘面),四个磁头

image-20240611112833324

  • Spindle speed 7200 RPM:该磁盘将320 GB的数据存储在两个盘片上,因此每盘面存储80 GB。盘片以每分钟7200RPM(每分钟转数)旋转,每转为8.3ms;由于每个盘片的直径约为6.3厘米,因此每个盘片的外边缘以85km/h的速度移动!
  • **Average seek time read/write 10.5 ms / 12.0 ms: **读取和写入的寻道时间不同,因为磁盘在磁盘臂完全稳定之前开始尝试读取数据,但必须等待一段时间才能安全写入
  • Transfer rate (surface to buffer) :54–128 MB/s当传输大量连续扇区时,磁盘的带宽为 54-128 MB/s。带宽用一个范围来表示,因为磁盘的外磁道比内磁道有更多的扇区,因此当磁盘访问外磁道上的数据时,扇区以更高的速率扫过磁头
  • Transfer rate (buffer to host) 375 MB/s:一旦数据从盘片上传输出来,磁盘就可以通过 SATA(串行 ATA)接口【现代SATA已经过时了。有更快的PCIE等】以高达 375 MB/s 的速度将其发送到计算机的主内存。

随机与顺序访问性能

给定的寻求和旋转时间以毫秒为单位,对磁盘上随机扇区的小访问比大的顺序访问要慢得多

磁盘调度

由于移动磁盘臂和等待盘片旋转的成本非常高,因此通过优化待处理请求的服务顺序可以显着提高性能。磁盘调度可以由操作系统、磁盘固件或两者共同完成。

先进先出。最简单的做法是按照先进先出 (FIFO) 的顺序处理请求。不幸的是,FIFO 调度程序的性能可能很差。

SPTF/SSTF。一个最初有吸引力的选择是使用贪婪调度程序,在给定磁盘头和盘片的当前位置的情况下,该调度程序始终为可以在最短时间内处理的待处理请求提供服务。这种方法称为最短定位时间优先 (SPTF)(如果不考虑旋转定位,则称为最短寻道时间优先 (SSTF))。

SPTF 和 SSTF 有两个明显的局限性。首先,由于移动磁盘臂并等待一些旋转时间会影响服务后续请求的成本,因此这些贪婪方法并不能保证优化磁盘性能。其次,这些贪婪的方法可能会导致饥饿,例如,当对内部轨道的连续请求流阻止对外部轨道的请求得到服务时。