(一)磁盘硬件

磁盘相对于内存有如下3个主要优点:容量很大;每位的价格非常低;当关掉电源后,存储的信息不丢失。然而,磁盘的动作是机械运动,无论盘片转动还是磁头移动,都不可能无限快。所以,磁盘读写往往是系统I/O的瓶颈,为改善系统性能,合理地调度磁盘是必要的。

磁盘有很多种类型,最常见的是硬磁盘和软磁盘。磁盘读与写的速度相同,因而用做辅助存储器。为了提供高存储器可靠性,可将若干磁盘组成阵列。从外部看,一个硬盘的组成结构(如图6-8所示)为:磁头(Header)、柱面(Cylinder)和扇区(Sector)。

设备管理数据统计(设备管理-磁盘调度管理)(1)

设备管理数据统计(设备管理-磁盘调度管理)(2)

图6-8 硬盘结构示意图

· 磁头

通常看到的硬盘都是封装好的,看不到内部的构成情况。事实上,在同一个硬盘中存在好几张硬盘盘片(通常为9片),每片硬盘盘片与双面软盘一样,每面有一个读/写头。最上面和最下面两张盘片的外存储面分别与硬盘顶部和底座接触,所以通常这两个存储面不存放数据,也没有对应的磁头。硬盘所包含的盘片数可以用如下公式计算出来:

硬盘盘片数=(磁头数 2)/2

例如常见的16个磁头的硬盘,通常有(16 2)/2=9个存储盘片。

· 柱面

通常,把磁盘存储面上的存储介质同心圆圆环称作磁道。对于硬盘来说,由于有多个盘片,这些盘片中同一位置上的磁道不仅存储密度相同,而且其几何形状就像一个存储介质组成的圆柱一样,所以,将硬盘上的多个盘片上的同一磁道称作柱面

· 扇区

从几何特性来说,扇区是将磁道按照相同角度等分的扇形。每个磁道上的等分段,都是一个扇区。一个扇区所对应的数据存储量就是数据块大小。通常,一个硬盘扇区的大小在512 ~2 048 B之间。

在现代磁盘技术中,将盘面分为若干区,在外边的区中每个磁道包含的扇区数比里边区中的扇区数多,例如,划分为两个区,外区中每个磁道有32个扇区,而内区中每个磁道有16个扇区。实际磁盘,如WD 18300,有16个区。

为了隐藏每个磁道有多少扇区的细节,现代磁盘驱动器提供给操作系统的是虚拟的几何参数,如有x个柱面、y个磁头,每个磁道z个扇区。当操作系统提出寻道请求时,再由磁盘控制器把请求的参数重新映射成实际的磁道地址。就是说,磁盘的逻辑地址是由逻辑块构成的一维数组,逻辑块是传送的最小单位,其大小一般为512 B。当然,某些磁盘可以低级格式化,此时可以选择另外的逻辑块大小。当文件系统读/写某个文件时,就要由逻辑块号映像成物理块号,由磁盘驱动程序把它转换成磁盘地址,再由磁盘控制器把它映像成具体的磁盘地址。

(二)磁盘调度算法

存取盘块中的信息一般要用3部分时间:首先,系统要把磁头移到相应的磁道或柱面上,这个时间叫做寻道时间;一旦磁头到达指定磁道,必须等待所需要的扇区转到读写头下,这个延迟时间叫做旋转延迟时间;最后,信息实际在盘和内存之间进行传送也要花费时间,这部分时间叫做传输时间。一次磁盘服务的总时间就是这三者之和。

操作系统的一项职责就是有效地利用硬件。对于磁盘驱动器来说,就是尽量加快存取速度和增加磁盘带宽(即所传送的总字节数除以第1个服务请求至最后传送完成所用去的总时间)。通过调度磁盘I/O服务的顺序可以改进存取时间和带宽。对于大多数磁盘来说,寻道时间远大于旋转延迟时间与传输时间之和。所以,减少平均寻道时间就可以显著地改善系统性能。

· 先来先服务法

先来先服务(FCFS)调度算法最简单,也最容易实现。但它并没有提供最佳的服务(平均来说)。例如,有一个请求磁盘服务的队列,要访问的磁道分别是:

98,183,37,122,14,124,65,67

最早来的请求是访问98道,最后一个是访问67道。设磁头最初在53道上,它要从53道移到98道,然后依次移到183,37,122,14,124,65道,最后移到67道,总共移动了640个磁道。其调度方式如图6-9所示。

设备管理数据统计(设备管理-磁盘调度管理)(3)

图6-9 先来先服务调度算法示例

可见,这种调度算法产生的磁头移动幅度太大:从122道到14道,然后又回到124道。如果把邻近磁道的请求放在一起服务(如37和14道,122和124道),那么,磁头移动总量将明显减少,对每个请求的服务时间也减少,从而可改善磁盘的吞吐量。此外,磁头频繁大幅度移动,容易产生机械振动和误差,对使用寿命也有损害。

· 最短寻道时间优先法

在把磁头移到远处、为另外的请求服务之前,应该先把靠近磁头当前位置的所有请求都服务完。这种假定的根据是最短寻道时间优先(Shortest Seek Time First, SSTF)调度算法。SSTF选择的下一个请求距当前磁头所在位置有最小的寻道时间。由于寻道时间通常正比于两个请求的磁道差值,所以,磁头移动总是移到距当前道最近的磁道上去。

例如,用SSTF算法处理上面的请求队列。当前磁头在53道上,最接近的磁道是65。一旦移到65道,则下一个最接近的是67道。在此点,到37道的距离是30,而到98道的距离是31,所以,37道距67道最近,被选为下一个服务对象。接下去的服务顺序是14,98,122,124道,最后是183道,如图6-10所示。

设备管理数据统计(设备管理-磁盘调度管理)(4)

图6-10 最短寻道时间优先调度

采用这种方法,磁头共移动了236个磁道,是FCFS算法的1/3多一点。很明显,它改善了磁盘服务。

SSTF从本质上讲是SJF (短作业优先法) 调度的形式,它可能导致某些请求长期得不到服务(即出现“饥饿”问题)。在实际系统中,请求可在任何时候到达。假设队列中有两个请求,14和186道。当正在为14道服务时,一个靠近它的请求到来,那么,它将在下面得到服务,而186道的请求必须等待。从理论上讲,这种彼此接近的请求流可能接连不断地到达,那么,186道的请求将无限期地等待下去。

SSTF算法与FCFS算法相比有显著改进,但并不是最优的。例如,若把磁头从53道移到37道(尽管它不是靠得最近的),然后移到14道,接下去是65,67,98,122,124和183道,则磁头总移动量降为208个磁道。

· 电梯法

由于到来的请求队列具有动态性质,所以可采用扫描法。磁头从磁盘的一端出发,向另一端移动,遇到所需的磁道时就进行服务,磁头仅移到每个方向上有服务请求的最远的道上。即:一旦在当前方向上没有请求了,磁头的移动方向就反过来,继续下面的服务。这种算法调度磁头的移动过程与调度电梯的移动过程相似,因而称作电梯(Elevator)法。

采用前面的例子,但要知道磁头移动方向和它最近的位置。如果磁头正向0道方向移动,那么,它先为37道服务,接着是14道;到达14道后,因在这个方向上没有请求了,所以磁头移动方向反过来,移向盘的另一端,服务序列分别是65, 67, 98, 122, 124和183道。

,