操作系统实验六磁盘调度算法正确C++代码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《操作系统》实验报告【实验题目】:磁盘调度算法【实验目的】通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的实现方法。【实验内容】问题描述:设计程序模拟先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。程序要求如下:1)利用先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法模拟磁道访问过程。2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。4)输出:每种算法的平均寻道长度。实验要求:1)上机前认真复习磁盘调度算法,熟悉FCFS,SSTF,SCAN和循环SCAN算法的过程;2)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。实验代码:#includeiostream#includeiomanip#includemath.husingnamespacestd;constintMaxNumber=100;intTrackOrder[MaxNumber];intMoveDistance[MaxNumber];//移动距离intFindOrder[MaxNumber];//寻好序列doubleAverageDistance;//平均寻道长度booldirection;//方向true时为向外,false为向里intBeginNum;//开始磁道号intM=500;//磁道数intN;//提出磁盘I/O申请的进程数intSortOrder[MaxNumber];//排序后的序列boolFinished[MaxNumber];voidInith(){cout请输入提出磁盘I/O申请的进程数:;cinN;cout请依次输入要访问的磁道号:;for(inti=0;iN;i++)cinTrackOrder[i];for(intj=0;jN;j++)MoveDistance[j]=0;cout请输入开始磁道号:;cinBeginNum;for(intk=0;kN;k++)Finished[k]=false;for(intl=0;lN;l++)SortOrder[l]=TrackOrder[l];}//=====================排序函数,将各进程申请的磁道按从小到大排列=================voidSort(){inttemp;for(inti=N-1;i=0;i--)for(intj=0;ji;j++){if(SortOrder[j]SortOrder[j+1]){temp=SortOrder[j];SortOrder[j]=SortOrder[j+1];SortOrder[j+1]=temp;}}}//============FCFS,先来先服务=================================voidFCFS(){inttemp;temp=BeginNum;for(inti=0;iN;i++){MoveDistance[i]=abs(TrackOrder[i]-temp);temp=TrackOrder[i];FindOrder[i]=TrackOrder[i];}}//========SSTF,最短寻道法=============================voidSSTF(){inttemp,n;intA=M;temp=BeginNum;for(inti=0;iN;i++){for(intj=0;jN;j++){if(abs(TrackOrder[j]-temp)A&&Finished[j]==false){A=abs(TrackOrder[j]-temp);n=j;}elsecontinue;}Finished[n]=true;MoveDistance[i]=A;temp=TrackOrder[n];A=M;FindOrder[i]=TrackOrder[n];}}//=====================SCAN,扫描算法==========================voidSCAN(){intm,n,temp;temp=BeginNum;Sort();cout请选择开始方向:1--向外;0---向里:;cinm;if(m==1)direction=true;elseif(m==0)direction=false;elsecout输入错误!;for(inti=0;iN;i++){if(SortOrder[i]BeginNum)continue;else{n=i;break;}}if(direction==true){for(inti=n;iN;i++){MoveDistance[i-n]=abs(SortOrder[i]-temp);temp=SortOrder[i];FindOrder[i-n]=SortOrder[i];}for(intj=n-1;j=0;j--){MoveDistance[N-1-j]=abs(SortOrder[j]-temp);temp=SortOrder[j];FindOrder[N-1-j]=SortOrder[j];}}else{for(inti=n-1;i=0;i--){MoveDistance[N-i-4]=abs(SortOrder[i]-temp);temp=SortOrder[i];FindOrder[N-i-4]=SortOrder[i];}for(intj=n;jN;j++){MoveDistance[j]=abs(SortOrder[j]-temp);temp=TrackOrder[j];FindOrder[j]=SortOrder[j];}}}//=================CSCAN,循环扫描算法=======================voidCSCAN(){intm,n,temp;temp=BeginNum;Sort();cout请选择开始方向:1--向外;0---向里:;cinm;if(m==1)direction=true;elseif(m==0)direction=false;elsecout输入错误!;for(inti=0;iN;i++){if(SortOrder[i]BeginNum)continue;else{n=i;break;}}if(direction==true){for(inti=n;iN;i++){MoveDistance[i-n]=abs(SortOrder[i]-temp);temp=SortOrder[i];FindOrder[i-n]=SortOrder[i];}for(intj=0;jn;j++){MoveDistance[N-n+j]=abs(SortOrder[j]-temp);temp=SortOrder[j];FindOrder[N-n+j]=SortOrder[j];}}else{for(inti=n-1;i=0;i--){MoveDistance[n-1-i]=abs(SortOrder[i]-temp);temp=SortOrder[i];FindOrder[n-1-i]=SortOrder[i];}for(intj=N-1;j=n;j--){MoveDistance[N-j+n-1]=abs(SortOrder[j]-temp);temp=SortOrder[j];FindOrder[N-j+n-1]=SortOrder[j];}}}//========计算平均寻道时间==============voidCount(){intTotal=0;for(inti=0;iN;i++){Total+=MoveDistance[i];}AverageDistance=((double)Total)/((double)N);}voidShow(){coutsetw(20)被访问的下一个磁道号setw(20)移动距离(磁道数)endl;for(inti=0;iN;i++){coutsetw(15)FindOrder[i]setw(15)MoveDistance[i]endl;}coutsetw(20)平均寻道长度:AverageDistanceendl;coutendl;}intmain(){inty=1;ints;Inith();while(y){cout请选择寻道方式:1--FCFS;2--SSTF;3--SCAN;4--CSCSN:;cins;switch(s){case1:FCFS();Count();Show();break;case2:SSTF();Count();Show();break;case3:SCAN();Count();Show();break;case4:CSCAN();Count();Show();break;}cout是否继续选择寻道算法?1--是;0--否:;intp;cinp;y=p;}exit;return0;}结果截图:

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功