《操作系統(tǒng)實驗頁面置換算法先來先服務最短尋道優(yōu)先》由會員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)實驗頁面置換算法先來先服務最短尋道優(yōu)先(11頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、學號 P71514032 專業(yè) 計算機科學與技術(shù) 姓名
實驗日期 2017/12/7 教師簽字 成績
實驗報告
【實驗名稱】 磁盤調(diào)度——先來先服務策略 最短尋道策略
【實驗目的】
磁盤調(diào)度中尋道時間直接影響到數(shù)據(jù)訪問的快慢,通過本次實驗學習如何處理好磁盤尋道時間。
【實驗原理】
1. 先來先服務算法
先來先服務算法根據(jù)進程請求訪問磁盤的先后次序進行調(diào)度。
2. 最短尋道時間優(yōu)先算法
最短尋道時間優(yōu)先算法要求訪問的磁道與當前磁頭所在的磁道距離最近,以使每次的尋道時間最短。
2、【數(shù)據(jù)結(jié)構(gòu)和符號說明】
ypedef struct Track
{
int id;//磁道序列
int state=0;//是否訪問過,未被訪問置狀態(tài)為0
} Track;
Track track[N];//最大磁道數(shù)為100
Track track1[N];
int step[N];//移動距離
int num,i,current_track,num1;//需要訪問的次數(shù)
函數(shù)說明:
void init()//初始化程序
void input()//輸入函數(shù)
void FCFS()//先來先服務
int abs(int a,int b)//相減的
3、絕對值
int Serch_min_pos()//尋找到當前磁道最短的需求磁道
void SSTF()//最短尋道優(yōu)先
void output(Track a[])//輸出函數(shù)
void output_average_track()//輸出平均尋道時間
int show()//顯示用戶界面
先來先服務(FCFS)
最短尋道時間優(yōu)先(SSTF)
代碼:
#include
#define N 100
typedef struct Track
{
int id;//磁道序列
int state=0;//是否訪問過,
4、未被訪問置狀態(tài)為0
} Track;
Track track[N];//最大磁道數(shù)為100
Track track1[N];
int step[N];//移動距離
int num,i,current_track,num1;
void init()//初始化程序
{
num=0;
for (i=0; i
5、 input()//輸入函數(shù)
{
printf("輸入當前磁道\n");
scanf("%d",¤t_track);
num1=current_track;
printf("輸入要訪問的磁道數(shù)目\n");
scanf("%d",&num);
printf("輸入要訪問磁道序列\(zhòng)n");
for(i=0; i
6、 {
if((current_track-track[i].id)<0)//求移動距離
step[i]=track[i].id-current_track;
else
step[i]=current_track-track[i].id;//取絕對值
track[i].state=1;//狀態(tài)置為1
current_track=track[i].id;//更新當前磁道
}
}
int abs(int a,int b)//相減的絕對值
{
ret
7、urn a-b>0?a-b:b-a;
}
int Serch_min_pos()//尋找到當前磁道最短的需求磁道
{
int min=45536;//最小距離標志
int pos;
for(int i=0; iabs(track[i].id,current_track))//尋找最小距離
{
min=abs(track[i].id,current_tr
8、ack);
pos=i;
}
track[pos].state=1;
return pos;//返回在數(shù)組中的位置
}
void SSTF()//最短尋道優(yōu)先
{
for(i=0; i
9、t_track= track1[i].id;//標志
}
}
void output(Track a[])//輸出函數(shù)
{
printf("\n\n <從%d號磁道開始>\n",num1);
printf("==================================================\n");//排班
printf("被訪問的下一個磁道\t\t移動距離(磁道數(shù))\n");
for(i=0; i
10、d\n",a[i].id,step[i]);
printf("==================================================\n");
}
void output_average_track()//輸出平均尋道時間
{
double sum=0;//和
for(i=0; i
11、
{
int choose;//選擇
printf("\n******************早期的磁盤調(diào)度算法******************\n");
printf("\t\t1、先來先服務(FCFS)\n");
printf("\t\t2、最短尋道時間優(yōu)先(SSTF)\n");
printf("\t\t3、退出(EXIT)\n");
scanf("%d",&choose);
return choose;
}
int main()
{
do
{
init();
12、 switch(show())//返回值是選擇
{
case 1://FCFS
input();
FCFS();
output(track);
output_average_track();
break;
case 2://最短尋道
input();
SSTF();
output(track1);
outp
13、ut_average_track();
break;
case 3://退出
return 0;
default:
break;
}
}
while(1);
return 0;
}
截圖:
主界面開始,輸入選擇先來先服務還是最短尋道優(yōu)先,輸入當前磁道,輸入要訪問的磁道,輸入要訪問的磁道序列。
先來先服務(FCFS)
最短尋道優(yōu)先(SSTF)
【小結(jié)與討論】
1、先來先服務算法是一種
14、簡單的磁盤調(diào)度算法。它根據(jù)進程請求訪問磁盤的先后次序進行調(diào)度。此算法的優(yōu)點是較為公平與簡單,并且每個進程的請求都能依次得到處理,不會出現(xiàn)某一進程的請求長期得不到滿足的情況。但此算法由于未對尋道進行優(yōu)化,致使平均尋道時間可能較長;而最短尋道時間優(yōu)先算法要求每次訪問的磁道與當前磁頭所在的磁道距離最近,以使每次的尋道時間最短,但這種調(diào)度算法卻不能保證平均尋道時間最短,因為只能做到局部最優(yōu)。
2、本實驗用數(shù)組就可以很方便簡潔地解決問題,唯一需要注意的就是在算法中,每一次尋道需要對之前的磁道號進行暫存設(shè)置一個current_track(當前磁道),如果已查詢到,需將狀態(tài)置為1,這樣才方便尋找和計算尋道距離。
3、FCFS算法根據(jù)磁道號需要被訪問的順序依次訪問磁道,所以磁道被訪問順序在磁道需要順序確定時,即被確定,然后用依次減法即可算出移動距離,相對來說實驗的復雜度較低,易于實現(xiàn)。
4、SSTF算法則相較于FCFS算法復雜得多。在確定被訪問的下一個磁道號時,需要計算后面每一個磁道號與當前磁道號的距離,然后取最小距離的磁道號作為被訪問的下一個磁道號。即實現(xiàn)SSTF算法需找到最小距離的磁道號再寫入。
5、本次實驗通過編寫程序讓我對磁盤的相關(guān)調(diào)度有了更深入的理解,對計算機內(nèi)部原理也有了更深的認識,代碼能力也有所提高。