操作系统 磁盘调度算法 java版Word文件下载.docx
- 文档编号:21673253
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:15
- 大小:64.11KB
操作系统 磁盘调度算法 java版Word文件下载.docx
《操作系统 磁盘调度算法 java版Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统 磁盘调度算法 java版Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
先来先服务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();
case3:
//使用SCAN算法
SCAN();
case4:
//使用CSCAN算法
CSCAN();
}
}
//输入数据
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<
count;
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("
磁盘扫描序列为:
"
i++)//输出磁盘扫描序列
{
System.out.print(cidao[i]+"
"
for(i=0,j=1;
j<
i++,j++)//求平均寻道长度
sum+=Math.abs(cidao[j]-cidao[i]);
AverageDistance=(float)(sum)/(float)(count);
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)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务
for(i=0;
sum=cidao[count-1]-now;
if(now>
cidao[0]&
&
now<
cidao[count-1])//若当前磁道号大于请求序列中最小者且小于最大者
while(cidao[k]<
now)//确定当前磁道在已排的序列中的位置,后面的算法都用到了,可以直接复制后少量修改,节省时间。
{
k++;
l=k-1;
r=k;
while((l>
=0)&
(r<
count))//当前磁道在请求序列范围内
if((now-cidao[l])<
=(cidao[r]-now))//选择与当前磁道最近的请求给予服务
{
System.out.print(cidao[l]+"
sum+=now-cidao[l];
now=cidao[l];
l=l-1;
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>
j--){
AverageDistance=(float)(sum)/(float)(count);
/*****************************扫描调度算法*******************************/
publicstaticvoidSCAN()//先要给出当前磁道号和移动臂的移动方向
{
=now)//若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先
=now)//若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先
i++)
now){
if(direction==false)//选择移动臂方向向内,则先向内扫描
System.out.print("
//输出向内扫描的序列
j++)//磁头移动到最小号,则改变方向向外扫描未扫描的磁道
//输出向外扫描的序列
sum=now-2*cidao[0]+cidao[count-1];
}else//选择移动臂方向向外,则先向外扫描
j--)//磁头移动到最大号,则改变方向向内扫描未扫描的磁道
sum=-now-cidao[0]+2*cidao[count-1];
/************************循环扫描调度算法*****************************/
publicstaticvoidCSCAN(){
=now)//若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务
sum=now-2*cidao[0]+cidao[count-1];
now)//单向反复地从内向外扫描
for(j=r;
System.out.print(cidao[j]+"
//输出从当前磁道向外扫描的序列
for(j=0;
r;
j++)//当扫描完最大号磁道,磁头直接移动到最小号磁道,再向外扫描未扫描的磁道
sum=2*cidao[count-1]+cidao[l]-now-2*cidao[0];
/*********************冒泡排序算法**************************/
publicstaticvoidbubble(){
inttemp;
for(inti=0;
i++){//使用冒泡法按从小到大顺序排列
for(intj=i+1;
if(cidao[i]>
cidao[j]){
temp=cidao[i];
cidao[i]=cidao[j];
cidao[j]=temp;
排序后的磁盘序列为:
i++)//输出排序结果
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 磁盘调度算法 java版 磁盘 调度 算法 java