让磁盘控制器在若干个请求中选择一个来首先执行,是提高磁盘系统吞吐率的一个有效方法,相比较先到先到先服务算法在多请求时磁盘吞吐率更高。
电梯算法:我们把磁头看作是在做横跨磁盘的扫描,从柱面最内圈再到最外圈,然后再返回来,正如电梯做垂直运动,从建筑物的最底层再到顶层,然后再返回来。
假设我们正在调度一个Megatorn747硬盘,我们回一该磁盘的平均寻道时间、旋转等待时间和传输时间分别为6.46、4.17、0.13ms。看以下图中,我们看到假设磁头正好在8000柱面,但是有三个要求再10、20、30ms到达。
请求的柱面 | 到达时间 |
8000 | 0 |
24000 | 0 |
56000 | 0 |
16000 | 10 |
64000 | 20 |
40000 | 30 |
首先,我们已知Megatorn747硬盘的以下参数:在柱面之间移动磁头组合从起到停止花费1ms,每移动4000个柱面另加1ms。
其次,我们计算出先到先服务算法的块访问完成时间。
我们知道一开始磁头组合就在8000的位置,完成时间=4.17+0.13=4.30ms
磁头组合就在24000的位置,完成时间=4.30+(1+(24000-8000)/4000)+4.30=13.6
磁头组合就在56000的位置,完成时间=13.6+(1+(56000-24000)/4000)+4.30=26.9
磁头组合就在16000的位置,完成时间=26.9+(1+(56000-16000)/4000)+4.30=42.2
磁头组合就在64000的位置,完成时间=42.2+(1+(64000-16000)/4000)+4.30=59.5
磁头组合就在40000的位置,完成时间=59.5+(1+(64000-40000)/4000)+4.30=70.8
因为在完成56000柱面读取的时,完成时间已经超过了20ms所以,那时候请求柱面64000的要求已经到达,此时只需要进行柱面跳转以及读取即可。
请求的柱面 | 完成时间 |
8000 | 4.3 |
24000 | 13.6 |
56000 | 26.9 |
16000 | 42.2 |
64000 | 59.5 |
40000 | 70.8 |
然后,我们计算出电梯算法的块访问完成时间。
我们知道一开始磁头组合就在8000的位置,完成时间=4.17+0.13=4.30ms
磁头组合就在24000的位置,完成时间=4.30+(1+(24000-8000)/4000)+4.30=13.6
(此时到达时间为10ms的16000已经到到)
磁头组合就在56000的位置,完成时间=13.6+(1+(56000-24000)/4000)+4.30=26.9
(此时到达时间为20ms的64000已经到达,此时距离56000较端,所以先在执行64000)
磁头组合就在640000的位置,完成时间=26.9+(1+(64000-56000)/4000)+4.30=34.2
磁头组合就在40000的位置,完成时间=34.2+(1+(64000-40000)/4000)+4.30=45.5
磁头组合就在16000的位置,完成时间=45.5+(1+(64000-40000)/4000)+4.30=56.8
我们从电梯算法的根本来看,在计算此算法时候,我们需要看每次请求柱面的完成时间内是否有新的请求柱面要求到达,如果有的话,那就进行插入,首先从小到大运行,然后从大到小运行。
请求的柱面 | 完成时间 |
8000 | 4.3 |
24000 | 13.6 |
56000 | 26.9 |
64000 | 34.2 |
40000 | 45.5 |
16000 | 56.8 |
通过采用诸如电梯算法等,减少访问块所需要的平均时间,在极端情况下,会一直有很多请求在等待,我们可以使每个请求的寻道非常接近最小寻道时间而非平均寻道时间。