磁盘调度算法

1) 先来先服务(First Come First Served, FCFS)算法

FCFS算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法,如图4-25所示。该算法的优点是具有公平性。如果只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能;但如果有大量进程竞争使用磁盘,那么这种算法在性能上往往接近于随机调度。所以,实际磁盘调度中考虑一些更为复杂的调度算法。

http://c.biancheng.net/cpp/uploads/allimg/140702/1-140F20241531R.jpg

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

2) 最短寻找时间优先(Shortest Seek Time First, SSTF)算法

SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短。当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但是能提供比 FCFS算法更好的性能。这种算法会产生“饥饿”现象。如图4-26所示,若某时刻磁头正在 18号磁道,而在18号磁道附近频繁地增加新的请求,那么SSTF算法使得磁头长时间在18 号磁道附近工作,将使184号磁道的访问被无限期地延迟,即被“饿死”。

http://c.biancheng.net/cpp/uploads/allimg/140702/1-140F2024354K2.jpg

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

3) 扫描(SCAN)算法(又称电梯算法)

SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,如图4-27所示。由于磁头移动规律与电梯运行相似,故又称为电梯调度算法。SCAN算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如FCFS算法和 SSTF算法好。

http://c.biancheng.net/cpp/uploads/allimg/140702/1-140F2024610124.jpg

图4-27 SCAN磁盘调度算法例如,磁盘请求队列中的请求顺序分别为55、58、39、18、90、160、150、38、184,磁头初始位置是100 磁道。釆用SCAN算法时,不但要知道磁头的当前位置,还要知道磁头的移动方向,假设磁头沿磁道号增大的顺序移动,则磁头的运动过程如图4-27所示。磁头共移动了(50+10+24+94+32+3+16+1+20)=250 个磁道,平均寻找长度=250/9=27.8。

4) 循环扫描(Circulair SCAN, C-SCAN)算法

**在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。**由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题。釆用SCAN算法和C-SCAN算法时磁头总是严格地遵循从盘面的一端到另一端,显然,在实际使用时还可以改进,即磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点。这种形式的SCAN算法和C-SCAN算法称为LOOK和C-LOOK调度。这是因为它们在朝一个给定方向移动前会查看是否有请求。注意,若无特别说明,也可以默认SCAN 算法和C-SCAN算法为LOOK和C-LOOK调度。

http://c.biancheng.net/cpp/uploads/allimg/140702/1-140F2024UJ44.jpg

图4-28 C-SCAN磁盘调度算法例如,磁盘请求队列中的请求顺序分别为55、58、39、18、90、160、150、38、184,磁头初始位置是100磁道。釆用C-SCAN算法时,假设磁头沿磁道号增大的顺序移动,则磁头的运动过程如图4-28所示。磁头共移动了(50+10+24+166+20+1+16+3+32)=322个磁道,平均寻道长度=322/9=35.8。对比以上几种磁盘调度算法,FCFS算法太过简单,性能较差,仅在请求队列长度接近于1时才较为理想;SSTF算法较为通用和自然;SCAN算法和C-SCAN算法在磁盘负载较大时比较占优势。它们之间的比较见表4-4。