计算机基础-操作系统-磁盘调度算法
磁盘一次读或写操作总的存取时间=寻道时间+延迟时间+传输时间,但是由于延迟时间和传输时间都与硬盘的转速有关,转速越大,时间越短,因此系统需要优化的是寻道时间,以下所讲的磁盘调度算法都是服务于寻道时间
1. 一次磁盘读/写操作需要的时间
寻道时间
在读写前,将磁头移动到指定磁道所花的时间。
其实启动磁头臂也是需要时间的,这里把它记为 s.
移动磁头时,每跨越一个磁道耗时m,总共假设跨越n个磁道。
所以寻道时间 T=mn+s;延迟时间
通过旋转磁盘,是磁头到达目标扇区所需要的时间。转速设为r.
所以平均所需的延迟时间Tr=(1/2)*(1/r)=1/2r
传输时间
从磁盘读出或向磁盘写入数据所经历的时间,假设磁盘转速是r,读写字节为b,每个磁道上的字节数是N,则:
Tt=(1/r)*(b/N)=b/(rN)
2.1. 先来先服务算法
根据进程请求访问磁盘的先后顺序进行调度
假设磁头的初始位置是 100 号磁道,有多个进程先后陆续的请求访问
55, 58, 39, 18, 90, 160, 150, 38, 184
磁头总共移动了 45 + 3 + 19 + 21 + 72 + 70 + 10 + 112 + 46 = 498 个隧道
2.2. 最短寻道时间优先(SSTF)
优先调度与当前磁头所在磁道最近的磁道。
假设磁头的初始位置是 100 号磁道,有多个进程先后陆续的请求访问
55, 58, 39, 18, 90, 160, 150, 38, 184
磁头总共移动了 (100 - 18) + (184-18) = 248 个隧道
响应一个请求平均需要移动 248 / 9 = 27.5 个磁道
虽然平均寻道时间变短了,但是不够公平。如果新到达的磁道请求总是比在等待的磁道请求近,那么等待的那个请求就会饥饿。两端的磁道请求更容易出现饥饿现象。
2.3. 电梯算法(SCAN)
电梯总是保持一个方向运行,直到该方向没有请求位置,然后改变运行方向。
电梯算法和电梯的运行过程类似,总是按照一个方向进行磁盘调度,直到该方向上没有未完成的磁盘请求,然后改变方向。
因为考虑了移动方向,因此所有的磁盘请求都会被满足,解决了 SSTF 算法的饥饿问题。
假设某磁盘的隧道为 0 ~ 200 号,磁头的初始位置是 100 号隧道,且此时磁头正在往磁道号增大的方向移动,多个进程陆续的请求访问
18, 38, 39, 55, 58, 90, 150, 160, 184
磁头总共移动了 (200 - 100) + (200-18) = 282 个隧道
响应一个请求平均需要移动 282 / 9 = 31.3 个磁道
2.4. 循环扫描算法(C-SCAN)
SCAN 算法对于各个位置磁道的响应频率不平均,而 C-SCAN 算法就是为了解决这个问题。**规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求**。
优点:比起 SCAN 来,对于各个位置磁道的响应频率很平均。
缺点:只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了;并且,磁头返回时其实只需要返回到18号磁道即可,不需要返回到最边缘的磁道。另外,比起SCAN算法来,平均寻道时间更长。
2.5. LOOK 算法
LOOK 如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边察, 因此叫 LOOK )
优点:比起 SCAN 算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短
2.6. C-LOOK 算法
C-SCAN 算法的主要缺点是只有到达最边上的磁道时才能改变磁头移动方向,并且磁头返回时不一定需要返回到最边缘的磁道上。C-LOOK 算法就是为了解决这个问题。如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。比起 C-SCAN 算法来,C-LOOK 不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短。
3. 减少磁盘延迟时间
延迟时间指的是是磁头寻找目标删去所花的时间(磁头在扇区所属的磁道,通过磁盘转动寻找到目标扇区)
3.1. 交替编号
做法:让编号相邻的扇区在物理上不相邻。
原理上:读取完一个扇区后,需要一段时间处理才可以继续读入下一个扇区。
3.2. 错位命名
具体做法:让相邻盘面的扇区编号“错位”
原理:与交替编号相同。“错位命名法可以降低延迟时间”
磁盘地址结构(柱面号,盘面号,扇区号),为什么不是(盘面号,柱面号,扇区号)?
因为在读取地址连续的磁盘块时,前者更不需要移动磁头。