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)有三个阶段:
- 磁盘臂移动加速(acceleration)
- 磁盘臂全速运动时滑行(coasting),然后在磁盘臂减速时减速(deceleration)
- 将磁盘头放置(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时间,假设有两个工作负载:
- random workload
- 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
同理可得,顺序工作负载。总结如下:
上图说明了一些重要情况:
- 任意工作负载和顺序工作负载有很大的性能差异
- 高端性能驱动器和低端性能驱动器在性能方面有很大的不同
5. Disk Scheduling
由于I/O的高开销,操作系统在决定哪个I/O与磁盘交互扮演一个重要角色,更通俗地讲,由磁盘调度程序(disk scheduling)决定。
不像任务调度程序,磁盘调度程度对于每一个任务的长度是未知的,它只能靠好的猜测。通过估计任务花费时间来确定执行最短任务(SJF)。
5.1 SSTF:Shortest Seek Time First
一个早期的磁盘调度程序方法叫做最短寻道时间优先(SSTF)。
如下图所示:假设磁盘头现位于扇区30,我们想要读取扇区21和扇区2的数据,那么首先寻找扇区21然后再寻找扇区2。
在上述情况下,SSJF工作很好。但是也有其缺点:
- 驱动器的几何结构不适用于主机操作系统,解决方案最近块优先(NBF)
- starvation(如何处理该情况?)
5.2 Elevator(a.l.a. SCAN or C-SCAN)
解决starvation的早期算法称为SCAN:简单地在磁盘服务请求中来回移动,以使它们在磁道中顺序移动。
该算法有一系列变体算法:
- F-SCAN:在进行扫描时冻结要服务的队列
- 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。
标签:SCAN,Hard,37,扇区,调度,磁道,磁盘,习题,驱动器 From: https://www.cnblogs.com/astralcon/p/16792728.html