磁盘调度算法

原创 2015年07月09日 21:28:46

磁盘优点

  1. 容量很大
  2. 每位的价格非常低
  3. 当关掉电源后存储信息不丢失

物理特性

   磁盘表面覆盖着磁性物质,信息记录在磁表面上。固定头磁盘的每个磁道单独有一个磁头,这样就能使得计算机可以很快地从一个磁道转换到另一个磁道。但是这需要大量的头,设备成本很高。更通用的方式是每个盘面只有一个头,让它从一道移向另一道。这种动头设备需要硬件设备移动头。
   磁盘一般用于文件存储,设计原则是:成本低、容量大、速度高。扩大存储容量:a.增加每英寸磁道数目; b. 双面记录。
   存取盘块中的信息一般要有三部分时间:系统首先要把磁头移到相应的道上或柱面上,这个时间叫做寻道时间;一旦磁头到达指定磁道,必须等待所需要的扇区转到读/写头下,这个延迟时间叫做旋转延迟时间;最后,信息实际在磁盘和内存之间进行传送也要花费时间,这部分时间叫做传送时间。一次磁盘服务的总时间就是这三者之和。
   要使磁盘服务尽可能地快,操作系统要提供合适的调度算法,改善磁盘服务的平均时间。
   进程需要和磁盘交换信息时必须要操作系统发出系统调用,对磁盘的请求一般要有下述几部分内容:
  1. 输入和输出;
  2. 磁盘地址(驱动器、柱面、面号、扇区);
  3. 内存地址;
  4. 传送长度。

磁盘调度算法

1、先来先服务调度(FCFS)

   FCFS 算法是优先为最先到达的请求服务。例如,有如下请求磁盘服务队列,要访问的磁道数分别是:
     98,183,37,122,14,124,65,67
   排在前面的是先到达的请求,假设磁头目前停留在53磁道上,按照先来先服务的算法,接下来磁头的移动顺序依次是:
  53—>98—>183—>37—>122—>14—>124—>65—>67
这个过程总共移动了(98-53)+(183-98)+(183-37)+(122-37)+(122-14)+(124-14)+(124-65)+(67-65)=640个磁道
   这种调度法产生的磁头移动服务太大,磁头频繁的大幅度移动,容易产生机械振动和误差,对使用寿命有损害。所以,要设计好的算法来减少磁头移动幅度,减少服务时间,改善磁盘的吞吐量。

2、最短寻道时间优先法(SSTF)

  优先服务接近于磁头当前位置的请求。SSTF从本质上将是SJF(最短作业优先算法)调度的形式。使用SSTF调度算法,上面那个请求队列的执行顺序是:
  53—>65—>67—>37—>14—>98—>122—>124—>183
总共移动了236个磁道,比FCFS的三分之一多一点,明显改善了磁盘服务。
  但是这种算法并不是最优的。例如,若把磁头从53道移动到37道(尽管不是靠的最近的),然后移动到14,接下去是65,67,98,122,124,183,总共移动了208个磁道<236。
  SSTF也可能导致某些请求长期得不到服务(即“饥饿”问题)。如果当前磁头附近总会不断的到来新的请求,那么距离磁头远的请求将会一直等待下去。

3、扫描法(SCAN)

  由于请求服务的队列具有动态性质,总会有新的请求到达 ,因此可采用扫描算法。读/写磁头从磁盘的一端出发,向另一端移动,遇到所需的磁道时就进行服务,直至到达磁盘的另一端。在另一端上,磁头移动方向反过来,继续做下面的服务。这样磁头就连续从盘的一端扫到另一端。
  根据前面的例子,但要知道磁头移动的方向和它最近的位置。如果磁头向0道方向移动,则先为37道和14道服务。到达0道,磁头移动方向反过来,并移向磁盘的另一端,接下来服务序列分别是65,67,98,122,124,183。
  在具体实现算法时,没有必要让磁头总是从磁盘的一端移到另一端。更通常的做法是:磁头仅移到每个方向上最远的请求磁道上,一旦在当前方向上没有进一步的服务请求了,磁头的移动方向就会反过来,继续为下面的请求服务。这种算法也称为“电梯算法”。例如上面的例子,磁头服务了37,14后发现前面没有新的请求了,就不会向前继续移动到0道,立即掉头服务65道……
  这种算法会产生的问题是:假定对磁道的请求是均匀分布的,当磁头到达一方最远端并反过方向时,立即落在磁盘后面的请求相对而言很少,因为这些磁道刚刚得到过服务,而在盘的另一端却有较多的请求,其等待的时间也最长。

