作業系統 三種頁面置換演算法

2021-10-11 10:55:51 字數 3630 閱讀 1833

一、演算法描述

1.先進先出(fifo)置換演算法

(1)描述:fifo演算法是最早出現的置換演算法。該演算法總是淘汰最先進入記憶體的頁面,即選擇在記憶體中駐留時間最久的頁面予以淘汰。

(2)優點:該演算法實現簡單,只需要把乙個程序已調入記憶體的頁面按先後次序鏈結成乙個佇列,並設定乙個指標,稱為替換指標,使它總是指向最老的頁面。

(3)缺點:該演算法與程序實際執行的規律不相適應,因為在程序中,有些頁面經常被訪問,比如:含有全域性變數、常用函式、例程等的頁面,fifo演算法並不能保證這些頁面不被淘汰。

2.最佳(optimal)置換演算法

(1)描述:最佳置換演算法是由belady於2023年提出的一種理論上的演算法。其所選擇的被淘汰的頁面將是以後永不使用的,或許是在最長(未來)時間內不再被訪問的頁面。

(2)優點:採用最佳置換演算法通常可以保證獲得最低的缺頁率。

(3)缺點:人們目前通常還無法預知,乙個程序在記憶體的若干個頁面中,哪乙個頁面是未來最長時間內不再被訪問的,因此,該演算法是無法實現的,但可以利用該演算法去評價其他演算法。

3.lru(least recently used)置換演算法

(1)描述:最近最久未使用(lur)的頁面置換演算法是根據頁面調入記憶體後使用情況做出決策的。由於無法**各頁面將來的使用情況,只能利用「最近的過去」做「最近的將來」的近似,因此,lur置換演算法是選擇最近最久未使用的頁面予以淘汰。該演算法賦予每個頁面乙個訪問字段,用來記錄乙個頁面自上次被訪問以來所經歷的時間t。當需要淘汰乙個頁面時,選擇現有頁面中t值最大的,及最近最久未使用的頁面予以淘汰。

(2)優點:考慮程式訪問的時間區域性性,一般能有較好的效能,實際應用多。

(3)缺點:實現會需要較多的硬體支援,會增加硬體成本。

4、clcok演算法又稱為最近未使用演算法(nur) 每頁設定乙個訪問位,再將記憶體中的所有頁面都通過鏈結指標鏈結成乙個迴圈佇列;當某個頁面被訪問時,其訪問位置1。淘汰時,檢查其訪問位,如果是0,就換出;若為1,則重新將它置0;再按fifo演算法檢查下乙個頁面,到佇列中的最後乙個頁面時,若其訪問位仍為1,則再返回到隊首再去檢查第乙個頁面。

二、**實現

#

include

#include

typedef

struct

progress

pro;

//結構體定義,為變數提供乙個新別名,方便變數的定義

int n;

//頁面個數

int m;

//系統分配給程序的物理塊數

void

print

(pro *page1)

;//列印當前物理塊中的頁面

intsearch

(int num1, pro *memory1)

;//在物理塊memory1中查詢頁面號num1,如果找到,返回其在memory1中的下標,否則返回-1

intmax

(pro *memory1)

;int

optimal

(int num,

int tag,pro *memory1,pro *page1)

;int

main

(void)do

printf

("*****1-fifo頁面置換*****\n");

printf

("*****2-opt頁面置換*****\n");

printf

("*****3-lru頁面置換*****\n");

printf

("*****請選擇操作型別(1,2,3),按其它鍵結束*****\n");

fflush

(stdin);

//清空輸入緩衝區

scanf

("%c"

,&c)

;//得到使用者的輸入字元,選擇相應的置換演算法

i =0;

curmemory =0;

if(c==

'1')

//fifo頁面置換

}//end for

missrate =

(float

)missnum/n;

printf

("缺頁次數:%d 缺頁率: %f\n"

, missnum, missrate);}

//end if

if(c==

'2')

//opt頁面置換

}//end for

missrate =

(float

)missnum/n;

printf

("缺頁次數:%d 缺頁率: %.2f%%\n"

, missnum, missrate*

100);}

//end if

if(c==

'3')

//lru頁面置換if(

search

(page[i]

.num,memory)

<0)

//若在物理塊中沒有找到該頁面

else

}//end for

missrate =

(float

)missnum/n;

printf

("缺頁次數:%d 缺頁率: %.2f%%\n"

, missnum, missrate*

100);}

//end if

}while

(c==

'1'||c==

'2'||c==

'3')

;return0;

}void

print

(pro *memory1)

//列印當前的頁面

//在物理塊memory1中查詢頁面號num1,如果找到,返回其在memory1中的下標,否則返回-1

intsearch

(int num1,pro *memory1 )

return-1

;}//替換掉物理塊memory1中以後永不使用,或是未來在最長時間內不再被訪問的頁面號

intoptimal

(int num,

int tag,pro *memory1,pro *page1)

while

(page1[j]

.num!=memory1[k]

.num)

;//當前頁面號未在物理塊**現,向後搜尋

if(j

int max =0;

for(

int t=

1;t)return max;

//返回以後永不使用,或是未來在最長時間內不再被訪問的頁面

}//最早在物理塊memory1**現的頁面號

intmax

(pro *memory1)

return max;

//返回物理塊等待時間最長的頁面號

}

三、實驗結果

三種頁面置換演算法

1 為什麼要有頁面置換演算法 程式執行過程中,有時要訪問的頁面不在記憶體中,而需要將其調入記憶體。但是記憶體已經無空閒空間儲存頁面,為保證程式正常執行,系統必須從記憶體中調出一頁程式或資料送到磁碟對換區,此時需要一定的演算法來決定到低需要調出那個頁面。通常將這種演算法稱為 頁面置換演算法 2.頁面置...

三種頁面置換演算法

1 為什麼要有頁面置換演算法 程式執行過程中,有時要訪問的頁面不在記憶體中,而需要將其調入記憶體。但是記憶體已經無空閒空間儲存頁面,為保證程式正常執行,系統必須從記憶體中調出一頁程式或資料送到磁碟對換區,此時需要一定的演算法來決定到低需要調出那個頁面。通常將這種演算法稱為 頁面置換演算法 2.頁面置...

作業系統 頁面置換演算法

1 最佳頁面置換演算法 opt 其所選擇的被淘汰頁面,將是以後永不再用的,或許是在最長 未來 時間內不再被訪問的頁面。最佳置換演算法是一種理想化的演算法,具有最好的效能,但難於實現。先進先出置換演算法最直觀,但可能性能最差,故應用極少。優點 保證獲得最低的缺頁率 缺點 無法預知乙個程序在記憶體的若干...