当前位置: 首页 > news >正文

【操作系统】磁盘调度算法(FCFS/SSTF/SCAN/C-SCAN)

考点频率:★★★★☆(选择题常考,有时结合计算题考查寻道距离)
难度:⭐⭐⭐
建议:重点掌握每种算法的磁头移动顺序和总寻道距离的计算方法,理解SCAN与C-SCAN的核心区别

1️⃣ 为什么需要磁盘调度?

磁盘(机械硬盘)的访问时间由三部分组成:

组成部分说明占比
寻道时间磁头移动到目标磁道的时间最大(占主导)
旋转延迟目标扇区旋转到磁头下方的时间中等
传输时间实际读写数据的时间最小

其中寻道时间占比最大,因此减少平均寻道距离是磁盘调度算法的主要目标。

注:SSD固态硬盘没有机械结构,不存在寻道时间,因此磁盘调度算法主要针对传统机械硬盘(HDD)。

2️⃣ 先来先服务(FCFS,First Come First Served)

2.1 核心思想

按请求到达的先后顺序依次服务,公平、无饥饿,但效率通常最低。

2.2 计算示例

磁头初始位置:100
请求序列55, 58, 39, 18, 90, 160, 150, 38, 184

按顺序服务,计算磁头移动距离:

步骤当前磁道 → 目标磁道移动距离
1100 → 5545
255 → 583
358 → 3919
439 → 1821
518 → 9072
690 → 16070
7160 → 15010
8150 → 38112
938 → 184146

总寻道距离:45+3+19+21+72+70+10+112+146 =498
平均寻道距离:498/9 ≈ 55.3

3️⃣ 最短寻道时间优先(SSTF,Shortest Seek Time First)

3.1 核心思想

每次选择距离当前磁头最近的请求服务。平均寻道距离优于FCFS,但可能导致饥饿(远处的请求长期得不到服务),也可能导致磁头在局部区域来回震荡。

3.2 计算示例

同上条件(初始100,请求序列同上):

步骤当前磁道最近请求移动距离
11009010
2905832
358553
4553916
539381
6381820
718150132
815016010
916018424

总寻道距离:10+32+3+16+1+20+132+10+24 =248
平均寻道距离:248/9 ≈ 27.6(明显优于FCFS)

4️⃣ 扫描算法(SCAN,电梯算法)

4.1 核心思想

磁头沿一个方向移动,服务沿途所有请求,直到该方向最末端(最大磁道号),然后反向移动,继续服务另一方向的请求。

类比电梯:电梯向上运行,中途有人按楼层就停,一直跑到顶楼,然后向下运行,再服务下行的请求。

4.2 计算示例

同上条件,假设磁头初始向磁道号增大的方向移动,最大磁道号为199。

服务顺序

  • 向大号方向:先遇到的请求有哪些?从100向大号,依次遇到160, 150, 184(按磁道号排序:150, 160, 184)。
    但注意:从100向大号移动,最先遇到的是150?是的,因为90、58等都在小号方向,当前方向不会服务它们。
  • 到达184(或到达199)后反向,服务小号方向的请求:90, 58, 55, 39, 38, 18(按递减顺序:90, 58, 55, 39, 38, 18)

总寻道距离(假设从100移动到最大磁道199,再反向到最小请求18):

  • 100 → 199:99
  • 199 → 18:181
  • 总距离 = 99 + 181 =280

(如果只移动到最大请求184,距离为 84 + 166 = 250)

4.3 SCAN的特点

优点缺点
吞吐量较高,平均寻道时间较短两端请求响应慢(边缘地区等待时间长)
无饥饿(所有请求最终都会服务)磁头移动方向变化频繁

5️⃣ 循环扫描算法(C-SCAN,Circular SCAN)

5.1 核心思想

磁头单向移动(如只向磁道号增大的方向),服务沿途所有请求,到达最远端后快速返回到起点(返回过程中不服务任何请求),然后重新开始向大号方向移动。

类比:把磁道想象成一个环形,磁头永远沿着一个方向转圈。

5.2 计算示例

同上条件,初始100,向大号方向。

服务顺序

  • 向大号方向服务:150, 160, 184(按顺序)
  • 到达184(或199)后,快速返回0(返回过程不服务)
  • 从0重新向大号方向移动,服务剩余的小号请求:18, 38, 39, 55, 58, 90(按递增顺序)

总寻道距离(假设从184快速返回0,再从0到90):

  • 100 → 184:84
  • 184 → 0:184(返回,不服务)
  • 0 → 90:90
  • 总距离 = 84 + 184 + 90 =358

(如果最大磁道号为199,则距离为 99 + 199 + 90 = 388)

5.3 C-SCAN的特点

优点缺点
对各磁道位置的请求响应时间更均匀返回过程浪费寻道时间
无饥饿总寻道距离通常略大于SCAN

6️⃣ 四种算法对比表

算法选择依据是否有饥饿平均寻道实现复杂度
FCFS请求到达顺序最低
SSTF离当前磁头最近有(远处可能被饿死)较低中等
SCAN(电梯)当前方向上的下一个中等
C-SCAN单向循环较低较高

