7.2.7 磁盘调度

大多数磁盘两面都有磁涂层,称为双面磁盘。磁盘本身安装到一个磁盘驱动器中。磁盘驱动器由磁头臂、用于旋转磁盘的轴心和输入/输出数据所需要的电子设备组成。一般情况下,磁盘驱动器允许多个磁盘片垂直叠加构成磁盘组,盘片之间相距1英寸,并提供多个磁头臂,所有磁头被机械固定在一起,并距磁盘中心的距离相同。这样,磁盘被组织成柱面,柱面就是磁盘片相对位置相同磁道的组合。盘片由若干磁道组成,相邻磁道通过间隙分隔。每个磁道又包含若干个扇区,相邻的扇区通过磁道内部的间隙来分隔。硬盘上每条磁道上的扇区数目可多达几百个。磁头数大约是1~16个。

这里的磁盘调度是指磁头臂调度(或称磁盘移臂调度、磁盘臂调度)。

1.磁盘访问时间

磁盘设备存储容量大且访问速度快,可随机存取。目前大多数计算机系统中,均以磁盘作为主要外存设备。对磁盘的访问时间,确切地说,是读或写一个磁盘块所需要的时间,包括以下3个部分:

1)寻道时间是将读写磁头移动到相应的柱面所花费的时间,或者说,将磁头臂移动到相应柱面所需的时间。

2)旋转延迟时间,也称为搜索延迟,是将读写磁头定位于某一磁道上的某个块号(扇区)所需要的时间,或者说,等待相应的扇区旋转到读写磁头下所需要的时间。

3)传输时间:数据传送时间,数据写入磁盘,或者从磁盘读出数据的时间。

磁盘I/O请求服务的时间为以上3部分时间的总和。其中,寻道所花费的时间最长。因此,减少平均寻道时间可以充分改善系统性能。

2.磁盘调度算法

设计磁盘调度算法应当考虑两个基本因素:公平性和高效性。公平性:一个磁盘访问请求应当在有限时间内得到满足;高效性:减少设备机械运动所带来的时间开销。

(1)先来先服务

先来先服务(First Come First Served,FCFS)根据进程请求访问磁盘的先后顺序进行调度。由于只考虑申请者申请的先后顺序,此算法的优点是公平、处理简单,且每个进程的请求都能得到处理,不会出现某一个进程的请求时间长期得不到满足的情况。其缺点是:未对寻道进行优化,致使平均寻道时间可能较长。一般适用于请求磁盘I/O的进程数目较少的场合。

(2)最短寻道时间优先

最短寻道时间优先(Shortest Seek Time First,SSTF)算法也称为最短寻道优先(Shortest Seek First,SSF)。最短寻道时间优先以申请者要求磁头移动距离的大小作为优先因素,申请者访问的磁道距离磁头当前位置愈近者优先,以使每次寻道时间最短。但该调度算法却不能保证平均寻道时间最短。与先来先服务相比,该算法改善了平均等待时间,可以获得较好的寻道性能,但可能会导致某些进程“饿死”现象。因为只要不断有新的申请,且要访问的磁道离磁头当前的位置较近,这种新的请求就会被优先处理。

(3)扫描算法

扫描算法(SCAN)又称为电梯算法,同时考虑申请者要求磁头移动方向,又考虑要求磁头移动的距离,而且首先是方向一致,其次才是距离最短。该算法选择的下一个访问对象应是其预访问的磁道在当前磁道之外,又是距离最近的,直到再无当前磁道之外的磁道需要访问,才将磁头臂换向,由外向里访问。这时选择在当前磁道之内且距离最近的磁道访问,磁头逐步向里移动,直至再无当前磁道之内的磁道需要访问,从而避免了饥饿现象。

(4)循环扫描算法

循环扫描算法(CSCAN)是对扫描算法的改进,以减少响应时间。循环扫描算法是单向反复扫描。磁头臂按照同一个方向移动,例如,从最低编号的柱面向最大编号的柱面顺序扫描,直到该方向上没有请求为止,然后直接返回最低编号的柱面,中途不提供服务,如此反复循环。