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