1)先来先服务(FCFS)算法
FCFS 算法根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法。该算法的优点是具有公平性。如果只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能;如果有大量进程竞争使用磁盘,那么这种算法在性能上往往接近于随机调度。所以,实际磁盘调度中考虑一些更为复杂的调度算法。
2)最短寻找时间优先(SSTF)算法
SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短。当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但是能提供比 FCFS 算法更好的性能。这种算法会产生“饥饿”现象。
3)扫描(SCAN)算法(又称为电梯算法)
SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道最近的请求作为下一次服务的对象,实际上就是在最短寻道时间优先算法的基础上规定了磁头运动的方向。由于磁头移动规律与电梯运行相似,又称为电梯调度算法。SCAN 算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如 FCFS 算法和SSTF 算法好。
补充:采用 SCAN 算法时,不但要知道磁头的当前位置,还要知道磁头的移动方向。没有前进方向上的请求时才改变方向。
4)循环扫描(C-SCAN)算法
在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不是服务任何请求。由于SCAN 算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的 C-SCAN 算法来避免这个问题。
采用 SCAN 算法和 C-SCAN 算法时磁头总是严格地遵循从盘面的一端到另一端,显然,在使用时还可以改进,即磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点。这种形式的 SCAN 算法和 C-SCAN 算法称为 LOOK 和 C-LOOK 调度。这是因为它们在朝一个给定方向前会查看是否有请求。
注意,若无特别说明,也可以默认 SCAN 算法和 C-SCAN 算法为LOOK 和 C-LOOK 调度。
--------------------------------------------------------------------------------------------------------------------------------
以上算法无法解决磁臂粘着问题。
--------------------------------------------------------------------------------------------------------------------------------
5)N-Step-SCAN算法
把磁盘I/O请求队列分成长度为N的段,每次使用扫描算法处理这N个请求,即将请求的任务分成长度为N的若干个队列,队列间的调度采用FCFS方式,队列内部的请求以SCAN方式调度。 该算法的目标是解决磁臂粘着问题。 当N值很大时,该算法接近于SCAN;而N=1时该算法变为FCFS。
6)FSCAN调度算法
将N-Step-SCAN算法中的队列数目定为2。把磁盘I/O请求分成两个队列,交替使用扫描算法处理一个队列,新生成的磁盘I/O请求放入另一队列中。该算法的目标与N步扫描算法一致。