软考-软件设计师:操作系统-存储管理-磁盘调度算法、移臂调度算法(考点多) 作者:马育民 • 2025-04-05 11:27 • 阅读:10007 # 磁盘调度算法 磁盘调度分以下两类: 1. 移臂调度,先进行移臂调度,**找磁道**。有算法优化 2. 旋转调度,然后再进行旋转调度,**找扇区**。没有算法优化 由于访问磁盘 **最耗 寻道时间**,因此磁盘调度 **目标** 是:**使磁盘平均寻道时间最少** # 移臂调度算法 - 先来先服务(FCFS):谁先申请就先响应谁 - 最短寻道时间优先(SSTF):选择剩下申请中,响应距离目前磁道数最近的申请 - 扫描算法(SCAN):也叫电梯算法,**双向** 扫描的过程,扫描 **从最外到最内**,**从最内到最外** 的所有请求。往返移动 - 循环扫描(CSCAN)算法:**单向**,固定由外向内或由内向外扫描 ### 改变移动臂方向的算法 - 先来先服务(FCFS) - 最短寻道时间优先(SSTF) ### 先来先服务(FCFS) [](https://www.malaoshi.top/upload/0/0/1GWtAJL8qnk.jpeg) 如上图,当前在 `100号磁道`,发来 `9个请求`,由于是 **先来先服务**,所以: 先处理 `1号请求`,移动到 `55号磁道` 再处理 `2号请求`,移动到 `58号磁道` 以此类推。。。。 ### 最短寻道时间优先(SSTF) [](https://www.malaoshi.top/upload/0/0/1GWtAQdqSq6.jpeg) **提示:**上图的序号,不是请求顺序,而是 **处理顺序** 如上图,当前在 `100号磁道`,发来 `9个请求`,由于是 **最短寻道时间优先**,所以: 先处理 `1号请求`,移动到 `90号磁道`,因为距离 `100号磁道` 最近 再处理 `2号请求`,移动到 `58号磁道`,因为距离 `90号磁道` 最近 以此类推。。。。 # 题 假设某磁盘的每个磁道划分成 `11个物理块`,每块存放 `1个逻辑记录`。逻辑记录 `R0,R1,...,R9,R10` 存放在同一个磁道上,记录的存放顺序如下表所示: [](https://www.malaoshi.top/upload/0/0/1GWtAV91u7N.png) 如果磁盘的旋转周期为 `33ms`,磁头当前处在 `R0` 的开始处。若系统使用单缓冲区顺序处理这些记录,每个记录处理时间为`3ms`,则处理这 `11个记录` 的最长时间为( );若对信息存储进行优化分布后:处理 `11个记录` 的最少时间为( ) A、33ms B、336ms C、366ms D、376ms A、33ms B、66ms C、86ms D、376ms ## 分析第一个问题 - 磁盘的旋转周期为 `33ms`,共有 `11个物理块`,说明移动到下 `1个物理块` 需要 `3ms` - **单缓冲区** 顺序处理,说明 **处理** 时,**不能读取数据**,否则会 **覆盖缓冲区** - 处理缓冲区数据的同时,磁盘也会旋转。由于处理缓冲区数据的时间是 `3ms`,说明处理完 `1个块的数据`,**磁头会指向下一个块** #### 读取 R0 [](https://www.malaoshi.top/upload/0/0/1GWtEBdd3Sq.png) 读取 R0 用时 `3ms + 3ms = 6ms` #### 读取 R1 由上面可知,读取 R0 后,磁头指向 `R2开始处`,要想读取 R1,需要等待 `10ms` ,磁头指向 `R1 开始处` [](https://www.malaoshi.top/upload/0/0/1GWtEHe9gvs.png) 读取 R1 用时 `3ms + 3ms = 6ms` 最终用时:`30ms + 6ms = 36ms` #### 读取 R2 与读取 R1相同,需要等待 `10ms`,磁头指向 `R2开始处` 读取 R2 用时 `3ms + 3ms = 6ms` 最终用时:`30ms + 6ms = 36ms` #### 总结:读取 R1 ... R10 ``` 36ms * 10 = 360ms ``` #### 读取 R1 ... R10 ``总共用时 ``` 6ms + 360ms = 366ms ``` #### 第一问答案 C ## 分析第二问 优化结果如下图: [](https://www.malaoshi.top/upload/0/0/1GWtEbDNdF6.png) 假设当前磁头指向 `R0`,通过上面分析可知: 1. 用时 `3ms` 读取 `R0` 数据后,磁头指向下一个块 `R6` 2. 用时 `3ms` 处理缓冲区数据,同时,磁盘也会同时旋转,由于磁盘旋转到下一个块的时间是 `3ms`,所以处理 `1个块的数据` 后,磁头正好移动指向下一个块 `R1` 3. 然后可以直接继续读取 `R1`,与上面 步骤1、步骤2相同,不需要等待时间 所以总耗时:`(3ms + 3ms) * 11 = 66` #### 第二问答案 B 参考: https://blog.csdn.net/qq_71654538/article/details/133624855 原文出处:http://malaoshi.top/show_1GWtEi1eHUo.html