磁盘调度算法

合集下载

磁盘调度算法的模拟实现及对比

磁盘调度算法的模拟实现及对比

磁盘调度算法的模拟实现及对比磁盘调度算法是操作系统中的一个重要组成部分,用于优化磁盘读写操作的效率,提高系统的响应速度和运行效率。

常见的磁盘调度算法包括先来先服务(FCFS)算法、最短寻道时间优先(SSTF)算法、电梯(Elevator)算法等。

在进行磁盘调度算法的比较和模拟之前,我们首先需要了解磁盘读写操作的基本原理。

磁盘是由许多磁道和扇区组成的,当操作系统需要对磁盘进行读写操作时,读写头需要按照特定的路径移动到目标扇区,这个过程称为寻道。

而磁头在寻道的过程中所花费的时间称为寻道时间。

不同的磁盘调度算法的主要目标就是使得寻道时间尽可能地短,从而提高磁盘的读写操作效率。

首先,我们来实现一个先来先服务(FCFS)算法的模拟。

FCFS算法是最简单的磁盘调度算法,它按照磁盘请求的先后顺序进行处理。

具体实现如下:```pythondef fcfs(disk_queue, start):head_movement = 0curr_pos = startfor request in disk_queue:head_movement += abs(request - curr_pos)curr_pos = requestreturn head_movement```上述代码中,`disk_queue`表示磁盘请求队列,`start`表示起始磁道号。

算法首先将磁头移动到起始磁道号`start`,然后按照磁盘请求的先后顺序对队列中的请求进行处理,计算磁头的移动距离。

最后返回磁头的总移动距离。

接下来,我们实现一个最短寻道时间优先(SSTF)算法的模拟。

SSTF 算法会选择离当前磁道最近的请求进行处理,从而减少磁头的寻道时间。

具体实现如下:```pythondef sstf(disk_queue, start):head_movement = 0curr_pos = startwhile disk_queue:min_distance = float('inf')min_index = -1for i, request in enumerate(disk_queue):distance = abs(request - curr_pos)if distance < min_distance:min_distance = distancemin_index = ihead_movement += min_distancecurr_pos = disk_queue.pop(min_index)return head_movement```上述代码中,算法首先将磁头移动到起始磁道号`start`,然后不断选择离当前磁道最近的请求处理,直到所有请求处理完毕。

磁盘调度算法

磁盘调度算法

实验六磁盘调度算法【实验目的】通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的实现方法。

【实验内容】问题描述:设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN 和循环SCAN算法的工作过程。

假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。

程序要求:1)利用先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法模拟磁道访问过程。

2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。

3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。

4)输出:每种算法的平均寻道长度。

实现提示:用C++语言实现提示:1)程序中变量定义参考(根据需要可添加)如下:const int MaxNumber=100;int TrackOrder[MaxNumber];int MoveDistance[MaxNumber];double AverageDistance;bool direction;2)页面置换的实现过程如下:变量初始化;接收用户输入磁道个数n和磁盘访问序列,选择算法1-FCFS,2-SSTF,3-SCAN,4-循环SCAN,输入开始磁盘号m和磁头移动方向;根据用户选择的算法进行磁道访问,输出磁盘调度算法的模拟过程;计算选择每次移动的磁头移动距离和算法的平均寻道长度;输出选择算法的平均寻道长度。

实验要求:1)上机前认真复习磁盘调度算法,熟悉FCFS、SSTF、SCAN 和循环SCAN算法的过程;2)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图、发现的问题以及解决方法)。

磁盘调度算法系统设计

磁盘调度算法系统设计

磁盘调度算法系统设计磁盘调度算法是操作系统中的一个重要组成部分,它负责决定磁盘上的数据读取和写入的顺序,以提高磁盘的读写效率。

在设计一个磁盘调度算法系统时,需要考虑多个因素,包括磁盘的物理结构、磁盘访问请求的特点以及性能需求等。

一、磁盘的物理结构磁盘由多个磁道和扇区组成,每个磁道上有多个扇区,扇区是磁盘上最小的读写单位。

在磁盘调度算法系统设计中,需要了解磁盘的物理结构,以便根据磁盘的特点来选择合适的调度算法。

例如,对于磁盘的顺序访问速度较快,而随机访问速度较慢,因此在设计调度算法时需要考虑如何减少随机访问的次数,提高磁盘的读写效率。

