文件系统笔记四、磁盘调度算法

文件系统笔记四、磁盘调度算法

引言:在多道程序设计的计算机系统中,各个进程可能会不断对磁盘提出读/写请求。有时候进程发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,合理进行磁盘调度。本文将回顾影响磁盘读写时间的三个因素,并介绍几种常见的调度算法(FCFS、STF、SSF、 ES、ESLA、OWES)。


一、影响磁盘读写时间的主要因素

  影响磁盘读写时间的主要因素有寻道时间、旋转延迟和传输时间。总平均存取时间Ta可以表示为:Ta = Ts + Tr + Tt。

  • 1)、 寻找时间Ts :指的是把读写磁头移动到要求的磁道位置所需要的时间。实际的寻道时间,依赖于收到读写请求时读写磁头所处的位置和磁头需要移动的距离。这个时间除跨越n条磁道的时间外,还包括启动磁臂的时间s,即:Ts = m * n + s。式中,m是与磁盘驱动器速度有关的常数,约为0.2ms,磁臂的启动时间约为2ms。
  • 平均寻道时间 :由于没有办法在收到访问要求前获取读写磁头所处的位置和磁头需要移动的距离,因此我们常使用平均寻道时间这个概念。平均寻道时间数值依赖于磁盘驱动器组件的物理尺寸和磁头进行加速和减速的快慢程度。通常在8ms ~ 20ms之间,并且近年来并没有多大变化

  • 2)、旋转延迟Tr :指的是在磁头到达所要求的磁道位置后,等待所要求的扇面旋转到磁头下方的平均时间。若平均来讲,所需要的扇面距磁头半圈远的距离,旋转延迟通常为旋转时间的一半。当前磁盘驱动器旋转速度所处的范围为每分钟3500转到10000转,因此旋转延迟的范围在3ms ~ 8.7ms内。 (以1w转为例,1w转耗时6wms, 1转耗时3ms, 其旋转延迟为3ms)

  • 3) 传输时间Tt :从磁盘读出或向磁盘写入数据所经历的时间,这个时间取决于每次所读/写的字节数b和磁盘的旋转速度:Tt = b / (r * N)。式中,r为磁盘每秒钟的转数;N为一个磁道上的字节数。

  虽然这里给出了平均存取时间的公式,但是这个平均值是没有太大实际意义的。因为在上述3个因素中,寻道时间居于支配地位,且其为软件开发人员可控因素。为了提高磁盘的读写效率,需要降低磁盘的寻道时间,实现的手段则是磁盘调度。磁盘调度算法主要有以下几种:FCFS、STF、SSF、 ES、ESLA、OWES。

  在《操作系统之哲学原理》这本书中,讲寻道时间、旋转延迟、数据传输这三个影响磁盘I/O操作的因素中,寻道耗费时间居于支配地位,故提高磁盘的读写效率,需要降低寻道时间,相关的磁盘调度算法也是围绕着降低寻道时间展开的。
  原文如下:影响磁盘读写时间的因素有3个:寻道时间、旋转延迟、数据传输时间。而在这三者中,前两者为机械运动,数据传输主要为电子运动。显然机械运动的速度远低于电子运行的速度。前两个机械运动部分,寻道时间又较长。因此,在上述3个因素中,寻道时间居于支配地位。为了提高磁盘的读写效率,需要降低磁盘的寻道时间,实现的手段则是磁盘调度。
  但我个人认为,三者耗费时间考量只是一方面,最主要的原因是在这三个因素中,我们软件开发人员可以控制的,只能是寻道时间。因为旋转延迟依赖于磁盘驱动器的旋转速度,在保证定位精度的前提下,已经达到其上限,这只能由硬件厂商去优化。同理传输时间依赖于旋转的速度及磁道容量。故软件开发人员,能优化的部分,就在总寻道时间。


二、磁盘调度算法

2.1、先来先服务FCFS

  先来先服务FCFS (First come, First Serve):是一种自然公平的调度策略。先来先到,无特权用户。FCFS算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法,如图1所示。

图1、FCFS调度算法示意图

图1、先来先服务算法示意图

例如:,磁盘请求队列中的请求顺序分别为55、58、39、18、90、160、150、38、184,磁头初始位置是100磁道,釆用FCFS算法磁头的运动过程如图1所示。磁头共移动了 (45+3+19+21+72+70+10+112+146)=498 个磁道,平均寻找长度=498/9=55.3。

  该算法的优点是具有公平性。如果只有少量进程需要访问,且大部分请求都是访问块聚的文件扇区,则有望达到较好的性能;但如果有大量进程竞争使用磁盘,那么这种算法在性能上往往接近于随机调度。所以,实际磁盘调度中往往对每个磁盘的读写任务进行区别对待。

