浅谈操作系统——磁盘调度算法

437 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情

我们都知道要提高磁盘的访问速度主要应从以下两方面入手:

  • 数据的合理组织
  • 磁盘的调度算法

那么接下来我们就来具体说一说磁盘调度算法

磁盘调度算法

当多个访盘请求在等待时,采用一定的策略,对这些请求的服务顺序调整安排,旨在降低平均磁盘服务时间,达到公平﹑高效

  • 公平:一个O请求在有限时间内满足
  • 高效:减少设备机械运动所带来的时间浪费

主要包括以下四种算法

  • 先来先服务FCFS
  • 最短寻道时间优先SSTF
  • 扫描算法SCAN
  • 单向扫描调度算法cSCAN

先来先服务算法

  • 按访问请求到达的先后次序服务
  • 优点:简单,公平;
  • 缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。

举个例子

假设磁盘访问序列:98 , 183 , 37 , 122, 14 , 124 , 65 , 67 读写磁头起始位置:53 安排磁头服务序列 计算磁头移动总距离(道数)

image.png 磁头走过的总道数:640

最短寻道时间优先算法

优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。

  • 优点:改善了磁盘平均服务时间;
  • 缺点:造成某些访问请求长期等待得不到服务

image.png 磁头走过的总道数:236

扫描算法(电梯算法)

具体做法: 当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,然后判断该方向上是否还有访问请求,如果有则继续扫描;否则改变移动方向,并为经过的访问请求服务,如此反复

image.png

image.png

磁头走过的总道数:208

电梯算法杜绝了饥饿,但当请求对磁道的分布是均匀时,磁头回头,近磁头端的请求很少(因为磁头刚经过),而远端请求较多,这些请求等待时间要长一些(已经经过很久,还要很久才能到达)。

单项扫描调度算法

总是从最里的欲访问柱面开始向外扫描。移动臂到达最外一个访问柱面后,立即带动读写磁头快速返回。返回时不为任何的等待访问者服务。返回后可再次进行扫描。 也称循环扫描算法。

image.png

调度算法的选择

  • 实际系统相当普遍采用最短寻道时间优先算法,因为它简单有效,性价比好;
  • 扫描算法更适于磁盘负担重的系统;
  • 磁盘负担很轻的系统也可以采用先来先服务算法
  • 一般要将磁盘调度算法作为操作系统的单独模块编写,利于修改和更换。

这四种算法在考试中经常出现,所以一定要熟练掌握,结合着图解,相信难题都迎刃而解了