赞
踩
目录
FCFS算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法,如图所示。
该算法的优点是具有公平性。若只有少量进程需要访间,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能;
若有大量进程竞争使用磁盘,则这种算法在性能上往往接近于随机调度。所以,实际磁盘调度中会考虑一些更为复杂的调度算法。
例如,磁盘请求队列中的请求顺序分别为55, 58, 39, 18, 90, 160, 150, 38, 184,磁头的初始位置是磁道100,采用FCFS算法时磁头的运动过程如上图所示。
磁头共移动了(45+3+19+21+72+70+10+112+146)= 498个磁道,平均寻找长度= 498/9 = 55.3。
SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以便使每次的寻找时间最短。
当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但能提供比FCFS算法更好的性能。这种算法会产生“饥饿”现象。
如下图所示,若某时刻磁头正在18号磁道,而在18号磁道附近频繁地增加新的请求,则SSTF算法使得磁头长时间在18号磁道附近工作,将使184号磁道的访问被无限期地延迟,即被“饿死”。
例如,磁盘请求队列中的请求顺序分别为55, 58, 39, 18, 90, 160, 150, 38, 184,磁头初始位置是磁道100,采用SSTF算法时磁头的运动过程如上图所示。
磁头共移动了10+32+3+ 16+1 +20+132+ 10+24= 248个磁道,平均寻找长度= 248/9 =27.5。
SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,实际上就是在最短寻找时间优先算法的基础上规定了磁头运动的方向,如下图所示。
由于磁头移动规律与电梯运行相似,因此又称电梯调度算法。
SCAN算法对最近扫描过的区域不公平,因此它在访问局部性方面不如FCFS算法和SSTF算法好。
例如,磁盘请求队列中的请求顺序分别为55, 58, 39, 18, 90, 160, 150, 38, 184,磁头初始位置是磁道100。采用SCAN算法时,不但要知道磁头的当前位置,而且要知道磁头的移动方向,假设磁头沿磁道号增大的顺序移动,则磁头的运动过程如上图所示。移动磁道的顺序为100, 150,160, 184, 200, 90, 58, 55, 39, 38, 18。磁头共移动了(50+ 10+24+ 16+110+32+3+ 16+1 + 20)=282个磁道,平均寻道长度= 282/9 = 31.33。.
在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。
由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题,如下图所示。
采用SCAN算法和C-SCAN算法时,磁头总是严格地遵循从盘面的一端到另一端,显然,在实际使用时还可以改进,即磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点。
这种形式的SCAN算法和C-SCAN算法称为L0OK调度和C-LOOK调度,因为它们在朝一个给定方向移动前会查看是否有请求。
例如,磁盘请求队列中的请求顺序为55, 58, 39, 18, 90, 160, 150, 38, 184,磁头初始位置是磁道100。
采用C-SCAN算法时,假设磁头沿磁道号增大的顺序移动,则磁头的运动过程如图C-SCAN所示。移动磁道的顺序为100, 150, 160, 184, 200, 0, 18, 38, 39, 55, 58, 90。磁头共移动50+ 10+24+ 16+ 200+ 18+20+1+ 16+3+32 = 390个磁道,平均寻道长度大390/9 = 4333。
对比以上几种磁盘调度算法,
它们之间的比较见下表
优点 | 缺点 | |
FCFS算法 | 公平、简单 | 平均寻道距离大,仅应用在避盘I/O较少的场合 |
SSTF算法 | 性能比“先来完服务”好 | 不能保证平均寻道时间最短,可能出现“饥饿”现象 |
SCAN算法 | 寻道性能较好,可避免“饥饿”现象 | 不利于远离磁头一端的访问请求 |
C-SCAN算法 | 消除了对两端磁道请求的不公平 | - |
参阅:王道操作系统
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。