4、巡回扫描法(C-SCAN)

   C-SCAN是SCAN的变种,可使得等待的时间变的均匀。与SCAN的区别是,它移动到一端,方向放过来,但是在返回的过程中不进行服务,就是直接从一端切换到另一段,然后再按照刚才的方向移动,遇到请求的磁道就服务。例如上面的例子,先向0道移动,53–>37–>14,然后反方向,换到另一端,183–>124–>122–>98–>67–>65。

磁盘调度算法的选择

   任何调度算法的性能都紧紧的依赖于I/O请求的数量和类型,对于磁盘负荷很重的系统来说选择电梯算法和C-SCAN算法更为合适。在极个别情况下,若队列中很少有对于一个未完成的请求,那么所有算法实际上都是等效的。研究表明,通常情况下队列中仅有一个请求。这时,FCFS也是很合适的算法。
  磁盘服务的请求受文件分配方式的影响很大。读连续文件的程度将产生大量的在盘上挤在一起的请求,磁头的移动有限。而对于串连或索引文件来说,可能涉及在盘上广泛分配的盘块,要靠减少磁头移动来获取较好的磁盘使用效率。
  目录和索引块的位置对I/O请求的队列有很重要的影响。如果文件的数据和它的目录项在盘上的位置相距很远,则磁头移动距离很长。如果把目录和索引块放在缓存中,则可明显减少磁头的移动,尤其对读请求更是如此
  以上仅考虑寻道距离对调度算法的影响。但对于现代磁盘,旋转延迟几乎接近平均寻道时间。然而操作系统很难通过调度来改善旋转延迟时间,因为逻辑块的物理位置对外并未公布。当然,磁盘制造商通过在控制器硬件中实现调度算法可以缓减这个问题。

[以上整理自《操作系统教程—Linux实例分析》 孟庆昌]

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

常见的磁盘调度算法有以下几种: 1.FIFO:先来先服务算法; 2.SSTF: 最短寻道时间算法; 3.SCAN:电梯调度算法;(这样命名很形象) 4.CSCAN: 循环扫描算法 5.F...

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

操作系统磁盘调度算法之FCFS和SSTF篇,我感觉自己写的好垃圾啊!!!#include #include using namespace std; void FCFS(int a[],int n...

浅谈 磁盘调度算法

磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

磁盘调度算法

磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的...

磁盘调度算法 C++实现

常见的磁盘调度算法大致分为以下5类: FCFS、SSTF、SCAN、CSCAN、FSCAN 程序实现了上述5类调度算法。 其中,当前磁道和要求服务的磁道均由系统随机产生。 程序入口是mai...

磁盘调度算法-java实现

磁盘调度在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列,常用的...

磁盘调度算法,内存调度,内存分配策略

磁盘是可供多个进程共享的设备,当有多个进程都要求访问磁盘时,应采用一种最佳调度算法,以使各进程对磁盘的平均访问时间最小。由于在访问磁盘的时间中,主要是寻道时间。因此: 磁盘调度算法的目标是使磁盘的平...

几种磁盘调度算法的讲解

一、磁盘调度主要思想 设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。常用的分配策略有先请求先分配、优先级高者先分配等策略。在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:磁盘调度算法
举报原因:
原因补充:

(最多只允许输入30个字)