二、磁盘访问请求的特点磁盘访问请求通常包括读请求和写请求,读请求是指从磁盘中读取数据,写请求是指向磁盘中写入数据。

在设计调度算法时,需要考虑磁盘访问请求的特点,以便根据不同的请求类型采取不同的调度策略。

例如,对于读请求,可以采取先来先服务(FCFS)的调度算法,即按照请求的到达顺序进行调度;对于写请求,可以采取最短寻道时间优先(SSTF)的调度算法,即选择距离当前磁头位置最近的请求进行调度。

三、性能需求磁盘调度算法的设计还需要考虑性能需求,包括响应时间、吞吐量和磁盘利用率等方面。

响应时间是指从请求发出到完成的时间,吞吐量是指单位时间内完成的请求数量,磁盘利用率是指磁盘的有效工作时间占总时间的比例。

在设计调度算法时,需要权衡这些性能指标,选择合适的调度策略。

例如,对于要求响应时间较短的任务,可以采用最短寻道时间优先(SSTF)的调度算法;对于要求吞吐量较高的任务,可以采用电梯调度(SCAN)算法,以提高磁盘的读写效率。

四、调度算法的选择在设计磁盘调度算法系统时,需要根据具体的应用场景选择合适的调度算法。

常见的磁盘调度算法包括先来先服务(FCFS)、最短寻道时间优先(SSTF)、电梯调度(SCAN)和循环扫描(C-SCAN)等。

不同的算法适用于不同的场景,例如,FCFS适用于请求到达时间间隔较长的场景,SSTF适用于请求到达时间间隔较短的场景,SCAN适用于读写请求较为均衡的场景,C-SCAN适用于读写请求较为不均衡的场景。

浅谈磁盘调度算法PPT课件

浅谈磁盘调度算法PPT课件
法概述

5.LOOK调度&C-LOOK调度

与SCAN和C-SCAN相似,但是磁头只移动到一个方向上最远的请 求为止,接着,它马上回头,而不是继续到磁盘的尽头。因为它们在 朝一个方向移动会看(look)是否有请求,故以此命名。
2020/2/16
7
三 例题展示
先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求
都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。
此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,
此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各
进程得到服务的响应时间的变化幅度较小。
2020/2/16
对于任何调度算法,其性能主要依赖于请求的数量和类型。
2020/2/16
10
谢谢观看!
2020/2/16
11
2020/2/16
12
2020/2/16
13
3
二 常用调度算法概述
2 .最短寻道时间优先算法(SSTF)

该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁
道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞
吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求
的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务
请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有
些请求的响应时间将不可预期。
2020/2/16
4
二 常用调度算法概述
3、扫描算法(SCAN)电梯调度
磁臂从磁盘的一端向另一端移动,同时当磁头移过每个柱面时, 处理位于该柱面上的服务请求。当到达另一端时,磁头改变移动方向, 处理继续,磁头在磁盘上来回扫描。由于这种算法中磁头移动的规律 颇似电梯的运行,故又称为电梯调度算法。此算法基本上克服了最短 寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺 点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时 间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于 中间磁道。

磁盘调度算法-电脑资料.

磁盘调度算法-电脑资料.

磁盘调度算法 -电脑资料2019-01-01磁盘优点容量很大每位的价格非常低当关掉电源后存储信息不丢失物理特性磁盘表面覆盖着磁性物质,信息记录在磁表面上,。

固定头磁盘的每个磁道单独有一个磁头,这样就能使得计算机可以很快地从一个磁道转换到另一个磁道。

但是这需要大量的头,设备成本很高。

更通用的方式是每个盘面只有一个头,让它从一道移向另一道。

这种动头设备需要硬件设备移动头。

磁盘一般用于文件存储,设计原则是:成本低、容量大、速度高。

扩大存储容量: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个磁道这种调度法产生的磁头移动服务太大,磁头频繁的大幅度移动,容易产生机械振动和误差,对使用寿命有损害。

磁盘调度算法

磁盘调度算法

磁盘调度算法As a person, we must have independent thoughts and personality.操作系统实验报告哈尔滨工程大学计算机科学与技术学院一、实验概述1. 实验名称磁盘调度算法2.实验目的(1)通过学习EOS实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机。

(2)观察EOS实现的FCFS、SSTF和 SCAN磁盘调度算法,了解常用的磁盘调度算法。

(3)编写CSCAN和N-Step-SCAN磁盘调度算法,加深对各种扫描算法的理解。

