資源簡介
描編程序實現磁盤調度算法,并求出每種算法的平均尋道長度。設計要求:
(1)能夠輸入程序要訪問的磁道序列或系統自動生成程序要訪問的磁道序列和磁頭當前所在的磁道數。
(2)可以選擇某磁盤調度算法(先來先服務算法、最短尋道時間優先算法、掃描算法和循環掃描算法)。
(3)能夠以圖表形式顯示磁盤調度順序和平均尋道長度。

代碼片段和文件信息
#include
#include
using?namespace?std;
int?M=1000;
int?N=1000;
int??Page[100];//磁道數組
int??Move[100];//訪問數組
int?move[100];//移動距離數組
void?FCFS(?);//先來先服務
void?SSTF(?);//最短尋到時間優先
void?SCAN(?);//掃描算法
void?CSCAN(?);//循環掃描算法
void?input();//輸入
void?init();//更新
void?output();//輸出
//?9?2?55?58?39?18?90?160?150?38?184?100?
int?main(){
???int?option=1;
???cout<<“*************模擬磁盤調度過程算法*************“< ???input();
???int?T=1;
???while(T){
???cout<<“**************************************************************“< ???cout<<“????0.exit???1.FCFS???2.SSTF???3.SCAN???4.CSCAN???5.return????“< ???????cout<<“**************************************************************“< ???????cout<<“請選擇要用的功能號(0~5):“;cin>>option;
???????switch?(option){
???case?0:cout<<“**********模擬磁盤調度過程結束歡迎提出寶貴意見!**********“< ???case?1:?cout<<“??????????????????????先來先服務算法\n“< ???case?2:?cout<<“???????????????????最短尋道時間優先算法\n“< ???case?3:?cout<<“?????????????????????????掃描算法\n“< ???case?4:?cout<<“???????????????????????循環掃描算法\n“< ???case?5:?input();break;
???default:?cout<<“輸入的功能號無效請正確選擇功能號(0-5)!“< ???}
???}
return?0;?
}
void?input(){?//頁面數組初始化函數及輸出界面
cout<<“請輸入模擬磁道的個數:“;int?m;cin>>m;M=m;
int?z=1;int?option=1;
while(option){
cout<<“請對模擬磁道序列的輸入方式進行選擇(1自動產生、2手動輸入):“;//選擇初始化方式automatic?or?give
cin>>z;
switch?(z){
case?1:{??//系統自動隨機初始化
for(int?x=0;x Page[x]=rand()%9+1;
}
cout<<“系統自動產生的磁道序列如下:“< for(x=0;x cout< }
cout< z=0;option?=0;
}
break;
case?2:{
cout<<“請輸入手動生成的磁道序列:“;??//人工輸入初始化
for(int?i=0;i cin>>Page[i];
}
z=0;option?=0;
???}
break;
default:?cout<<“輸入的功能號無效請正確選擇功能號(1或2)!“< }
}
int?now=0;
cout<<“請輸入當前磁道號:“;
????cin>>now;?N=now;
int?i;
for(?i=0?;i ?????Move[i]=Page[i];?
???}
}
void?output(){
int?i;int?j;
for(?i=0j=1;i //cout< printf(“%5d“Move[i]);
move[j]=abs(Move[j]-Move[i]);
}
move[0]=abs(N-Move[0]);
cout<“?平均尋道長度“< cout<<“?“< int?sum=0;
for(?i=0;i //cout< printf(“%5d“move[i]);
sum=sum+move[i];
}
float?averag=float(sum)/M;
?
printf(“??%7.1f“averag);
cout<}
void?FCFS(?){//先來先服務?FCFS
cout<<“?FCFS“;
}
void?init(){
for(int?i=0?;i Move[i]=0;?
}
for(?i=0?;i move[i]=0;?
}
for(?i=0?;i ?????Move[i]=Page[i];?
}
}
void?SSTF(?){//最短尋道時間算法??SSTF
???int?templrji;int?now=?N;int?k=1;int?sum=0;int?a[100];//用來對訪問數組交換時用
???for(i=0;i ???for(j=i+1;j ???if(Move[i]>Move[j]){
???temp=Move[i];
???Move[i]=Move[j];
?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????74752??2010-12-17?12:50??磁盤調度\Debug\vc60.idb
?????文件?????110592??2010-12-17?12:50??磁盤調度\Debug\vc60.pdb
?????文件?????553030??2010-12-17?12:50??磁盤調度\Debug\磁盤調度算法.exe
?????文件?????793760??2010-12-17?12:50??磁盤調度\Debug\磁盤調度算法.ilk
?????文件?????261290??2010-12-17?12:50??磁盤調度\Debug\磁盤調度算法.obj
?????文件????2001404??2010-12-17?12:50??磁盤調度\Debug\磁盤調度算法.pch
?????文件????1098752??2010-12-17?12:50??磁盤調度\Debug\磁盤調度算法.pdb
?????文件???????6184??2010-12-16?16:15??磁盤調度\磁盤調度算法.cpp
?????文件???????3475??2010-12-17?12:50??磁盤調度\磁盤調度算法.dsp
?????文件????????549??2010-12-17?12:50??磁盤調度\磁盤調度算法.dsw
?????文件??????33792??2010-12-17?12:50??磁盤調度\磁盤調度算法.ncb
?????文件??????48640??2010-12-17?12:50??磁盤調度\磁盤調度算法.opt
?????文件????????776??2010-12-17?12:50??磁盤調度\磁盤調度算法.plg
?????目錄??????????0??2010-12-17?12:50??磁盤調度\Debug
?????目錄??????????0??2010-12-17?12:50??磁盤調度
-----------?---------??----------?-----??----
??????????????4986996????????????????????15
- 上一篇:仿京東地址選擇
- 下一篇:基本web數據挖掘中的聚類算法研究
評論
共有 條評論