《操作系统导论》第四部分 持久性 P2 磁盘驱动器

C2 磁盘驱动器

磁盘驱动器(Hard Disk Driver)又称“磁盘机”,是以磁盘作为记录信息媒体的存储装置

磁盘驱动器既能将存储在磁盘上的信息读进内存中,又能将内存中的信息写到磁盘上,因此,就认为它既是输入设备,又是输出设备

磁盘驱动器由磁头、磁盘、读写电路及机械伺服装置等组成,用来驱动磁盘稳速旋转,并控制磁头在盘面磁层上按一定的记录格式和编码方式记录和读取信息

2.1 接口

现代磁盘驱动器的接口都很简单,磁盘驱动器由大量扇区(512字节)组成,每个扇区都可以读取或写入,在具有n个扇区的磁盘上,扇区从0到n-1编号,因此可以将磁盘视为一组扇区,从0到n-1是驱动器的地址空间

通常可以假设访问驱动器地址空间内两个彼此靠近的块比访问两个相隔很远的块更快,也可以假设访问连续块,是最快的访问模式,并且通常比任何随机的访问模式快得多

2.2 基本几何形状

在这里插入图片描述
从一个盘片开始,它是一个圆形坚硬的表面,通过引入磁性变化来永久存储数据,磁盘可能有一个或多个盘片,每个盘片都有两面,每面都称为表面,这些盘片由一些硬质材料(如铝)制成,然后涂上薄薄的磁性层,即使驱动器断电,驱动器也能持久存储数据

所有的盘片都围绕主轴连接在一起,主轴连接到一个电机,以一个恒定的速度旋转盘片,旋转速率通常以每分钟转数 PRM来测量,10000PRM旋转的驱动器一次旋转需要大约6ms

数据在扇区的同心圆中的每个表面上被编码,称这样的同心圆为一个磁道,一个表面包含数以千计的磁道,紧密的排列在一起

要从表面进行读写操作,需要由磁头完成,驱动器的每个表面上有一个这样的磁头,磁头连接到单个磁盘臂上,磁盘臂在表面上移动,将磁头定位在期望的磁道上

2.3 简单的磁盘驱动器

现在假设有一个单一磁道的简单磁盘:
在这里插入图片描述
该磁道只有12个扇区,每个扇区大小为512字节,用0-11表示这些扇区,这里的单个盘片围绕主轴旋转,电机连接到主轴,为了能读取或写入这些扇区,因此需要一个连接到磁盘臂上的磁头,磁盘表面逆时针旋转

(1) 单磁道延迟:旋转延迟

在这里插入图片描述
现在加入收到了读取块0的请求,磁盘必须等待期望的扇区旋转到磁头下,这种等待在现代驱动器中经常发生,并且是I/O服务时间的重要组成部分,它有一个特殊的名称:旋转延迟

如果完整的旋转延迟是R(磁盘旋转一周的时间),此时磁头在块9处,盘片逆时针旋转,磁头等待到块0大约需要R/2的时间,以待块0旋转到磁头下面进行读写,最坏的情况是请求读写扇区5,这导致等待的时间接近完整的R

(2) 多磁道:寻道时间

单磁道是不现实的,现代磁盘有数以百万计的磁道,来看一个具有3条磁道的盘片表面:
在这里插入图片描述

现在追踪请求发生在远处扇区的情况,例如读取扇区11,此时磁头处于扇区30,在最内层的磁道,为了服务这个请求,驱动器首先将磁盘臂移动到正确的磁道,通过一个寻道过程寻道和旋转是最昂贵的磁盘操作之一

通过寻道过程,磁头被定位到了正确的磁道,接下来等待块11旋转经过磁头,当扇区11经过磁头时,I/O的最后阶段将发生,称为传输,数据从表面读取或写入表面

完整的I/O时间轨迹:寻道->等待转动延迟->传输

(3) 一些其它细节