3. 实验类型验证,设计4. 实验内容(1)准备实验(2)验证先来先服务(FCFS)磁盘调度算法(3)验证最短寻道时间优先(SSTF)磁盘调度算法(4)验证SSTF算法造成的线程“饥饿”现象()验证扫描(SCAN)磁盘调度算法()验证SCAN 算法能够解决“饥饿”现象(6)改写SCAN调度算法二、实验环境EOS操作系统与IDE环境组成的“操作系统集成实验环境OS Lab”。

三、实验过程(一)实验问题及解答1.实验指导验证先来先服务(FCFS)磁盘调度算法,要求请给出在“输出”窗口中的结果。

答:输出结果复制如下:制作软盘镜像...正在启动 Virtual PC...开始调试...****** Disk schedule start working ******Start Cylinder: 10TID: 31 Cylinder: 8 Offset: 2 -TID: 32 Cylinder: 21 Offset: 13 +TID: 33 Cylinder: 9 Offset: 12 -TID: 34 Cylinder: 78 Offset: 69 +TID: 35 Cylinder: 0 Offset: 78 -TID: 36 Cylinder: 41 Offset: 41 +TID: 37 Cylinder: 10 Offset: 31 -TID: 39 Cylinder: 12 Offset: 55 -TID: 40 Cylinder: 10 Offset: 2 -Total offset: 360 Transfer times: 10 Average offset: 362.实验指导验证验证最短寻道时间优先(SSTF)磁盘调度算法,要求请给出在“输出”窗口中的结果。

操作系统有哪些主要调度算法

操作系统有哪些主要调度算法操作系统调度算法一、磁盘调度1.先来先服务fcfs:是按请求访问者的先后次序启动磁盘驱动器,而不考虑它们要访问的物理位置2.最短一般说来时间优先sstf:使距当前磁道最近的命令访问者启动磁盘驱动器,即是使查找时间最短的那个作业先继续执行,而不考量命令访问者到来的先后次序,这样就消除了先来先服务调度算法中磁臂移动过小的问题3.扫描算法scan或电梯调度算法:总是从磁臂当前位置开始,沿磁臂的移动方向去选择离当前磁臂最近的那个柱面的访问者。

如果沿磁臂的方向无请求访问时,就改变磁臂的移动方向。

在这种调度方法下磁臂的移动类似于电梯的调度,所以它也称为电梯调度算法。

4.循环读取算法cscan:循环读取调度算法就是在读取算法的基础上改良的。

磁臂改成单项移动,由外向里。

当前边线已经开始沿磁臂的移动方向回去挑选距当前磁臂最近的哪个柱面的访问者。

如果沿磁臂的方向并无命令出访时,再返回最外,出访柱面号最轻的作业命令。

操作系统调度算法二、进程调度算法1.先进先出算法fifo:按照进程步入准备就绪队列的先后次序去挑选。

即为每当步入进程调度,总是把准备就绪队列的队首进程资金投入运转。

2.时间片轮转算法rr:分时系统的一种调度算法。

轮转的基本思想是,将cpu的处理时间划分成一个个的时间片,就绪队列中的进程轮流运行一个时间片。

当时间片结束时,就强迫进程让出cpu,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。

3.最低优先级算法hpf:进程调度每次将处理机分配给具备最低优先级的准备就绪进程。

最低优先级算法可以与相同的cpu方式融合构成可以抢占市场式最低优先级算法和不容抢占市场式最低优先级算法。

4.多级队列反馈法:几种调度算法的结合形式多级队列方式。

操作系统调度算法三、常用的批处理作业调度算法1.先来先服务调度算法fcfs:就是按照各个作业进入系统的自然次序来调度作业。

操作系统中的磁盘调度

操作系统中的磁盘调度在计算机系统中,磁盘是一种存储设备,用于保存大量的数据和信息。

然而,由于磁盘的读写速度较慢,为了使系统更快地响应用户请求,操作系统必须对磁盘进行有效的调度和管理,以最大化磁盘的读写效率和响应速度。

磁盘调度是指操作系统通过算法和策略,对不同的磁盘访问请求进行排队和调度,以实现尽快地读取和写入数据。

在操作系统中,有多种磁盘调度算法可供选择,每种算法都有其优缺点,需要根据具体的应用场景和需求进行选择和配置。

常见的磁盘调度算法有以下几种:先来先服务(FCFS)调度算法先来先服务调度算法是最简单的磁盘调度算法,也是最容易实现的一种。

该算法按照磁盘访问请求的到达时间进行排队,先到达的请求先被处理。

然而,这种算法存在“早期请求被占用磁道”的问题,即如果较远的磁道请求先到达,则后续较近磁道的请求需要较长时间等待,影响了系统响应速度。

最短寻道时间优先(SSTF)调度算法最短寻道时间优先调度算法是一种基于当前磁头位置的决策算法。

该算法选择最短路径到达下一个磁道,然后依此处理下一个请求。

该算法通常比FCFS算法更快,因为它能够同时考虑到时间和空间的因素。

然而,该算法可能会导致较远的请求长时间等待,称为“饿死”。

电梯调度算法电梯调度算法是一种非常流行的磁盘调度算法,也是一种比较高效的算法。

该算法是基于电梯的上下运动来模拟磁盘寻道,当磁头从某一端开始找到另一端时,该算法按照一个方向对请求进行排序。

在电梯运行的方向上的请求优先处理,直到到达另一个方向的尽头,然后更改方向继续处理请求。

由于该算法考虑了请求的位置和时间,因此可以实现快速响应和高效利用磁盘。

最佳(SCAN)调度算法最佳调度算法是一种类似于电梯调度算法的算法,也是一种基于电梯寻道模型的算法。

该算法沿着磁盘表面进行扫描,按照磁头运动的方向对请求进行排序,并在到达尽头时更改方向。

该算法在大多数情况下比FCFS算法和SSTF算法更快,但也有可能因为某些操作导致请求长时间等待。

磁盘驱动调度算法

磁盘驱动调度算法磁盘驱动调度算法是操作系统中的一种重要机制,用于决定磁盘上的数据访问顺序,提高磁盘的读写效率。

在计算机系统中,磁盘是一种主要的存储介质,而磁盘驱动调度算法则是决定计算机系统如何合理地利用磁盘资源的关键。

磁盘驱动调度算法的目标是通过合理地安排磁盘上的数据访问顺序,最大限度地提高磁盘的读写效率。

在实际应用中,磁盘上的数据往往是分散存储的,即不同的文件、目录等数据被存储在不同的磁盘块中。

因此,当系统需要读取或写入某个文件时,需要将磁头移动到相应的磁道上,然后再进行数据的读取或写入操作。

而磁盘驱动调度算法的任务就是决定磁头的移动顺序,从而提高磁盘的访问效率。

常见的磁盘驱动调度算法有先来先服务(FCFS)、最短寻道时间优先(SSTF)、电梯调度算法(SCAN)、循环扫描算法(C-SCAN)等。

下面将逐一介绍这些算法的特点和应用场景。

1. 先来先服务(FCFS)算法:该算法按照磁盘请求的先后顺序进行调度,即先到达磁盘的请求先被服务。

这种算法简单直接,但由于没有考虑磁盘的物理结构和磁头的移动距离等因素,可能会导致磁盘的平均寻道时间较长。

2. 最短寻道时间优先(SSTF)算法:该算法会选择离当前磁道最近的请求进行服务,从而减少磁头的移动距离,提高磁盘的读写效率。

然而,这种算法可能会出现饥饿现象,即某些请求长时间得不到服务。

3. 电梯调度算法(SCAN):该算法模拟了电梯的运行过程,磁头按照一个方向移动,直到到达磁盘的边界,然后改变方向继续移动。

这种算法能够有效地减少磁头的移动次数,提高磁盘的读写效率。

但由于磁头只能按照一个方向移动,可能会导致某些请求长时间得不到服务。

4. 循环扫描算法(C-SCAN):该算法是电梯调度算法的一种改进,磁头按照一个方向移动,直到到达磁盘的边界,然后立即返回到起始位置,继续移动。

这种算法能够有效地减少磁头的移动距离,提高磁盘的读写效率。

不同的磁盘驱动调度算法适用于不同的应用场景。

第五章_磁盘移臂调度算法

