关闭

磁盘调度算法剖析(FIFO、SSTF、SCAN、CSCAN、FSCAN)

标签: 磁盘调度算法操作系统FIFOSSTFSCAN
21427人阅读 评论(10) 收藏 举报
分类:

常见的磁盘调度算法有以下几种:

1.FIFO:先来先服务算法;

2.SSTF: 最短寻道时间算法;

3.SCAN:电梯调度算法;(这样命名很形象)

4.CSCAN: 循环扫描算法

5.FSCAN:分步电梯调度算法(分两个队列)


下面详细说一下各个算法的主要思想:

首先是FIFO算法,也就是先来先服务算法。这种算法的思想比较容易理解。假设当前磁道在某一位置,依次处理服务队列里的每一个磁道,这样做的优点是处理起来比较简单,但缺点是磁头移动的距离和平均移动距离会很大。

其次,是SSTF,最短寻道时间算法。这种算法的本质是利用贪心算法来实现,假设当前磁道在某一位置,接下来处理的是距离当前磁道最近的磁道号,处理完成之后再处理离这个磁道号最近的磁道号,直到所有的磁道号都服务完了程序结束。这样做的优点是性能会优于FIFO算法,但是会产生距离当前磁道较远的磁道号长期得不到服务,也就是“饥饿”现象,因为要求访问的服务的序列号是动态产生的,即各个应用程序可能不断地提出访问不同的磁道号的请求。

接下来,是SCAN算法,也就是很形象的电梯调度算法。先按照一个方向(比如从外向内扫描),扫描的过程中依次访问要求服务的序列。当扫描到最里层的一个服务序列时反向扫描,这里要注意,假设最里层为0号磁道,最里面的一个要求服务的序列是5号,访问完5号之后,就反向了,不需要再往里扫。结合电梯过程更好理解,在电梯往下接人的时候,明知道最下面一层是没有人的,它是不会再往下走的。

然后是,CSCAN算法,循环扫描算法,来看一下上一种算法,有什么问题。仔细一看,我们会发现,在扫描到最里面的要求服务的序列时,接着会反向,在接下来的很大一部分时间里,应该是没有要求服务的磁道号的,因为之前已经访问过了。什么意思,就是说从初始磁道号到最里层的一个磁道号之间的所有序列都已经访问过了,所以SCAN会增加等待的时间。为了解决这样的情况,CSCAN算法的思想是,访问完最里面一个要求服务的序列之后,从最外层的序号开始往里走。也就是始终保持一个方向。就像梳头发,从上往下梳,到了最下面之后,再一次的从上往下梳,这个顺序是不会变的。没有人会从下往上梳头发吧。。

最后,是FSCAN算法,也就是分步电梯调度算法。算法思想是,在扫描的过程中所有新产生的序列放在另外的一个队列中,当访问完当前队列之后,再访问新产生的一个队列。这种算法可以有效防止磁壁粘着现象。


下面结合一个例子来看一下,服务的顺序和计算磁头移动的总距离。

假设当前磁头在67号,要求访问的磁道号顺序为98,25,63,97,56,51,55,55,6  (电脑随机产生的,设定最外层磁道号为100号)

FIFO算法的服务序列是:98,25,63,97,56,51,55,55,6

磁头移动的总距离distance = (98-67)+(98-25)+(63-25)+(97-63)+(97-56)+(56-51)+(55-51)+(55-55)+(55-6)

SSTF算法的服务序列是: 63,56,55,55,51,25,6,97,98

磁头移动的总距离distance = (67-63)+(63-56)+(56-55)+(55-55)+(55-51)+(51-25)+(25-6)+(97-6)+(98-97)

SCAN算法的服务序列是:63,56,55,55,51,25,6,97,98

磁头移动的总距离distance = (67-63)+(63-56)+(56-55)+(55-55)+(55-51)+(51-25)+(25-6)+(97-6)+(98-97)

我发现这里例子举的不好,SSTF和SCAN算法的服务序列竟是一样的,尴尬!

