操作系统导论习题解答(37. Hard Disk Drives)

Hard Disk Drives

带着问题:磁盘是如何存储和获取数据的?

1. The Interface

磁盘可以看作n个扇区的数组(驱动器地址空间从0到n - 1)。

多扇区操作是可以的。许多文件系统一次将读或写很大字节的内容。但是,在更新磁盘时,驱动制造商唯一保证的就是单个512字节扇区的写入是原子级别的。如果发生不合时宜的功率损耗,则仅较大部分写入的可能完成(破损写入(torn write))。

获取地址连续的块比获取地址不连续的块的开销花费少。

2. Basic Geometry

盘片(platter):圆形硬质便面,通过引起磁性变化,在其上永久存储数据。

一个磁盘至少有一个盘片。每个盘片有两面。其上有一层薄磁性层,即使磁盘断电,磁性层也能保障驱动器持久存储位。

磁盘围绕主轴(spindle)旋转,旋转速率用RPM(rotations per minute)表示。

数据以扇区的同心圆编码在每个表面上,这样的一个同心圆就叫做一条轨道(track)。一个表面包含许多轨道。

读写过程由磁盘头(disk head)完成;驱动器每个表面有一个磁盘头;磁盘头由磁盘臂(disk arm)连接在一起。

3. A Simple Disk Drive

下图:磁道有12个扇区,每个扇区大小为512字节。
在这里插入图片描述
在这里插入图片描述

3.1 Single-track Latency:The Rotational Delay

看一下Figure 37.2,磁盘头指在块6。如果我们想要读取块0,磁盘能做的就是等待。由于是逆时针旋转,假设整个磁盘旋转一圈的旋转延迟(rotation delay)为R,那么从块6到块0所用时间为R/2。

3.2 Multiple Tracks:Seek Time

在这里插入图片描述
首先看一下Figure 37.3左图。有三个磁道,磁头指向块30。假设我们想要读取块11,驱动器要做的就是把磁盘臂移动到最外面的磁道,这个过程叫做寻道(seek)

寻道(seek)有三个阶段:

  1. 磁盘臂移动加速(acceleration)
  2. 磁盘臂全速运动时滑行(coasting),然后在磁盘臂减速时减速(deceleration)
  3. 将磁盘头放置(settling)在正确的轨道上

寻道之后,就如Figure 37.3右图。从该图可知,寻道时磁盘也进行旋转。当块11在磁盘头下时,最后阶段I/O将开始,这一阶段叫做传输(transfer)

3.3 Some Other Details

许多驱动器采用某种磁道偏移(track skew)来确保即使在跨越磁道边界时也可以正确维护顺序读取。

在这里插入图片描述
如上图所示,磁盘经常如此偏移由于磁盘头需要时间被放置。

另一个事实就是外面的轨道比里面的轨道有更多的扇区(几何知识)。

最后对于任何现代磁盘来说最只要的部分就是它的缓存(cache),有时也叫做磁道缓冲区(track buffer)

4. I/O Time:Doing The Math

表示I/O时间如下所示:
在这里插入图片描述
I/O率如下所示:
在这里插入图片描述
为了更好的理解I/O时间,假设有两个工作负载:

  1. random workload
  2. sequential workload

看一下下图:
在这里插入图片描述
首先对于SCSI执行任意工作负载SCSI:
在这里插入图片描述
Tseek = Average Seek

15000 RPM(rotations per minute) = 250 PRS(rotations per second),每一次旋转花费4 ms(1 / 250 PRS),故平均而言Trotation = 2 ms

Ttransfer = 1 / Max Transfer

TI/O ≈ 6ms

RI/O = 传输大小 / TI/O = 0.66 MB/S

同理可得,顺序工作负载。总结如下:

在这里插入图片描述
上图说明了一些重要情况:

  1. 任意工作负载和顺序工作负载有很大的性能差异
  2. 高端性能驱动器和低端性能驱动器在性能方面有很大的不同

5. Disk Scheduling

由于I/O的高开销,操作系统在决定哪个I/O与磁盘交互扮演一个重要角色,更通俗地讲,由磁盘调度程序(disk scheduling)决定。

不像任务调度程序,磁盘调度程度对于每一个任务的长度是未知的,它只能靠好的猜测。通过估计任务花费时间来确定执行最短任务(SJF)。

5.1 SSTF:Shortest Seek Time First

一个早期的磁盘调度程序方法叫做最短寻道时间优先(SSTF)

如下图所示:假设磁盘头现位于扇区30,我们想要读取扇区21和扇区2的数据,那么首先寻找扇区21然后再寻找扇区2。
在这里插入图片描述
在上述情况下,SSJF工作很好。但是也有其缺点:

  1. 驱动器的几何结构不适用于主机操作系统,解决方案最近块优先(NBF)
  2. starvation(如何处理该情况?)

5.2 Elevator(a.l.a. SCAN or C-SCAN)

解决starvation的早期算法称为SCAN简单地在磁盘服务请求中来回移动,以使它们在磁道中顺序移动

该算法有一系列变体算法:

  1. F-SCAN:在进行扫描时冻结要服务的队列
  2. C-SCAN:从外到内进行扫描,然后在外磁道处重置以重新开始

虽然有效解决了starvation问题,但是SCAN与其派生算法都不是最好的调度技术。SCAN(甚至SSTF)实际上都没有严格地遵守SJF的工作原则。特别是,它们都忽略了旋转。因此有了另一个问题:如何计算磁盘旋转成本?

5.3 SPTF:Shortest Positioning Time First

在了解SPTF之前先了解 SATF(shortest access time first)
在这里插入图片描述
如上图所示,磁盘头位于扇区30,调度程序如何决定是寻找扇区16还是扇区8?这取决于与轮换相比的相对搜索时间

在现代驱动器中,寻道时间和旋转时间几乎相等,SPTF是有用的并且提升了性能。

5.4 Other Scheduling Issues

还有一些问题我们没有讨论:磁盘调度程序在现代系统的哪里执行?

另一个重要的由磁盘调度程序执行的相关任务是I/O合并(I/O merging)

例如,想象在Figure 37.8中一系列的读请求块33、块8、块34:

在这里插入图片描述
在这个例子中,调度程序应该合并对块33和块34的请求。合并对操作系统特别重要,因为它减少了向磁盘发出的请求数量并且降低了开销

现代调度程序处理的一个最终问题:在I/O向磁盘发出请求后系统应该等待多久?

一个简单的想法是一旦有一个I/O,那么应该立即向磁盘发出请求。这种方法叫做work-conserving(磁盘永远不会空闲)。但是,预期磁盘调度(anticipatory disk scheduling)的研究表明最好等待一会儿,这种方法叫做non-work-conserving

posted @ 2022-10-14 19:11  astralcon  阅读(112)  评论(0编辑  收藏  举报