操作系统 磁盘调度算法 java版Word文件下载.docx

上传人:b****6 文档编号:21673253 上传时间:2023-01-31 格式:DOCX 页数:15 大小:64.11KB
下载 相关 举报
操作系统 磁盘调度算法 java版Word文件下载.docx_第1页
第1页 / 共15页
操作系统 磁盘调度算法 java版Word文件下载.docx_第2页
第2页 / 共15页
操作系统 磁盘调度算法 java版Word文件下载.docx_第3页
第3页 / 共15页
操作系统 磁盘调度算法 java版Word文件下载.docx_第4页
第4页 / 共15页
操作系统 磁盘调度算法 java版Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

操作系统 磁盘调度算法 java版Word文件下载.docx

《操作系统 磁盘调度算法 java版Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统 磁盘调度算法 java版Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

操作系统 磁盘调度算法 java版Word文件下载.docx

先来先服务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++)//输出排序结果

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1