( 0) ( 4) (24) ( 8) (8) (72) ( 4)
共移动120柱面
(0+4+24+8+8+72+4)*3=120*3=360 ms
(3)电梯调度算法: 由于未指明开始移动的方向,分成两种情形: OUT:
40 → 40 → 20 → 12 → 4 → 44 ) (40) (32) (4)
其中进程是按其发出 进程号 磁道号 移动距离(磁道数) 请求的先后顺序排列的。 4 19 81 9 376 357 采用的是FCFS调度策略。 23 205 171 完成这组I/O操作需移动 7 134 71 磁头的总距离为1604磁道。 34 18 116 22 56 38 优点: 公平、简单,且 14 192 136 每个进程的请求都能依次 3 396 204 32 29 367 得到处理,不会出现某进 17 3 26 程的请求长期得不到满足 12 19 16 29 40 21 的情况。 磁头移动的总距离=1604 (磁道) 缺点:与后面讲的几种 调度算法相比,其平均寻道距离较大。故此算法仅 适用于请求磁盘上的进程数较少的场合。
2 FSCAN算法 FSCAN算法实质上是N-Step-SCAN算法 的简化。它只将磁盘请求访问队列分成两个 子队列。 一是当前所有请求磁盘I/O的进程形成的 队列,由磁盘调度按SCAN算法进行处理。 另一个队列则是在扫描期间,新出现的 所有请求磁盘I/O进程的队列,把它们排入另 一个等待处理的请求队列。 这样,所有的新请求都将被推迟到下一 次扫描时处理。
一、先来先服务FCFS
(First-Come, First-Served)
这是一种最简单的磁盘调度算法。它根 据进程请求访问磁盘的先后次序进行调度。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

磁盘调度算法实验报告六-磁盘调度算法操作系统实验报告六--磁盘调度算法08网络工程实验目的通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的实现方法。

二、实验内容问题描述:设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的工作过程。

假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。

程序要求:1)利用先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法模拟磁道访问过程。

2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。

3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对-FCFS,2-SSTF,3-SCAN,4-循环SCAN和循环SCAN算法有效),算法选择1 SCAN。

4)输出:每种算法的平均寻道长度。

三、实验要求:1)上机前认真复习磁盘调度算法,熟悉FCFS、SSTF、SCAN和循环SCAN算法的过程;2)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告四、实验设计流程图实验报告六-磁盘调度算法输入要访问的磁道总数、要访问的每个磁道、当前所在磁道先来先服务最短寻道时间优扫描算法循环算法FCFS 先SSTF SCAN1(由CSCAN 内向外)、SCAN2(由外向内)结束五、用户使用说明实验报告六-磁盘调度算法先输入要访问的磁道数目、各个磁道的所在号数、当前所在的磁道。

然后选择用户所需的算法。

如果选1.先来先服务(FCFS)和2.最短寻道时间优先(SSTF)或者4.循环算法(CSCAN),那么会直接输出所得结果,如果选了3.扫描算法(SCAN) ,那还有选择磁盘的旋转方向,即向内或者向外,或者是要返回上一级菜单。

五、实验结果截图实验报告六-磁盘调度算法实验报告六-磁盘调度算法六、实验心得这个实验的算法其实最难的是那个磁盘的转动方向,一开始没想到要怎么做,后来问了别的同学,才有了思路。

还有就是算寻道总长度的时候一开始都是错的,后来才发现是想错了。

因为102-100跟100-102是完全相反的,求得的总长度也就很有问题。

后来就把这个算法写成了两个函数,虽然麻烦,但是保证百分百正确。

也算有所收获吧。