1,外圈磁道通常比内圈磁道具有更多扇区,这是几何结构的结果,外圈磁道的空间更大
2,任何现代磁盘驱动器都有一个重要组成部分,即它的缓存,该缓存只是很少的内存,驱动器可以用这些内存来保存磁盘读取或写入磁盘的数据,

2.4 I/O时间

有了这个简单的模型,可以通过数学来估算磁盘的I/O时间

I/O时间T
T = T寻道 + T旋转 + T传输

I/O速率R
R = 传输大小 / T 

假设有两个工作负载,一个称为随机工作负载,它向磁盘上的随机位置发出小的读取请求,随机工作负载在许多重要的程序中很常见,包括数据库,第二种称为顺序工作负载,只是从磁盘连续读取大量的扇区,不会跳过,顺序访问也很常见

现在对希捷的一个高性能磁盘和一个大容量磁盘来估计这两个工作负载:
在这里插入图片描述
1,随机工作负载:
假设容量为4kb,在Cheetah上

T寻道 = 4ms //采用数据中的平均寻道时间
T旋转 = 2ms	//PRM=15000,则每次旋转需要4ms,半圈平均为2ms
T传输 = 30μs //传输大小除以最大传输速率
Cheetah的T = T寻道 + T旋转 + T传输 = 6ms
Cheetah的R = 4kb / T = 0.66MB/s

在Barracuda上

Barracuda的T = T寻道 + T旋转 + T传输 = 13.2ms
Barracuda的R = 4kb / T = 0.31MB/s

2,顺序工作负载:
假设容量为100MB,在Cheetah上

Cheetah的T = T寻道 + T旋转 + T传输 = 800ms
Cheetah的R = 100MB / T = 125MB/s

在Barracuda上

Barracuda的T = T寻道 + T旋转 + T传输 = 950ms
Barracuda的R = 100MB / T = 105MB/s

随机和顺序工作负载之间的驱动性能很大,对于Cheetah来说几乎是200倍左右,对于对于Barracuda来说差不多是300倍

2.5 磁盘调度

由于I/O的高成本,操作系统决定发送给I磁盘的I/O顺序方面发挥作用,即给定一组I/O请求,磁盘调度程序检查请求并决定下一个要调度的请求

与任务调度不同,每个任务的长度通常是不知道的,对于磁盘调度,可以很好的检测每个任务I/O请求的时间,通过估计请求的查找和可能的旋转延迟,磁盘调度程序可以知道每个请求会花费多长时间,因此将优先服务花费时间少的请求,因此磁盘调度程序对于一组I/O请求将尝试遵循SJF(最短任务优先)原则

(1) SSTF:最短寻道时间优先

一种早期的调度方法被称为SSTF shortest seek time first,即最短寻道时间优先SSTF按磁道对I/O请求队列排序,选择在最近磁道上的请求先完成

假设磁头在处于30扇区,现在的请求有21和2,根据SSTF,那么就会率先完成对21的请求,待扇区21的读写完成后,再处理对扇区2的请求

但是SSTF也存在一些缺陷:
1,操作系统并不知道驱动器的几何结构,在操作系统眼里整个驱动器只是一系列的块,采用SSTF并不能满足现代驱动器
2,饥饿,如果采用了SSTF,现在对邻近磁道上的块一直有请求,那么距离远的块的请求,就无法得到服务

(2) SCAN:跨越磁道顺序

为了解决饥饿,有一种算法称为SCAN,简单地以跨越磁道顺序来服务磁盘请求,将一次跨越磁盘称为扫一遍,如果请求的块所属的磁道在这次扫一遍中已经服务过了那么它就不会立刻处理,而是排队等待下次扫一遍

SCAN虽然能避免饥饿,但并没有严格遵循SJF原则,它忽视了旋转

(3) SPTF:最短定位时间优先

SPTF shortest positioning time first,即最短定位时间优先,现代驱动器中,寻道和旋转大致相当,使用SPTF能提高性能

猜你喜欢

转载自blog.csdn.net/weixin_43541094/article/details/111548143