頁面置換演算法(FIFO LRU)

2021-10-13 03:12:35 字數 3793 閱讀 8464

1.通過模擬實現幾種基本頁面置換的演算法,了解虛擬儲存技術的特點。

2.通過置換演算法的模擬和比較,進一步了解它們的優缺點。

3.鍛鍊知識的運用能力和實踐能力

編寫程式實現:先進先出頁面置換演算法(fifo)和最近最久未使用頁面置換演算法(lru)

說明:(1)關於頁面走向的頁位址流可利用隨機數產生乙個序列,模擬該頁位址流,

也可以手工鍵盤輸入的方式或讀取檔案中的頁位址流。(2)初始時,假定所有頁面均

不在記憶體。(3)計算並輸出以上兩種演算法在分配不同記憶體物理塊數時(討論記憶體物理

塊數分配為3,4,5)的缺頁率。(4)至少驗證兩組資料,即頁位址流。

首先,了解頁面演算法的功能。頁面的演算法的功能是當出現缺頁異常且調入新頁面而記憶體已滿時,置換演算法選擇被置換的物理頁面進行置換。因此對於如何科學地選取被置換的物理頁面根據不同的頁面置換演算法不同而不同。

其次,頁面置換演算法的設計目標是為了減少頁面的調入調出次數,把未來不再訪問或者短期內不訪問的頁面調出。常見的頁面置換排程演算法有先進先出頁面置換演算法(fifo)、最近最久未使用頁面置換演算法(lru)、最佳置換排程演算法(opt)、clock置換演算法等。

本次實驗針對fifo和lru兩種演算法進行詳細分析和模擬實驗,深刻理解頁面排程演算法原理。

總體流程:

//頁面最大數

#define phyblock 100

//物理塊最大數

//物理塊的數量

int phyblocknum;

//頁面數量

int pagenum;

//儲存頁面號引用串

int pagenumstrlist[page]

;//初始化佇列

void

initializelist

(int list,

int number)

}//展示佇列狀態

void

showlist

(int list,

int number)

printf

("\n");

}//展示當前記憶體狀態

void

showmemorylist

(int list,

int phyblocknum)

printf

(" |%d|"

, list[i]);

}printf

("\n");

}void

informationcount

(int missingcount,

int replacecount,

int pagenum)

//找到該頁面下次要訪問的位置

intgetnextposition

(int currentpage,

int currentposition,

int strlist,

int pagenum)

}return

100;

}//先進先出置換演算法

void

replacepagebyfifo

(int memorylist,

int phynum,

int strlist,

int pagenum)

if(memorylist[j]==-

1)}if

(!isvisited)

missingcount++

; replacecount++

;//展示

printf

("%d\n"

, strlist[i]);

showmemorylist

(memorylist, phynum);}

}informationcount

(missingcount, replacecount, pagenum);}

//最近最久未使用置換演算法

void

replacepagebylru

(int memorylist,

int phynum,

int strlist,

int pagenum)

}//是否需要置換

for(

int j =

0; j < phynum; j++)if

(memorylist[j]

== strlist[i])if

(memorylist[j]==-

1)}if

(!isvisited)

}//2.將該位置的頁面換出

memorylist[max]

= strlist[i]

; timerecord[max]=-

1;missingcount++

; replacecount++

;//展示

printf

("%d\n"

, strlist[i]);

showmemorylist

(memorylist, phynum);}

}informationcount

(missingcount, replacecount, pagenum);}

intmain

(int argc,

const

char

* ar**)

printf

("*******************************\n");

showlist

(pagenumstrlist, pagenum)

;printf

("*******************************\n");

int chose;

while(1

)}return0;

}資料輸入截圖:物理記憶體塊為3

fifo結果:

lru結果:

本次實驗通過對兩種頁面置換演算法即先進先出置換演算法(fifo)以及最近最久未使用演算法(lru)進行了實驗模擬,為了保證程式能夠正常執行,系統必須從記憶體中調出一頁記憶體放在磁碟上,以便將所需要的頁調入記憶體,該過程稱為頁面排程,通過對以上兩種演算法的模擬,從中我深刻理解了兩種演算法的深層原理。本次實驗要求基本達到,實驗結果達到預期效果,下面是本次實驗的收穫以及心得:

物理記憶體塊數量的增大可能使缺頁率不降反增,這與該演算法不考慮程式的動態特徵有關;

影響缺頁率的因素不是單一的,主存頁框數,頁面大小,頁面替換演算法、程式特徵均會影響缺頁率;

每種演算法各有各的優缺點,例如fifo演算法簡單,但通常缺頁率較高,而lru通常缺頁率較fifo低,但演算法比較複雜,選擇時各有取捨。

頁面置換演算法

常用的頁面置換演算法有三種 先進先出演算法fifo first in first out 該演算法的基本思想是首先淘汰那些駐留在主存時間最長的頁面。最近最久未用演算法 lru 該演算法的基本思想是 如果某一頁被訪問了,那麼它很可能馬上又被訪問 反之,如果某一頁很久沒被訪問,那麼最近也不會再訪問。lr...

頁面置換演算法

include using namespace std int process 100 頁面佇列 int memory 3 塊數 int optqueue 100 opt演算法的佇列 int fifoqueue 100 fifo演算法佇列 int lruqueue 100 lru演算法佇列 int ...

頁面置換演算法

位址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷。當發生缺頁中斷時作業系統必須在記憶體選擇乙個頁面將其移出記憶體,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換演算法。常見的置換演算法有 1 最佳置換演算法 opt 理想置換演算法 這是一種理想情況下的頁...