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