码迷,mamicode.com
首页 > 编程语言 > 详细

磁盘调度算法简述

时间:2019-04-18 00:39:23      阅读:584      评论:0      收藏:0      [点我收藏+]

标签:调度   操作   对象   批处理   设置   line   优劣   分治   span   

 

一 丶意义:良好的调度算法,能减少IO读取时间(磁盘读取(最慢)+读取+传输)  磁盘访问时间=寻道时间+旋转延迟时间+数据传输时间,

                  磁盘读写顺序:由上直下(柱面磁道),由外到里(柱面排序,外磁道速度最快),依次访问对应扇区(512bytes)

                   计算机中,各存储区域访问速度为  寄存器约等号≈cache>内存>>磁盘>其他外接物理设备

                   系统每进行一次IO中断,进行数据读写,首先要进行命中测试,若不在register,cache,memory中,则进行磁盘读取,先寻址,再进行io读入内存,读入后才能被cpu使用。

                   由磁盘中读写数据占用时间公式可知,其最主要的是寻道时间,旋转延迟时间,良好的磁盘调度算法,能减少IO读写时间,从而减少进程等待io时间,增加cpu利用率,防止磁臂黏着现象的发生。

 

参考资料:https://blog.csdn.net/hguisu/article/details/7408047

 

二丶名词解释: 

1)磁臂粘着--------程序对某些磁道频繁访问,如多次访问同一磁道,则io队列中,多次对同一磁道进行频繁的读取,导致其他磁道的请求被搁置,即为磁臂黏着现象(类似于进程饿死)

2)寻道时间:移动磁臂到对应磁道(一般全部磁臂同时移动,部分可以分别移动),最慢

3)旋转延迟时间:磁盘旋转到对应扇区,对应磁柱进行读写

4)数据传输时间:读取数据,使用IO总线传入内存供cpu使用

 

 

三丶算法简述

1.先来先服务算法(FCFS)----FirstComeFirstServer

   可使用链表(若有数量上限则单设头结点记录请求数,超出则拒绝)和数组(数组长度限制为请求数量,防止越界),依据请求时间先后,对io请求进行队列排列,依次出队

   优劣:公平、简单;平均寻道时间可能较长

 


2.最短寻道算法(SSTF)

  其访问规则为距离当前磁头最近的io请求进行服务,由“最近”一词和磁盘读写顺序可知,其可能会返回对一个柱面的磁道进行多次读写,造成磁盘黏着现象

  基本实现:动态处理IO请求,可使用链表(双向链表,避免越界和前置判空操作)或者数组(内存允许则最好用数组,减少寻址时间)实现,使用插入排序算法,对IO请求进行动态排序,

                    指针p指向磁头的当前磁道和扇区对应的线形距离数字,对前置后驱元素进行判定,以距离较短者作为下次磁盘访问对象。

  优劣:平均寻道时间比FCFS算法短,但可能会出现“饥饿现象”和“磁臂粘着”现象。

 


3.扫描算法(电梯算法SCAN)

  原理:将各磁道请求映射为线形地址,进行单向线形扫描,一方为空,则反向,直至该磁道请求为空,切换下一磁道

  算法实现:外嵌for对各柱面请求进行扫描,内嵌while包含俩个for循环,对选择的柱面进行来回扫描(一个增,一个减,双向),请求空则break。

  优劣:消除了“饥饿”现象,但可能会出现“磁臂粘着”现象

 


4.循环扫描算法(CSCAN)

  原理:改进SCAN,不改变方向,单方向扫描,若无则返回到最外层需要访问的磁道(没就0)

  算法实现:参考SCAN,while去除内置为单个for,设为单向

  优劣: 改进了对于边缘区磁道访问的不公平,但可能会出现“磁臂粘着”现象。

 

 

5.NStepScan

  原理:为避免磁臂黏着现象发生,算法将磁盘请求队列分成若干个长度为N的子队列,磁盘调度按FCFS算法依次处理这些子队列。而每处理一个子队列时又是按照SCAN算法。

             当处理某子队列时,又有新的磁盘I/O请求,便将新请求进程放入其他队列中,从而避免了粘臂现象。(逻辑上依然为SCAN算法,但是限制了队列数量,强制跳出某一柱面,减少了频繁访问同一磁道带来的黏着现象)

   算法实现:依据原理,设置大小为N的指针数组(取余访问,实现循环),循环访问各个队列

 

6.FSCAN算法,

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

  实现:略

 

四丶其他策略

     缓冲区策略:缓解高速读写设备与低速io设备带来的长时间数据等待,设立多缓冲,双缓冲等策略进行处理。

                           https://product.pconline.com.cn/itbk/software/dnyw/1707/9613894.html

 

   算法处理策略:尽量减少IO中断次数,对可批量请求读写的数据进行批量请求,而不是一个个数据进行请求读写

(如在大数据排序处理中,使用分治策略,分批处理数据,在内存允许的情况下,直接读一批数据进行处理(多文件IO读入),处理后在缓冲区保存,满后才写入,减少中断次数)

      

 

磁盘调度算法简述

标签:调度   操作   对象   批处理   设置   line   优劣   分治   span   

原文地址:https://www.cnblogs.com/jing19960917/p/10727144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!