来自不同进程的磁盘 I/ 0 请求构成一个随机分布的请求队列。磁盘 I/ 0 调度的主要目标就是减少请求队列中对应的平均柱面定位时间。
目前常用的磁盘调度算法有:
1. 先来先服务
2. 最短寻道时间优先
3. 扫描算法
4. 循环扫描算法。
先来先服务算法( First Come First Served, FCFS) 算法
- 这是一种最简单的磁盘调度算法,它根据进程请求访问磁盘的先后次序进 行调度。
- 此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
- 但此算法由于未对寻道进行优化,致使平均寻道时间可能很长。当用户提出的访问请求比较均匀地遍布整个盘面,而不具有某种集中倾向时(通常是这样),该算法策 略导致了随机访问模式,即无法对访问进行优化。在对盘的访问请求比较多的情况 下,此策略将降低设备服务的吞吐量、增加响应时间,但各进程得到服务的 响应时间的变化幅度较小。
- 该算法适用于访问请求不是很多,磁盘 I/0 负载较轻且每次读写多个连续扇区的情况,其算法实现最简单。
最短寻道时间优先算法( Shortest Seek Time First, SSTF) 算法
- 考虑磁盘 I/ 0 请求队列中各请求的磁头定位位置,选择从当前磁头位置出发,移动距离或时间最少的磁盘 I/ 0 请求。
- 该算法的目标是使每次磁头移动时间最少。它不一定是最短平均柱面定位时间,但比先来先服务算法有更好的性能。
- 该策略可以得到比较好的吞吐矗,有较低的平均响应时间。
- 其缺点是对用户的服务请求的响应机会不是均等的,可能会有进程处于饥饿状态。对中间磁道的访问请求一般会得到最好的服务 ,对内、外两侧磁道的服务随偏离中心磁道的距离而越远越差 ,因而导致响应时 间的变化幅度很大,在服务 请求很多的情况下,对内 、外边缘磁道的请求将会无限期地被延迟,因而有些请求的响应时间将不可预期 。
扫描算法( SCAN ) 算法
- 由于这种算法中磁头移动的规律像电梯的运行,所以又称为电梯调度算法。
- 在等候电 梯时,我们都希望电梯立即满足自己的要求,但是,电梯自有它对乘客请求的响应算法。
- 电梯算法考虑两个因素:
- 首先方向一致,其次距离最短。即先响应其请求方向与电梯移动方向一致的请求;
- 在方向一致的请求中,先响应电梯最先经其所在楼层的请求者。例如电梯在升到三楼时检测到四个请求:二楼、四楼和六楼有人上楼,五楼有人要下楼,那么在假定未超出电梯容釐而且暂时没有其他新请求出现的情况下,电梯的响应次序是 :四 楼、六楼、五楼、二楼。
- 选择在磁头前进方向上从当前位置移动最少的磁盘 I/ 0 请求执行 ,没有前进方向上的请求时才改变方向。该算法是对 SSTF 算法的改进,磁盘 I/ 0 性能较好,且没有进程会饿死。
- 该算法不仅考虑到欲访问的磁道与当前磁道的柱面距离 ,更优先考虑磁头的当前移动方向。即当磁头正在自里向外运动时,该算 法要选择的下一访问对象是其欲访问的磁道在当前磁道之外,又是距离最近的。直至再无更外的磁道需要访问时,才将磁臂换向,自外向里运动。从而避免了饥饿 现象的出现。
循环扫描算法( Circular Scan, CSCAN ) 算法
- 循环扫描是指总在一个方向上使用扫描算法,当到达边沿时直接移动到另一边沿的第一个位置。
- 该算法可改进扫描算法对中间磁道的偏好。实验表明, 该算法在中负 载或重负 载时 ,磁盘 I/ 0 性能比扫描算法好。循环扫描算法实 际上可以看成源于 C RT 电子束扫描线法。
- 循环扫描策略与基本扫描策略不同之处在于循环扫描是单向反复地扫描。当磁臂向内移动时 ,它对本次移动开始前到达的各访问要求,自外向内地依次给予服务,直到对最内柱面上的访问要求满足后,磁臂直接向外移动,使磁头停在 所有新的访问要求的最外边的柱面上。然后再对本次移动前 到达的各访问要求依次给予服务。
- 它之所以被称为循环扫描策略,是因为将磁盘各磁道视为一个环形缓 冲区似的构造一 首尾相连,最后一个磁道与第一个相接。若有磁头能立即折返的驱动器则此算法才更有意义。