操作系统 磁盘调度算法 java版.docx
- 文档编号:8537033
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:15
- 大小:64.11KB
操作系统 磁盘调度算法 java版.docx
《操作系统 磁盘调度算法 java版.docx》由会员分享,可在线阅读,更多相关《操作系统 磁盘调度算法 java版.docx(15页珍藏版)》请在冰豆网上搜索。
操作系统磁盘调度算法java版
实验六磁盘调度算法
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算法
CSCAN
5、调试分析
通过对这次操作系统实验,使我懂得了操作系统磁盘调度的四种算法:
先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)和循环扫描算法(CSCAN)。
加深了我对这门课程的理解。
锻炼了自己在考虑全局也不是细节的能力。
通过这次实验,再一次熟悉并深入掌握了程序设计语言和算法设计。
6、测试结果
(1)使用FCFS算法
输入
输出
(2)使用SSTF算法
输入
输出
(3)使用SCAN算法(向增长方向)
输入
输出
(4)使用SCAN算法(向减少方向)
输入
输出
(5)使用CSCAN算法
输入
输出
7、附录(java)
packageexperiment;
importjava.io.BufferedInputStream;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.util.Scanner;
publicclassF_Disc_Dispatch{
privatestaticintmaxsize=100;
//要访问的磁道数
privatestaticintcount;
//磁道
privatestaticintcidao[]=newint[maxsize];
//当前磁道号
privatestaticintnow;
//总寻道长度
privatestaticintsum=0;
//平均寻道长度
privatestaticdoubleAverageDistance;
//当前移动臂的移动的方向(1(true)表示向外,0(false)表示向内)
privatestaticbooleandirection;
//算法选择
//1-使用FCFS算法
//2-使用SSTF算法
//3-使用SCAN算法
//4-使用CSCAN算法
privatestaticintoption=0;
//for循环用到变量
privatestaticinti;
privatestaticintj;
privatestaticintk;
privatestaticScannerstdin;
publicstaticvoidmain(String[]args)throwsFileNotFoundException{
//输入数据
input();
//inta;
switch(option){
case1:
//使用FCFS算法
FCFS();
break;
case2:
//使用SSTF算法
SSTF();
break;
case3:
//使用SCAN算法
SCAN();
break;
case4:
//使用CSCAN算法
CSCAN();
break;
}
}
//输入数据
publicstaticvoidinput()throwsFileNotFoundException{
BufferedInputStreamin=newBufferedInputStream(newFileInputStream(
"./file/06"));
System.setIn(in);
stdin=newScanner(System.in);
//算法选择
//1-使用FCFS算法
//2-使用SSTF算法
//3-使用SCAN算法
//4-使用CSCAN算法
option=stdin.nextInt();
//要访问的磁道数
count=stdin.nextInt();
//磁道
for(i=0;i cidao[i]=stdin.nextInt(); } //当前磁道号 now=stdin.nextInt(); if(option==3){ //输入当前移动臂的移动的方向(1表示向外,0表示向内): try{ intg=stdin.nextInt(); if(g==1){ direction=true; }else{ direction=false; } }catch(Exceptione){ //TODO: handleexception System.out.println("direction没有正确输入"); return; } } stdin.close(); } /*********************先来先服务调度算法**************************/ publicstaticvoidFCFS(){ sum+=Math.abs(cidao[0]-now); System.out.print("磁盘扫描序列为: "); for(i=0;i { System.out.print(cidao[i]+""); } for(i=0,j=1;j { sum+=Math.abs(cidao[j]-cidao[i]); AverageDistance=(float)(sum)/(float)(count); } System.out.println(""); System.out.println("平均寻道长度: "+AverageDistance); } /**********************最短寻道时间优先调度算法********************/ publicstaticvoidSSTF(){ k=1; intl,r; bubble();//调用冒泡排序算法排序 if(cidao[count-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务 { System.out.print("磁盘扫描序列为: "); for(i=count-1;i>=0;i--){ System.out.print(cidao[i]+""); } sum=now-cidao[0]; } if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务 { System.out.print("磁盘扫描序列为: "); for(i=0;i System.out.print(cidao[i]+""); } sum=cidao[count-1]-now; } if(now>cidao[0]&&now { System.out.print("磁盘扫描序列为: "); while(cidao[k] { k++; } l=k-1; r=k; while((l>=0)&&(r { if((now-cidao[l])<=(cidao[r]-now))//选择与当前磁道最近的请求给予服务 { System.out.print(cidao[l]+""); sum+=now-cidao[l]; now=cidao[l]; l=l-1; }else{ System.out.print(cidao[r]+""); sum+=cidao[r]-now; now=cidao[r]; r=r+1; } } if(l==-1)//磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道 { for(j=r;j System.out.print(cidao[j]+""); } sum+=cidao[count-1]-cidao[0]; }else//磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道 { for(j=l;j>=0;j--){ System.out.print(cidao[j]+""); } sum+=cidao[count-1]-cidao[0]; } } AverageDistance=(float)(sum)/(float)(count); System.out.println(""); System.out.println("平均寻道长度: "+AverageDistance); } /*****************************扫描调度算法*******************************/ publicstaticvoidSCAN()//先要给出当前磁道号和移动臂的移动方向 { k=1; intl,r; bubble();//调用冒泡排序算法排序 if(cidao[count-1]<=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先 { System.out.print("磁盘扫描序列为: "); for(i=count-1;i>=0;i--){ System.out.print(cidao[i]+""); } sum=now-cidao[0]; } if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先 { System.out.print("磁盘扫描序列为: "); for(i=0;i System.out.print(cidao[i]+""); sum=cidao[count-1]-now; } if(now>cidao[0]&&now { while(cidao[k] k++; } l=k-1; r=k; if(direction==false)//选择移动臂方向向内,则先向内扫描 { System.out.print("磁盘扫描序列为: "); for(j=l;j>=0;j--){ System.out.print(cidao[j]+"");//输出向内扫描的序列 } for(j=r;j { System.out.print(cidao[j]+"");//输出向外扫描的序列 } sum=now-2*cidao[0]+cidao[count-1]; }else//选择移动臂方向向外,则先向外扫描 { System.out.print("磁盘扫描序列为: "); for(j=r;j System.out.print(cidao[j]+"");//输出向外扫描的序列 } for(j=l;j>=0;j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道 { System.out.print(cidao[j]+""); } sum=-now-cidao[0]+2*cidao[count-1]; } } AverageDistance=(float)(sum)/(float)(count); System.out.println(""); System.out.println("平均寻道长度: "+AverageDistance); } /************************循环扫描调度算法*****************************/ publicstaticvoidCSCAN(){ k=1; intl,r; bubble();//调用冒泡排序算法排序 if(cidao[count-1]<=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务 { System.out.print("磁盘扫描序列为: "); for(i=0;i System.out.print(cidao[i]+""); } sum=now-2*cidao[0]+cidao[count-1]; } if(cidao[0]>=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先 { System.out.print("磁盘扫描序列为: "); for(i=0;i System.out.print(cidao[i]+""); sum=cidao[count-1]-now; } if(now>cidao[0]&&now { System.out.print("磁盘扫描序列为: "); while(cidao[k] { k++; } l=k-1; r=k; for(j=r;j System.out.print(cidao[j]+"");//输出从当前磁道向外扫描的序列 } for(j=0;j { System.out.print(cidao[j]+""); } sum=2*cidao[count-1]+cidao[l]-now-2*cidao[0]; } AverageDistance=(float)(sum)/(float)(count); System.out.println(""); System.out.print("平均寻道长度: "+AverageDistance); } /*********************冒泡排序算法**************************/ publicstaticvoidbubble(){ inttemp; for(inti=0;i for(intj=i+1;j if(cidao[i]>cidao[j]){ temp=cidao[i]; cidao[i]=cidao[j]; cidao[j]=temp; } } } System.out.println("排序后的磁盘序列为: "); for(i=0;i { System.out.print(cidao[i]+""); } System.out.println(""); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 磁盘调度算法 java版 磁盘 调度 算法 java