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