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