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