CSCAN算法的服务序列是:63,56,55,55,51,25,6,98,97

磁头移动的总距离distance = (67-63)+(63-56)+(56-55)+(55-55)+(55-51)+(51-25)+(25-6)+(100-98)+(98-97)





7
0
查看评论

浅谈 磁盘调度算法

磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的磁盘调度算法有以下四种: 先来先服务算法(FCFS), 最短寻道时间优先算法(SSTF), 扫...
  • kennyrose
  • kennyrose
  • 2012-05-03 19:42
  • 22247

磁盘调度算法(FIFO、SSTF、SCAN、CSCAN)(已经更新bug)

自己闲的蛋疼,把磁盘调度算法用C跟C++模拟了一下,不知道有没有bug,欢迎提出建议~ #include #include #include #include using namespace std; const int maxn = 100; int n, now, s, sum, nnow...
  • a995549572
  • a995549572
  • 2016-01-03 12:27
  • 1746

磁盘调度算法寻道问题

常用的磁盘调度算法有四种: 先来先服务算法(FCFS) 最短寻道时间优先算法(SSTF) 扫描算法(SCAN) 循环扫描算法(CSCAN) 先来先服务算法(First Come First Service)FCFS算法根据进程请求访问磁盘的先后顺序进行调度,是一种最简单的调度算法。 例1:某一磁盘...
  • atnanyang
  • atnanyang
  • 2016-09-26 15:59
  • 2789

磁盘调度算法(FCFS&&SSTF)

操作系统磁盘调度算法之FCFS和SSTF篇,我感觉自己写的好垃圾啊!!!#include <iostream> #include <cstdlib> using namespace std; void FCFS(int a[],int n) { int sum = 0...
  • Fitz1318
  • Fitz1318
  • 2016-12-12 22:08
  • 1883

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

【操作系统 - 6】磁盘调度算法 --- 学习至此,发现很多学了但很久没用的知识,久而久之,慢慢遗忘。等哪天还需要的话,却发现已经忘得差不多了,即使整理了文档(word等),还是得从头再学一遍。读研第一学期,发现很多东西都可以从博客上学习到,也有不少博主呕心沥血整理了挺多有用的博文。于是,本人借此契...
  • Houchaoqun_XMU
  • Houchaoqun_XMU
  • 2017-03-21 01:14
  • 1585

几种磁盘调度算法的讲解

一、磁盘调度主要思想 设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。常用的分配策略有先请求先分配、优先级高者先分配等策略。在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。操作系统中,对磁盘的访问要求来自多方面,常常需要排队。这时,对众多的访问要求按一定的次序响应,会直...
  • best_fiends_zxh
  • best_fiends_zxh
  • 2016-12-07 20:31
  • 2142

磁盘调度算法 C++实现

常见的磁盘调度算法大致分为以下5类: FCFS、SSTF、SCAN、CSCAN、FSCAN 程序实现了上述5类调度算法。 其中,当前磁道和要求服务的磁道均由系统随机产生。 程序入口是main主函数,在程序一开始由request()函数产生随机的要求服务的磁盘序列。然后由用户选择算法FCF...
  • Jaster_wisdom
  • Jaster_wisdom
  • 2016-09-08 10:40
  • 6456

磁盘调度算法

磁盘调度算法
  • Alpaca12
  • Alpaca12
  • 2016-05-24 15:12
  • 2963

操作系统中磁盘调度算法(FIFO,SSTF,SCAN,C-SCAN)

磁盘调度算法的数据比较                                      ...
  • woshiwanghao_hi
  • woshiwanghao_hi
  • 2013-10-24 20:47
  • 8206

磁盘调度算法的实现与对比

  • 2015-06-18 20:03
  • 56KB
  • 下载
    个人资料
    • 访问:223661次
    • 积分:4300
    • 等级:
    • 排名:第8401名
    • 原创:220篇
    • 转载:18篇
    • 译文:0篇
    • 评论:77条
    最新评论