2.2、短任务优先STF

  短任务优先STF(Shortest Task First):就是谁的磁盘读写数据量少,谁就优先。由于磁盘的访问时间主要取决于寻道和旋转延迟,因此读写的数据量对整个磁盘读写的时间影响并不大。因此此种策略的意义不大。

2.3、短寻道优先SSF

  短寻道优先SSF:(Shortest Seek First)则是考虑当前磁头离谁的数据最近,谁就优先。由于寻道在磁盘访问时间中占得比重最大,此种策略似乎正中要害,能够缩短磁盘访问时间。

同样使用图1的例子,磁盘请求队列中的请求顺序分别为55、58、39、18、90、160、150、38、184,磁头初始位置是100磁道,釆用SSTF算法磁头的访问顺序:90、58、55、39、38、18、150、160、184。运动过程如图2所示。磁头共移动了 (10+32+3+16+1+20+132+10+24)=248 个磁道,平均寻找长度=248/9=27.5。

这里写图片描述

图2、SSF调度算法示意图

  不过SSF调度算法缩短并不是绝对的。例如,如果当前的磁盘读写如图3所示,则磁盘读写请求的执行呈现的是一种左右摇摆的模式。这种情况下总寻道数大幅增加,系统花在寻道上的时间迅速增加。改进的办法就是不要左右摆动,而令其单向运动,即电梯调度策略。

这里写图片描述

图3、SSF调度算法左右摇摆示意图

2.4、电梯调度ES

  电梯调度策略ES:(Elevator Scheduling),又称扫描算法(SCAN),先满足一个方向上所有请求,再满足相反方向的所有请求,循环往复。磁头向每个方向运动时(由里向外和由外向里),皆扫描到头。

这里写图片描述

图4、ES调度算法示意图

  对该策略进行仔细分析发现,其运行模式与电梯运行模式并不完全相同,而是一扫到底。而一个方向扫描到头再反转方向也许并不是最有效。如果一个方向上已经没有请求了,我们可以提前掉头。而无需扫描到末端。这种改进后的算法就是提前查看电梯法。

2.5、提前查看电梯调度ESLA

  提前查看电梯调度ESLA(Elevator Scheduling with Look Ahead),如果一个方向的请求全部满足后,立即进行反转,无需扫描到底。这种算法就是每次往某个方向移动时,必须确保该方向还有请求未被满足。否则即刻调转方向,这样效率将得到提高。如图5所示:

这里写图片描述

图5、ESLA调度算法示意图

2.6、单向电梯调度OWES

  单向电梯调度OWES(One Way Elevator Scheduling)。对于提前查看电梯法的改进,就是单向电梯调度,即只向一个方向扫描。当该方向没有剩余请求时,则回到0道,再进行同样的扫描。如果在磁盘请求与图5同样的情况下,使用单向电梯调度的总寻道数为:1 + 4 + 16 + 8 = 29,比提前查看电梯法节省23个磁道的寻道时间。

这里写图片描述

图6、OWES调度算法示意图

2.7、磁盘交替编号—降低旋转时延

  除减少寻找时间外,减少延迟时间也是提高磁盘传输效率的重要因素。可以对盘面扇区进行交替编号,对磁盘片组中的不同盘面错位命名。假设每个盘面有8个扇区,磁盘片组共 8个盘面,则可以釆用如图7所示的编号

这里写图片描述

图7、磁盘交替编号示意图

  磁盘是连续自转设备,磁头读/写一个物理块后,需要经过短暂的处理时间才能开始读/ 写下一块。假设逻辑记录数据连续存放在磁盘空间中,若在盘面上按扇区交替编号连续存放,则连续读/写多个记录时能减少磁头的延迟时间;同柱面不同盘面的扇区若能错位编号,连续读/写相邻两个盘面的逻辑记录时也能减少磁头延迟时间。

——————————————————————————————————————
参考资料:
1、《操作系统之哲学原理》 邹恒明著
2、磁盘调度算法
3、磁盘调度算法 -百度百科

纠错与建议
邮箱:db_hebut@163.com


版权声明:本文为XD_hebuters原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。