【操作系统】磁盘调度算法

本文介绍了磁盘调度算法,包括先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描(SCAN)、循环扫描(C-SCAN)、LOOK和C-LOOK算法。讨论了它们的工作原理、性能特点以及可能存在的饥饿问题,并通过实例展示了不同算法的磁头移动路径和效率。

在这里插入图片描述

一、先来先服务算法

先来先服务(First-ComeFirst-ServedFCFS),顾名思义,先到来的请求,先被服务。

那按照这个序列的话:

98,183,37,122,14,124,65,67

那么,磁盘的写⼊顺序是从左到右,如下图:

在这里插入图片描述

先来先服务算法总共移动了 640 个磁道的距离,这么⼀看这种算法,⽐较简单粗暴,但是如果⼤量进程竞争使⽤磁盘,请求访问的磁道可能会很分散,那先来先服务算法在性能上就会显得很差,因为寻道时间过⻓。

二、最短寻道时间优先算法

最短寻道时间优先(Shortest Seek FirstSSF)算法的⼯作⽅式是,优先选择从当前磁头位置所需寻道时间最短的请求,还是以这个序列为例⼦:

98,183,37,122,14,124,65,67

那么,那么根据距离磁头( 53 位置)最近的请求的算法,具体的请求则会是下列从左到右的顺序:

65,67,37,14,98,122,124,183

在这里插入图片描述

磁头移动的总距离是 236 磁道,相⽐先来先服务性能提⾼了不少。

但这个算法可能存在某些请求的饥饿,因为本次例⼦我们是静态的序列,看不出问题,假设是⼀个动态的

请求,如果后续来的请求都是⼩于 183 磁道的,那么 183 磁道可能永远不会被响应,于是就产⽣了饥饿现象,这⾥产⽣饥饿的原因是磁头在⼀⼩块区域来回移动

三、扫描算法

最短寻道时间优先算法会产⽣饥饿的原因在于:磁头有可能再⼀个⼩区域内来回得移动。

为了防⽌这个问题,可以规定:磁头在⼀个⽅向上移动,访问所有未完成的请求,直到磁头到达该⽅向上的最后的磁道,才调换⽅向,这就是扫描(Scan)算法

这种算法也叫做电梯算法,⽐如电梯保持按⼀个⽅向移动,直到在那个⽅向上没有请求为⽌,然后改变⽅向。

还是以这个序列为例⼦,磁头的初始位置是 53:

98,183,37,122,14,124,65,67

那么,假设扫描调度算先朝磁道号减少的⽅向移动,具体请求则会是下列从左到右的顺序:

37,14, 0 ,65,67,98,122,124,183

在这里插入图片描述

磁头先响应左边的请求,直到到达最左端( 0 磁道)后,才开始反向移动,响应右边的请求。

扫描调度算法性能较好,不会产⽣饥饿现象,但是存在这样的问题,中间部分的磁道会⽐较占便宜,中间部分相⽐其他部分响应的频率会⽐较多,也就是说每个磁道的响应频率存在差异。

1、循环扫描算法

扫描算法使得每个磁道响应的频率存在差异,那么要优化这个问题的话,可以总是按相同的⽅向进⾏扫描,使得每个磁道的响应频率基本⼀致。

循环扫描(Circular Scan, C-SCAN )规定:只有磁头朝某个特定⽅向移动时,才处理磁道访问请求,⽽返 回时直接快速移动⾄最靠边缘的磁道,也就是复位磁头,这个过程是很快的,并且返回中途不处理任何请求,该算法的特点,就是磁道只响应⼀个⽅向上的请求

是以这个序列为例⼦,磁头的初始位置是 53:

98,183,37,122,14,124,65,67

那么,假设循环扫描调度算先朝磁道增加的⽅向移动,具体请求会是下列从左到右的顺序:

65,67,98,122,124,183, 199 , 0 ,14,37

在这里插入图片描述

磁头先响应了右边的请求,直到碰到了最右端的磁道 199,就⽴即回到磁盘的开始处(磁道 0),但这个返回的途中是不响应任何请求的,直到到达最开始的磁道后,才继续顺序响应右边的请求。

循环扫描算法相⽐于扫描算法,对于各个位置磁道响应频率相对⽐较平均。

2、LOOK与 C-LOOK算法

前⾯说到的扫描算法和循环扫描算法,都是磁头移动到磁盘「最始端或最末端」才开始调换⽅向。

那这其实是可以优化的,优化的思路就是磁头在移动到「最远的请求」位置,然后⽴即反向移动。

那针对 SCAN 算法的优化则叫 LOOK 算法,它的⼯作⽅式,磁头在每个⽅向上仅仅移动到最远的请求位置,然后⽴即反向移动,⽽不需要移动到磁盘的最始端或最末端,反向移动的途中会响应请求

在这里插入图片描述

⽽针 C-SCAN 算法的优化则叫 C-LOOK,它的⼯作⽅式,磁头在每个⽅向上仅仅移动到最远的请求位置,然后⽴即反向移动,⽽不需要移动到磁盘的最始端或最末端,反向移动的途中不会响应请求

在这里插入图片描述

整理自小林coding所著的《图解系统》,仅做学习用,侵删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值