资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验六 磁盘调度算法1、 实验目的通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的实现方法。2、 试验内容问题描述:设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。3、 程序要求:1)利用先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法模拟磁道访问过程。2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。4)输出:每种算法的平均寻道长度。4、 需求分析(1) 输入的形式和输入值的范围算法选择要访问的磁道数磁道当前磁道号输入当前移动臂的移动的方向(第三个算法)(2) 输出的形式每种算法的平均寻道长度(3) 测试用例先来先服务FCFS最短寻道时间优先SCAN算法 CSCAN5、 调试分析通过对这次操作系统实验,使我懂得了操作系统磁盘调度的四种算法:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)和循环扫描算法(CSCAN)。加深了我对这门课程的理解。锻炼了自己在考虑全局也不是细节的能力。通过这次实验,再一次熟悉并深入掌握了程序设计语言和算法设计。6、 测试结果(1) 使用FCFS算法输入输出(2) 使用SSTF算法输入输出(3) 使用SCAN算法(向增长方向)输入输出(4) 使用SCAN算法(向减少方向)输入输出(5) 使用CSCAN算法输入输出7、 附录(java)package experiment;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.Scanner;public class F_Disc_Dispatch private static int maxsize = 100;/ 要访问的磁道数private static int count;/ 磁道private static int cidao = new intmaxsize;/ 当前磁道号private static int now;/ 总寻道长度private static int sum = 0;/ 平均寻道长度private static double AverageDistance;/ 当前移动臂的移动的方向 (1 (true)表示向外 ,0(false)表示向内)private static boolean direction;/ 算法选择/ 1-使用FCFS算法/ 2-使用SSTF算法/ 3-使用SCAN算法/ 4-使用CSCAN算法private static int option = 0;/ for循环用到变量private static int i;private static int j;private static int k;private static Scanner stdin;public static void main(String args) throws FileNotFoundException / 输入数据input();/ int a;switch (option) case 1: / 使用FCFS算法FCFS();break;case 2: / 使用SSTF算法SSTF();break;case 3: / 使用SCAN算法SCAN();break;case 4: / 使用CSCAN算法CSCAN();break;/ 输入数据public static void input() throws FileNotFoundException BufferedInputStream in = new BufferedInputStream(new FileInputStream(./file/06);System.setIn(in);stdin = new Scanner(System.in);/ 算法选择/ 1-使用FCFS算法/ 2-使用SSTF算法/ 3-使用SCAN算法/ 4-使用CSCAN算法option = stdin.nextInt();/ 要访问的磁道数count = stdin.nextInt();/ 磁道for (i = 0; i count; i+) cidaoi = stdin.nextInt();/ 当前磁道号now = stdin.nextInt();if (option = 3) / 输入当前移动臂的移动的方向 (1 表示向外 ,0表示向内) :try int g = stdin.nextInt();if (g = 1) direction = true; else direction = false; catch (Exception e) / TODO: handle exceptionSystem.out.println(direction没有正确输入);return;stdin.close();/* 先来先服务调度算法 */public static void FCFS() sum += Math.abs(cidao0 - now);System.out.print(磁盘扫描序列为:);for (i = 0; i count; i+) / 输出磁盘扫描序列System.out.print(cidaoi + );for (i = 0, j = 1; j count; i+, j+) / 求平均寻道长度sum += Math.abs(cidaoj - cidaoi);AverageDistance = (float) (sum) / (float) (count);System.out.println();System.out.println(平均寻道长度: + AverageDistance);/* 最短寻道时间优先调度算法 */public static void SSTF() k = 1;int l, r;bubble(); / 调用冒泡排序算法排序if (cidaocount - 1 = 0; i-) System.out.print(cidaoi + );sum = now - cidao0;if (cidao0 = now) / 若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务System.out.print(磁盘扫描序列为:);for (i = 0; i cidao0 & now cidaocount - 1) / 若当前磁道号大于请求序列中最小者且小于最大者System.out.print(磁盘扫描序列为:);while (cidaok = 0) & (r count) / 当前磁道在请求序列范围内if (now - cidaol) = (cidaor - now) / 选择与当前磁道最近的请求给予服务System.out.print(cidaol + );sum += now - cidaol;now = cidaol;l = l - 1; else System.out.print(cidaor + );sum += cidaor - now;now = cidaor;r = r + 1;if (l = -1) / 磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道for (j = r; j = 0; j-) System.out.print(cidaoj + );sum += cidaocount - 1 - cidao0;AverageDistance = (float
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号