《天津理工大學(xué) 操作系統(tǒng)實驗3:磁盤調(diào)度算法的實現(xiàn)》由會員分享,可在線閱讀,更多相關(guān)《天津理工大學(xué) 操作系統(tǒng)實驗3:磁盤調(diào)度算法的實現(xiàn)(7頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學(xué)習(xí)與交流
天津理工大學(xué) 操作系統(tǒng)實驗3:磁盤調(diào)度算法的實現(xiàn)
.....精品文檔......
實驗報告
學(xué)院(系)名稱:計算機(jī)與通信工程學(xué)院
姓名
王遠(yuǎn)志
學(xué)號
20135632
專業(yè)
計算機(jī)科學(xué)與技術(shù)
班級
2013級3班
實驗項目
實驗二:磁盤調(diào)度算法的實現(xiàn)
課程名稱
操作系統(tǒng)
課程代碼
0668036
實驗時間
2015 年12月 11 日 第5-8節(jié)
實驗地點
軟件實驗室7-219
批改意見
成績
教師簽字:
2、
實驗內(nèi)容:
1. 本實驗是模擬操作系統(tǒng)的磁盤尋道方式,運(yùn)用磁盤訪問順序的不同來設(shè)計磁盤的調(diào)度算法。
2. 實現(xiàn)的磁盤調(diào)度算法有FCFS,SSTF,SCAN,CSCAN和 NStepSCAN算法。
3. 設(shè)定開始磁道號尋道范圍,依據(jù)起始掃描磁道號和最大磁道號數(shù),隨機(jī)產(chǎn)生要進(jìn)行尋道的磁道號序列。
4. 選擇磁盤調(diào)度算法,顯示該算法的磁道訪問順序,計算出移動的磁道總數(shù)和平均尋道總數(shù)。
5. 按算法的尋道效率進(jìn)行排序,并對各算法的性能進(jìn)行分析比較。
實驗要求:
1.詳細(xì)描述實驗設(shè)計思想、程序結(jié)構(gòu)及各模塊設(shè)計思路;
2. 詳細(xì)描述程序所用數(shù)據(jù)結(jié)構(gòu)及算法;
3. 明確
3、給出測試用例和實驗結(jié)果;
4. 為增加程序可讀性,在程序中進(jìn)行適當(dāng)注釋說明;
5. 認(rèn)真進(jìn)行實驗總結(jié),包括:設(shè)計中遇到的問題、解決方法與收獲等;
6. 實驗報告撰寫要求結(jié)構(gòu)清晰、描述準(zhǔn)確邏輯性強(qiáng);
7. 實驗過程中,同學(xué)之間可以進(jìn)行討論互相提高,但絕對禁止抄襲。
【實驗過程記錄(源程序、測試用例、測試結(jié)果及心得體會等)】
#include
#include
#include
using namespace std;
const int MaxNumber=100;
int TrackOrder[MaxNumber];
4、
int MoveDistance[MaxNumber]; //----移動距離;
int FindOrder[MaxNumber]; //-----尋好序列。
double AverageDistance; //-----平均尋道長度
bool direction; //-----方向 true時為向外,false為向里
int BeginNum; //----開始磁道號。
int M; //----磁道數(shù)。
int N;
5、 //-----提出磁盤I/O申請的進(jìn)程數(shù)
int SortOrder[MaxNumber]; //----排序后的序列
bool Finished[MaxNumber];
void Inith()
cout<<"請輸入磁道數(shù):";
cin>>M;
cout<<"請輸入提出磁盤I/O申請的進(jìn)程數(shù):";
cin>>N;
cout<<"請依次輸入要訪問的磁道號:";
for(int i=0;i>TrackOrder[i];
for(int j=0;j
6、[j]=0;
cout<<"請輸入開始磁道號:";
cin>>BeginNum;
for(int k=0;k=0;i-
7、-)
for(int j=0;jSortOrder[j+1])
temp=SortOrder[j];
SortOrder[j]=SortOrder[j+1];
SortOrder[j+1]=temp;
//============FCFS,先來先服務(wù)=================================
void FCFS()
int temp;
temp=BeginNum; //--------將BeginNum賦給t
8、emp作為尋道時的當(dāng)前所在磁道號
for(int i=0;i
9、==========
void SSTF()
int temp,n;
int A=M;
temp=BeginNum; //--------將BeginNum賦給temp作為尋道時的當(dāng)前所在磁道號
for(int i=0;i
10、
else continue;
Finished[n]=true; //-------將已經(jīng)尋找到的Finished賦值為true
MoveDistance[i]=A; //-------尋道長度
temp=TrackOrder[n]; //-------當(dāng)前尋道號。
A=M; //-----重置A值
FindOrder[i]=TrackOrder[n]; //----尋好的賦給尋好序列
//=====================SCAN,掃描
11、算法==========================
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
12、;i++)
if(SortOrder[i]=0;j--)
MoveDis
13、tance[N-1-j]=abs(SortOrder[j]-temp);
temp=SortOrder[j];
FindOrder[N-1-j]=SortOrder[j];
else //-------選擇向里
for(int i=n-1;i>=0;i--)
MoveDistance[N-i-4]=abs(SortOrder[i]-temp);
temp=SortOrder[i];
FindOrder[N-i-4]=SortOrder[i];
for(int j=n;j
14、>m;
if(m==1)
direction=true;
els
15、e if(m==0)
direction=false;
else
cout<<"輸入錯誤";
for(int i=0;i
16、
for(int j=0;j=0;i--)
MoveDistance[n-1-i]=abs(SortOrder[i]-temp);
temp=SortOrder[i];
FindOrder[n-1-i]=SortOrder[i];
for(int j=N-1;j>=n;j--)
17、
MoveDistance[N-j+n-1]=abs(SortOrder[j]-temp);
temp=SortOrder[j];
FindOrder[N-j+n-1]=SortOrder[j];
//========計算平均尋道時間==============
void Count()
int Total=0;
for(int i=0;i
18、===========從"<
19、
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<<"是否繼續(xù)選擇尋道算法?1--是;2--否";
int p;
cin>>p;
y=p;
return 0;
實驗結(jié)果:
FCFS方式:
Sstf方式:
SCAN方式:
4.CSCSN