七、实验源代码#include<iostream>#include<cmath>using namespace std;void FCFS(int b[],int n,int init) //先来先服务{int i,s,sum;int a[20];for(i=0;i<n;i++)a[i]=b[i];s=init;sum=0;for(i=0;i<n;i++){cout<<"第"<<i+1<<"次访问的磁道:"<<a[i]<<endl; sum+=abs(s-a[i]);s=a[i];}实验报告六-磁盘调度算法cout<<"平均寻道长度:"<<sum*1.0/n<<endl;}void SSTF(int b[],int n,int k) //最短寻道法 { int i,j,s,sum=0,p;int a[20];for(i=0;i<n;i++)a[i]=b[i];for(i=n-1;i>=0;i--){s=a[0];p=0;for(j=0;j<=i;j++)if(abs(a[j]-k)<abs(s-k)){s=a[j];p=j;}a[p]=a[i];cout<<"第"<<n-i<<"次访问的磁道:"<<s<<endl; sum+=abs(s-k);k=s;}cout<<"平均寻道长度:"<<sum*1.0/n<<endl;}void SCAN1(int b[],int n,int k) //扫描算法 { int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i<n;i++)a[i]=b[i];for(i=n-1;i>=0;i--){biaoji=0;for(j=0;j<=i;j++)if(a[j]-k<0){biaoji=1;p=j;break;}实验报告六-磁盘调度算法if(biaoji==1){s=a[p];for(j=0;j<=i;j++)if(a[j]<k&&k-a[j]<k-s){s=a[j];p=j;}a[p]=a[i];cout<<"第"<<n-i<<"次访问的磁道:"<<s<<endl; sum+=k-s;k=s;}else{s=a[0];for(j=0;j<=i;j++)if(a[j]-k<=s-k){s=a[j];p=j;}a[p]=a[i];cout<<"第"<<n-i<<"次访问的磁道:"<<s<<endl; sum+=abs(k-s);k=s;}}cout<<"平均寻道长度:"<<sum*1.0/n<<endl;}void SCAN2(int b[],int n,int k) //循环算法{int i,j,s,sum=0,p,biaoji;int a[20];for(i=0;i<n;i++)a[i]=b[i];for(i=n-1;i>=0;i--){实验报告六-磁盘调度算法biaoji=0;for(j=0;j<=i;j++)if(a[j]-k>0){biaoji=1;p=j;break;}if(biaoji==1){s=a[p];for(j=0;j<=i;j++)if(a[j]>k&&a[j]-k<s-k){s=a[j];p=j;}a[p]=a[i];cout<<"第"<<n-i<<"次访问的磁道:"<<s<<endl; sum+=s-k;k=s;}else{s=a[0];for(j=0;j<=i;j++)if(k-a[j]<=k-s){s=a[j];p=j;}a[p]=a[i];cout<<"第"<<n-i<<"次访问的磁道:"<<s<<endl; sum+=abs(k-s);k=s;}}cout<<"平均寻道长度:"<<sum*1.0/n<<endl;}void C_SCAN(int b[],int n,int k) //循环算法 { int i,j,s,sum=0,p,biaoji;实验报告六-磁盘调度算法int a[20];for(i=0;i<n;i++)a[i]=b[i];for(i=n-1;i>=0;i--){biaoji=0;for(j=0;j<=i;j++)if(a[j]-k>0){biaoji=1;p=j;break;}if(biaoji==1){s=a[p];for(j=0;j<=i;j++)if(a[j]>k&&a[j]-k<s-k){s=a[j];p=j;}a[p]=a[i];cout<<"第"<<n-i<<"次访问的磁道:"<<s<<endl; sum+=s-k;k=s;}if(biaoji==0)break;}s=a[0];for(j=0;j<=i;j++)if(a[j]<=s){s=a[j];p=j;}a[p]=a[i];cout<<"第"<<n-i<<"次访问的磁道:"<<s<<endl; sum+=k-s;k=s;i--;for(;i>=0;i--)实验报告六-磁盘调度算法{s=a[0];for(j=0;j<=i;j++)if(a[j]-k<s-k){s=a[j];p=j;}a[p]=a[i];cout<<"第"<<n-i<<"次访问的磁道:"<<s<<endl; sum+=s-k;k=s;}cout<<"平均寻道长度:"<<sum*1.0/n<<endl;}void main(){int a[20];int i,n,k,k1,init;cout<<"请输入需要访问的磁道总数:";cin>>n;for(i=0;i<n;i++){cout<<"需要访问的磁道"<<i+1<<":";cin>>a[i];}cout<<"请输入当前所在的磁道:";cin>>init;k=1;while(k){cout<<"----------------------------------"<<endl; cout<<" 1.先来先服务(FCFS) "<<endl;cout<<" 2.最短寻道时间优先(SSTF) "<<endl;cout<<" 3.扫描算法(SCAN) "<<endl;cout<<" 4.循环算法(CSCAN) "<<endl;cout<<" 0.退出 "<<endl;cout<<"----------------------------------"<<endl; cout<<"请在下面输入您的选择:"<<endl;实验报告六-磁盘调度算法cin>>k;switch(k){case 1:FCFS(a,n,init);break;case 2:SSTF(a,n,init);break;case 3:k1=1;while(k1){cout<<"*********************************"<<endl; cout<<" 1.由内向外(199-》0) "<<endl;cout<<" 2.由外向内 (0-》199) "<<endl;cout<<" 0.返回上一层 "<<endl;cout<<"*********************************"<<endl; cout<<"请在下面输入您的选择:";cin>>k1;switch(k1){case 1:SCAN1(a,n,init);break;case 2:SCAN2(a,n,init);break;}}break;case 4:C_SCAN(a,n,init); break;}}}。

相关文档
最新文档