磁盘臂调度算法
一次磁盘读/写操作需要的时间
1 寻找时间(寻道时间)Ts:在读/写数据前,需要将磁头移动到指定磁道所花费的时间。
寻道时间分两步:
(1) 启动磁头臂消耗的时间:s。
(2) 移动磁头消耗的时间:假设磁头匀速移动,每跨越一个磁道消耗时间为m,共跨越n条磁道。
则寻道时间 Ts = s + m * n。
磁头移动到指定的磁道,但是不一定正好在所需要读/写的扇区,所以需要通过磁盘旋转使磁头定位到目标扇区。
2延迟时间TR:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。设磁盘转速为r(单位:转/秒,或转/分),则平均所需延迟时间TR = (1/2)*(1/r) = 1/2r。
1/r就是转一圈所需的时间。找到目标扇区平均需要转半圈,因此再乘以1/2。
3 传输时间TR:从磁盘读出或向磁盘中写入数据所经历的时间,假设磁盘转速为r,此次读/写的字节数为b,每个磁道上的字节数为N,则传输时间TR = (b/N) * (1/r) = b/(rN)。
每个磁道可存N字节数据,因此b字节数据需要b/N个磁道才能存储。而读/写一个磁道所需的时间刚好是转一圈的时间1/r。
总的平均时间Ta = Ts + 1/2r + b/(rN),由于延迟时间和传输时间都是与磁盘转速有关的,且是线性相关。而转速又是磁盘的固有属性,因此无法通过操作系统优化延迟时间和传输时间。所以只能优化寻找时间。
磁盘调度算法
磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的磁盘调度算法有以下四种:
1. 先来先服务算法(FCFS)
根据进程请求访问磁盘的先后顺序进行调度,这是一种最简单的调度算法。
该算法的优点是具有公平性。
1 如果只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能;
2 但如果有大量进程竞争使用磁盘,那么这种算法在性能上往往接近于随机调度。
所以,实际磁盘调度中考虑一些更为复杂的调度算法。
1.1举例
假设磁盘访问序列:98,183,37,122,14,124,65,67。
读写头起始位置:53。
求:磁头服务序列和磁头移动总距离(道数)。
服务序列:即为请求序列98,183,37,122,14,124,65,67
磁头移动总距离:45+85+146+85+108+110+59+2=640
2. 最短寻道时间优先算法(SSTF)
SSTF算法选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻找时间最短。
当然,总是选择最小寻找时间并不能保证平均寻找时间最小,但是能提供比FCFS算法更好的性能。这种算***产生“饥饿”现象。
2.1 举例
假设磁盘访问序列:98,183,37,122,14,124,65,67。
读写头起始位置:53。
求:磁头服务序列和磁头移动总距离(道数)。
服务序列:65,67,37,14,98,122,124,183
磁头移动总距离:12+2+30+23+84+24+2+59=236
3. 扫描算法(SCAN)(电梯算法)
SCAN算法在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象。由于磁头移动规律与电梯运行相似,故又称为电梯调度算法。
SCAN算法对最近扫描过的区域不公平,因此,它在访问局部性方面不如FCFS算法和SSTF算法好。
假设磁头朝 0 移动并且磁头初始位置还是 53,磁头接下来处理 37,然后 14。在柱面 0 时,磁头会反转,移向磁盘的另一端,并处理柱面 65、67、98、122、124、183(图 3)上的请求。如果请求刚好在磁头前方加入队列,则它几乎马上就会得到服务;如果请求刚好在磁头后方加入队列,则它必须等待,直到磁头移到磁盘的另一端,反转方向,并返回。
服务顺序:37,14,65,67,98,122,124,183
磁头移动总距离:45+23+14+65+2+31+24+2+59=265
4. 循环扫描算法(CSCAN)
在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求。
由于SCAN算法偏向于处理那些接近最里或最外的磁道的访问请求,所以使用改进型的C-SCAN算法来避免这个问题。
釆用SCAN算法和C-SCAN算法时磁头总是严格地遵循从盘面的一端到另一端,显然,在实际使用时还可以改进,即磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点。这种形式的SCAN算法和C-SCAN算法称为LOOK和C-LOOK调度。这是因为它们在朝一个给定方向移动前会查看是否有请求。注意,若无特别说明,也可以默认SCAN算法和C-SCAN算法为LOOK和C-LOOK调度。
服务顺序:65,67,98,122,124,183,199,0,14,23
磁头移动总距离:12+2+31+24+2+59+16+199+14+23=382