版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验六 磁盘调度算法1、 实验目的通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的实现方法。2、 试验内容问题描述:设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。3、 程序要求:1)利用先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法模拟磁道访问过程。2)模拟四种
2、算法的磁道访问过程,给出每个磁道访问的磁头移动距离。3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。4)输出:每种算法的平均寻道长度。4、 需求分析(1) 输入的形式和输入值的范围算法选择要访问的磁道数磁道当前磁道号输入当前移动臂的移动的方向(第三个算法)(2) 输出的形式每种算法的平均寻道长度(3) 测试用例先来先服务FCFS最短寻道时间优先SCAN算法 CSCAN5、 调试分析通过对这次操作系统实验,使我懂得了操作系统磁盘调度的四种算法:先来先服务算法(FCFS)、最短寻
3、道时间优先算法(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;i
4、mport 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 Ave
5、rageDistance;/ 当前移动臂的移动的方向 (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(
6、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 Buf
7、feredInputStream(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.n
8、extInt();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 +=
9、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("
10、;");System.out.println("平均寻道长度:" + AverageDistance);/* 最短寻道时间优先调度算法 */public static void SSTF() k = 1;int l, r;bubble(); / 调用冒泡排序算法排序if (cidaocount - 1 <= now) / 若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务System.out.print("磁盘扫描序列为:");for (i = count - 1; i >= 0; i-) System.out.pr
11、int(cidaoi + " ");sum = now - cidao0;if (cidao0 >= now) / 若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务System.out.print("磁盘扫描序列为:");for (i = 0; i < count; i+) System.out.print(cidaoi + " ");sum = cidaocount - 1 - now;if (now > cidao0 && now < cidaocount - 1) / 若
12、当前磁道号大于请求序列中最小者且小于最大者System.out.print("磁盘扫描序列为:");while (cidaok < now) / 确定当前磁道在已排的序列中的位置,后面的算法都用到了,可以直接复制后少量修改,节省时间。k+;l = k - 1;r = k;while (l >= 0) && (r < count) / 当前磁道在请求序列范围内if (now - cidaol) <= (cidaor - now) / 选择与当前磁道最近的请求给予服务System.out.print(cidaol + " &qu
13、ot;);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 < count; j+) System.out.print(cidaoj + " ");sum += cidaocount - 1 - cidao0; else / 磁头移动到序列的最大号,返
14、回内侧扫描仍未扫描的磁道for (j = l; j >= 0; j-) System.out.print(cidaoj + " ");sum += cidaocount - 1 - cidao0;AverageDistance = (float) (sum) / (float) (count);System.out.println("");System.out.println("平均寻道长度: " + AverageDistance);/* 扫描调度算法 */public static void SCAN() / 先要给出当前磁
15、道号和移动臂的移动方向k = 1;int l, r;bubble(); / 调用冒泡排序算法排序if (cidaocount - 1 <= now) / 若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先System.out.print("磁盘扫描序列为:");for (i = count - 1; i >= 0; i-) System.out.print(cidaoi + " ");sum = now - cidao0;if (cidao0 >= now) / 若当前磁道号小于请求序列中最小者,则
16、直接由内向外依次给予各请求服务,此情况同最短寻道优先System.out.print("磁盘扫描序列为:");for (i = 0; i < count; i+)System.out.print(cidaoi + " ");sum = cidaocount - 1 - now;if (now > cidao0 && now < cidaocount - 1) / 若当前磁道号大于请求序列中最小者且小于最大者while (cidaok < now) k+;l = k - 1;r = k;if (direction =
17、 false) / 选择移动臂方向向内,则先向内扫描System.out.print("磁盘扫描序列为:");for (j = l; j >= 0; j-) System.out.print(cidaoj + " "); / 输出向内扫描的序列for (j = r; j < count; j+) / 磁头移动到最小号,则改变方向向外扫描未扫描的磁道System.out.print(cidaoj + " "); / 输出向外扫描的序列sum = now - 2 * cidao0 + cidaocount - 1; else
18、/ 选择移动臂方向向外,则先向外扫描System.out.print("磁盘扫描序列为:");for (j = r; j < count; j+) System.out.print(cidaoj + " "); / 输出向外扫描的序列for (j = l; j >= 0; j-) / 磁头移动到最大号,则改变方向向内扫描未扫描的磁道System.out.print(cidaoj + " ");sum = -now - cidao0 + 2 * cidaocount - 1;AverageDistance = (float)
19、 (sum) / (float) (count);System.out.println("");System.out.println("平均寻道长度: " + AverageDistance);/* 循环扫描调度算法 */public static void CSCAN() k = 1;int l, r;bubble(); / 调用冒泡排序算法排序if (cidaocount - 1 <= now) / 若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务System.out.print("磁盘扫描序列为
20、:");for (i = 0; i < count; i+) System.out.print(cidaoi + " ");sum = now - 2 * cidao0 + cidaocount - 1;if (cidao0 >= now) / 若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先System.out.print("磁盘扫描序列为:");for (i = 0; i < count; i+)System.out.print(cidaoi + " ");sum = cidaocount - 1 - now;if (now > cidao0 && now < cidaocount - 1) / 若当前磁道号大于请求序列中最小者且小于最大者System.out.print("磁盘扫描序列为:");while (cidaok < now) / 单向反复地从内向外扫描k+;l = k - 1;r = k;for (j = r; j < count; j+) System.out.print(cid
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026吉林通化集安市社区就业服务专员(公益性岗位)招聘31人备考题库及答案详解(新)
- 2026湖南怀化市洪江市事业单位选调51人笔试题库含答案详解【基础题】
- 2026四川成都市第八人民医院招募医疗卫生辅助岗10人(第二轮招募)考前冲刺密卷附参考答案详解(轻巧夺冠)
- 2026-2027年河北石家庄市新乐市人力资源和社会保障局新乐市青年就业见习报名模拟试卷【A卷】附答案详解
- 2026年长春师范大学公开招聘高层次人才(2号)考前冲刺试卷(各地真题)附答案详解
- 2025-2026学年四川省成都市郫都区三下数学期末学业质量监测模拟试题含答案解析
- 2025-2026学年四川省南充市蓬安县数学三年级第二学期期中联考模拟试题(含答案解析)
- 2026中国老年食品吞咽障碍解决方案与适口性改良技术进展
- 2025-2026学年嘉荫县数学三年级下学期期末检测模拟试题含解析
- 2025-2026学年哈尔滨市延寿县四年级数学第二学期期末试题含答案
- 市政给水管网专项施工方案
- 施工现场安全管理方案
- 2025年曲靖市师宗县城区学校遴选教师考试笔试试卷(附完整参考答案)
- 2026年上半年教师资格证考试《高中英语学科知识与教学能力》真题
- 2026年事业单位结构化面试真题及参考答案(2026年)
- 埋地钢质管道交流干扰防护技术标准(SYT 7854-2025 )
- 2026年广西国际壮医医院临床护理岗位(增补)人才招聘5人笔试备考试题及答案详解
- 《普通高中地理课程标准(2017年版2025年修订)》-2026年高中地理新课标变化深度解读与教学实践讲义
- 2025年乡村全科执业助理医师资格考试真题及答案解析(全科完整版)
- 【2026】年部编版道德与法治新教材二年级上册全册教案(共4个单元含教学计划)
- 机加工中心切削液管理规范
评论
0/150
提交评论