北工大毕业生热血研究 揭密硬盘提速
12.3 为什么需要磁盘调度
在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列。有些操作系统对于进程的请求使用简单的“先来先服务”(FCFS :afirst-come-first-served)的策略,即先来的请求先被响应。FCFS策略看起来似乎是相当“公平”的,但是当请求的频率过高的时候FCFS策略的响应时间就会大大延长。
FCFS策略为我们建立起一个随机访问机制的模型,但是假如用这个策略反复响应从里到外的请求,那么将会消耗大量的时间(图12.3)。为了尽量降低寻道时间,看来我们需要对等待着的请求进行适当的排序,而不是简单的使用FCFS策略。这个过程就叫做磁盘调度管理。有时候FCFS也被看作是最简单的磁盘调度算法。
每种磁盘调度算法包含一种挑选等待队列中最应该被响应的请求的规则,而挑选根据就是各个请求的相对位置关系。将请求队列按照这种规则重新排序,为的是将机械运动的路程降到最短。
在相关文献中提到最多的两种磁盘调度是寻道优化和旋转(延迟)优化。由于寻道时间往往比延迟时间要高出一个数量级,因此绝大部分磁盘调度算法都把优化寻道时间作为首要目标。多数情况下优化延迟时间的作用是微乎其微的,除非是系统的负荷非常重的时候。
在负荷不是很重的情况下(也就是说请求队列的长度不大),FCFS算法还算是可以接受的方案。而当负荷稍微重一些的时候,其他算法的优势就立刻表现出来了。
尽管我们的目标是优化磁盘性能,但我们有时候却需要降低磁盘的处理速度。安装额外的硬盘虽然能够提高数据传输的速率,但却有可能超过一般个人电脑能够承受的范围。因此“过剩”的数据就要被存放在磁盘控制器的缓存里面了。此时,“交错”的作用就体现出来了:为了适当降低传输速率,连续的文件数据被分割成n-1个小块,以便于让处理器能够“跟上”。这就是“n路磁盘交错”的概念。不过磁盘的传输速率和减少寻道时间以及降低寻道距离相比较,后者在优化磁盘性能方面仍然起着主导的作用。<