磁盘调度算法实战:FCFS和SSTF到底哪个更快?手把手教你计算寻道长度
在构建和维护任何现代计算系统时,磁盘I/O性能都是一个无法绕开的“硬骨头”。无论是数据库服务器响应缓慢,还是个人电脑加载大型文件时令人焦躁的等待,背后往往都隐藏着磁盘磁头在盘片上“奔波”的物理限制。对于操作系统学习者、系统管理员乃至任何对性能优化有追求的技术人员而言,理解磁盘如何“聪明地”安排这些读写请求,是提升系统整体响应速度的关键一步。今天,我们不谈空洞的理论,就从最基础、也最经典的两种算法——先来先服务(FCFS) 和 最短寻道时间优先(SSTF) 入手,通过亲手计算和对比,来直观感受不同调度策略如何深刻影响寻道长度,进而决定磁盘的吞吐效率。你会发现,算法的选择,远不止是教科书上的几行定义,它直接关系到线上服务的延迟和用户体验。
1. 磁盘I/O性能的核心:寻道时间与调度算法
要理解调度算法的价值,首先得明白磁盘工作的物理瓶颈在哪里。一块传统的机械硬盘(HDD)内部,数据存储在一个个同心圆的磁道上,读写数据依靠磁头在盘片上方径向移动来定位到特定的磁道。这个移动过程,就是寻道。寻道所花费的时间,称为寻道时间,它是磁盘I/O延迟中最主要、也最耗时的组成部分之一(另外两个是旋转延迟和传输时间)。
提示:寻道时间与磁头移动的物理距离直接相关。移动距离越长,所需时间就越长,这几乎是线性的关系。因此,减少磁头的总移动距离,是提升磁盘I/O性能最直接的思路。
那么,当操作系统收到一系列分散在不同磁道的读写请求时,它该如何决定先服务哪一个?这就是磁盘调度算法的用武之地。一个“好”的算法,目标非常明确:最小化磁头的总寻道距离(即总寻道长度),从而减少平均寻道时间,提高磁盘的吞吐量。我们即将深入对比的FCFS和SSTF,就是两种最基础但思路迥异的策略。
为了后续的计算演示,我们先统一一个概念和一组数据:
- 寻道长度:指磁头从当前磁道移动到目标磁道所跨越的磁道数。计算时,取两个磁道号之差的绝对值。例如,从100号磁道移动到55号磁道,寻道长度为
|100 - 55| = 45。 - 示例请求序列:假设磁头当前位于 100号磁道,等待处理的磁盘请求序列为:
55, 58, 39, 18, 90, 160, 150, 38, 184。 - 核心指标:我们将计算每种算法下的总寻道长度和平均寻道长度(总长度除以请求数量)。
2. 先来先服务(FCFS):公平但可能低效的“老实人”
FCFS算法,顾名思义,完全按照I/O请求到达的先后顺序进行服务。它不进行任何优化排序,是一种最直观、最公平的策略。其优点在于实现简单,每个请求都能得到服务,不存在“饥饿”问题(即某个请求被无限期推迟)。然而,它的缺点也同样明显:由于完全无视请求位置的分布,磁头可能会在盘片上来回“长途跋涉”,导致寻道效率低下。
让我们用之前定义的请求序列,来实际计算一下FCFS算法的表现。
FCFS调度过程模拟: 磁头初始位置:100 服务顺序:55 → 58 → 39 → 18 → 90 → 160 → 150 → 38 → 184
现在,我们一步步计算每次移动的寻道长度:
- 100 → 55:
|100 - 55| = 45 - 55 → 58:
|55 - 58| = 3 - 58 → 39:
|58 - 39| = 19 - 39 → 18:
|39 - 18| = 21 - 18 → 90:
|18 - 90| = 72 - 90 → 160:
|90 - 160| = 70 - 160 → 150:
|160 - 150| = 10 - 150 → 38:
|150 - 38| = 112 - 38 → 184:
|38 - 184| = 146
计算结果汇总:
| 步骤 | 从磁道 | 到磁道 | 寻道长度 |
|---|---|---|---|
| 1 | 100 | 55 | 45 |
| 2 | 55 | 58 | 3 |
| 3 | 58 | 39 | 19 |
| 4 | 39 | 18 | 21 |


2416

被折叠的 条评论
为什么被折叠?