补充算法(了解)

  • LOOK算法:SCAN的改进版,磁头只需移动到当前方向上的最远请求,不需要到达物理最末端(如199)。上面的SCAN示例中,如果采用LOOK,磁头只到184就反向,距离会从280降到250。
  • C-LOOK:C-SCAN的改进版,磁头只移动到当前方向上的最远请求,然后直接返回到当前方向上的最近请求。在示例中,C-LOOK的距离为 (184-100) + (184-18) + (90-18) = 84 + 166 + 72 = 322,比C-SCAN的358更优。

7️⃣ 经典例题

例题1:某磁盘请求序列(磁道号):98, 183, 37, 122, 14, 124, 65, 67,磁头初始在53,向磁道号增大的方向。分别用SCAN和C-SCAN调度,求服务顺序。

解析

  • SCAN(向大号,到199后反向):
    向大号:98, 122, 124, 183(按递增)
    反向向小号:67, 65, 37, 14(按递减)
    服务顺序:98 → 122 → 124 → 183 → 67 → 65 → 37 → 14

  • C-SCAN(向大号,到199后返回0,再向大号):
    向大号:98, 122, 124, 183
    返回0(不服务)
    从0向大号:14, 37, 65, 67
    服务顺序:98 → 122 → 124 → 183 → 14 → 37 → 65 → 67

答案:SCAN: 98→122→124→183→67→65→37→14;C-SCAN: 98→122→124→183→14→37→65→67


例题2:以下关于磁盘调度算法的叙述中,正确的是( )。

A. SSTF算法不会导致饥饿
B. SCAN算法在服务过程中不会改变方向
C. C-SCAN算法在返回过程中也服务请求
D. FCFS算法公平性最好

解析:A错误(SSTF可能导致饥饿);B错误(SCAN到达最远端后会改变方向);C错误(C-SCAN返回时不服务);D正确。选D

8️⃣ 记忆口诀

FCFS按序来,SSTF找最近。
SCAN像电梯,到顶再回移。
C-SCAN单向走,返回不服务。

9️⃣ 小测验(评论区对答案)

磁头初始在50,向磁道号增大的方向,请求序列为10, 80, 30, 90, 60。采用SCAN算法,服务顺序为( )。
A. 60→80→90→30→10
B. 60→80→90→10→30
C. 60→90→80→30→10
D. 80→90→60→30→10

🔔本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #磁盘调度 #FCFS #SSTF #SCAN #C-SCAN #操作系统

http://www.jsqmd.com/news/1133788/

相关文章:

  • 语法全对,物理全错:2026年最危险的AI幻觉,正在污染你的仿真库
  • Android应用安全加固实战:代码混淆、资源加密、SO加固与完整性校验
  • Unity游戏汉化终极指南:XUnity Auto Translator让你畅玩全球游戏
  • GPT-5.5新特性对开源搜索引擎有什么冲击?GPT-5.5新特性对开源搜索引擎的冲击与机遇
  • 从CNN到Transformer:五大神经网络架构的本质与选型指南
  • Python爬虫如何绕过TLS指纹检测?curl_cffi实战指南
  • 基于智普清言与LangChain构建私有化AI知识库:从架构设计到部署实践
  • 基于MCP协议为AI编程助手集成逆向分析能力:从静态反编译到动态Hook的完整实践
  • 有个人似乎想要破解我的VIP功能?-----软件故障
  • iOS 17+隐私合规实战:从Reachability案例解析PrivacyInfo.xcprivacy配置
  • 微信小程序真机网络请求失败(600001)排查指南:从域名配置到抓包实战
  • Java安全随机数生成:从Random漏洞到SecureRandom实战
  • 寄生感知共质心布局生成:集成布线优化的 3 步单元电容尺寸最小化方法
  • 终极Unity游戏汉化指南:XUnity Auto Translator让你轻松玩转外语游戏
  • VOT挑战赛 EAO 指标详解:从数学公式到Python代码实现5步拆解
  • 【复现】配电网对分布式电源和电动汽车的承载力评估及提升方法综述(Matlab代码实现)
  • Cerast 智能:可查找域名暴露路径与配置错误,支持子字符串搜索
  • WebPack与JQuery安全检测:从打包到拆包的前端攻防实战
  • 开源热力图实战:基于OWA的用户点击行为可视化与深度分析
  • 【复现】新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
  • 终极英雄联盟辅助神器:Seraphine智能战绩查询与自动化工具完整指南
  • architect-awesome:后端架构师的技术知识图谱
  • 鸿蒙物理 108 篇 第七十二篇 五行生克体系总闭环
  • RuoYi-Vue集成微信登录:OAuth2.0授权码模式与Spring Security JWT融合实践
  • 基于开源AI与本地化部署的智能合同管理系统构建指南
  • React Three Fiber:React 生态中的 3D 渲染方案
  • 如何用哔哩下载姬高效管理你的B站视频收藏库
  • CompreFace API契约测试与消费者驱动开发(CDC)实战指南
  • UVa 626 Ecosystem
  • 高效B站视频下载解决方案:哔哩下载姬专业使用指南