操作系统实验六磁盘调度算法正确C++代码.docx
-
资源ID:3549668
资源大小:38KB
全文页数:5页
- 资源格式: DOCX
下载积分:6.99金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
操作系统实验六磁盘调度算法正确C++代码.docx
操作系统实验六磁盘调度算法正确C+代码操作系统实验报告 :磁盘调度算法 通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的实现方法。 问题描述: 设计程序模拟先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向,分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。 程序要求如下: 1)利用先来先服务FCFS,最短寻道时间优先SSTF,SCAN和循环SCAN算法模拟磁道访问过程。 2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。 3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向,算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。 4)输出:每种算法的平均寻道长度。 实验要求: 1) 上机前认真复习磁盘调度算法,熟悉FCFS,SSTF,SCAN和循环SCAN算法的过程; 2) 上机时独立编程、调试程序; 3) 根据具体实验要求,完成好实验报告。 实验代码: #include<iostream> #include<iomanip> #include<math.h> using namespace std; const int MaxNumber=100; int TrackOrderMaxNumber; int MoveDistanceMaxNumber;/移动距离 int FindOrderMaxNumber;/寻好序列 double AverageDistance;/平均寻道长度 bool direction;/方向 true时为向外,false为向里 int BeginNum;/开始磁道号 int M=500;/磁道数 int N;/提出磁盘I/O申请的进程数 int SortOrderMaxNumber;/排序后的序列 bool FinishedMaxNumber; void Inith cout<<"请输入提出磁盘I/O申请的进程数: " cin>>N; cout<<"请依次输入要访问的磁道号: " for(int i=0;i<N;i+) cin>>TrackOrderi; for(int j=0;j<N;j+) MoveDistancej=0; cout<<"请输入开始磁道号: " cin>>BeginNum; for(int k=0;k<N;k+) Finishedk=false; for(int l=0;l<N;l+) SortOrderl=TrackOrderl; /=排序函数,将各进程申请的磁道按从小到大排列= void Sort int temp; for(int i=N-1;i>=0;i-) for(int j=0;j<i;j+) if(SortOrderj>SortOrderj+1) temp=SortOrderj; SortOrderj=SortOrderj+1; SortOrderj+1=temp; /=FCFS,先来先服务= void FCFS int temp; temp=BeginNum; for(int i=0;i<N;i+) MoveDistancei=abs(TrackOrderi-temp); temp=TrackOrderi; FindOrderi=TrackOrderi; /=SSTF,最短寻道法= void SSTF int temp,n; int A=M; temp=BeginNum; for(int i=0;i<N;i+) for(int j=0;j<N;j+) if(abs(TrackOrderj-temp)<A&&Finishedj=false) A=abs(TrackOrderj-temp); n=j; else continue; Finishedn=true; MoveDistancei=A; temp=TrackOrdern; A=M; FindOrderi=TrackOrdern; /=SCAN,扫描算法= void SCAN int m,n,temp; temp=BeginNum; Sort; cout<<"请选择开始方向:1-向外;0-向里: " cin>>m; if(m=1) direction=true; else if(m=0) direction=false; else cout<<"输入错误!" for(int i=0;i<N;i+) if(SortOrderi<BeginNum) continue; else n=i; break; if(direction=true) for(int i=n;i<N;i+) MoveDistancei-n=abs(SortOrderi-temp); temp=SortOrderi; FindOrderi-n=SortOrderi; for(int j=n-1;j>=0;j-) MoveDistanceN-1-j=abs(SortOrderj-temp); temp=SortOrderj; FindOrderN-1-j=SortOrderj; else for(int i=n-1;i>=0;i-) MoveDistanceN-i-4=abs(SortOrderi-temp); temp=SortOrderi; FindOrderN-i-4=SortOrderi; for(int j=n;j<N;j+) MoveDistancej=abs(SortOrderj-temp); temp=TrackOrderj; FindOrderj=SortOrderj; /=CSCAN,循环扫描算法= void CSCAN int m,n,temp; temp=BeginNum; Sort; cout<<"请选择开始方向:1-向外;0-向里: " cin>>m; if(m=1) direction=true; else if(m=0) direction=false; else cout<<"输入错误!" for(int i=0;i<N;i+) if(SortOrderi<BeginNum) continue; else n=i; break; if(direction=true) for(int i=n;i<N;i+) MoveDistancei-n=abs(SortOrderi-temp); temp=SortOrderi; FindOrderi-n=SortOrderi; for(int j=0;j<n;j+) MoveDistanceN-n+j=abs(SortOrderj-temp); temp=SortOrderj; FindOrderN-n+j=SortOrderj; else for(int i=n-1;i>=0;i-) MoveDistancen-1-i=abs(SortOrderi-temp); temp=SortOrderi; FindOrdern-1-i=SortOrderi; for(int j=N-1;j>=n;j-) MoveDistanceN-j+n-1=abs(SortOrderj-temp); temp=SortOrderj; FindOrderN-j+n-1=SortOrderj; /=计算平均寻道时间= void Count int Total=0; for(int i=0;i<N;i+) Total+=MoveDistancei; AverageDistance=(double)Total)/(double)N); void Show cout<<setw(20)<<"被访问的下一个磁道号"<<setw(20)<<"移动距离(磁道数)"<<endl; for(int i=0;i<N;i+) cout<<setw(15)<<FindOrderi<<setw(15)<<MoveDistancei<<endl; cout<<setw(20)<<"平均寻道长度:"<<AverageDistance<<endl; cout<<endl; int main int y=1; int s; Inith; while(y) cout<<"请选择寻道方式:1-FCFS; 2-SSTF; 3-SCAN;4-CSCSN: " cin>>s; switch(s) case 1:FCFS;Count;Show;break; case 2:SSTF;Count;Show;break; case 3:SCAN;Count;Show;break; case 4:CSCAN;Count;Show;break; cout<<"是否继续选择寻道算法?1-是;0-否: " int p; cin>>p; y=p; exit; return 0; 结果截图: