頁面置換演算法學習之FIFO,Optimal,LRU

2021-09-18 05:32:57 字數 2387 閱讀 3301

資料定義:

typedef struct item

pro; int pagenum; //系統分配給作業的主存中的頁面數

int memorynum; //可用記憶體頁面數

int curmemory;  //調入記憶體中的頁面個數 

int missnum; //缺頁次數

float missrate; //缺頁率

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

pro *page; //作業頁面集

pro *memory; //記憶體頁面集

page = (pro*)malloc(sizeof(pro)*pagenum);

memory = (pro*)malloc(sizeof(pro)*memorynum);

a.先進先出(fifo)頁面置換演算法

這是最早出現的置換演算法。該演算法總是淘汰最先進入記憶體的頁面,即選擇在記憶體中駐留時間最久的頁面予以淘汰。該演算法實現簡單,只需把乙個程序已調入記憶體的頁面,按先後次序鏈結成乙個佇列,並設定乙個指標,稱為替換指標,使它總是指向最老的頁面。但該演算法與程序實際執行的規律不相適應,因為在程序中,有些頁面經常被訪問,比如,含有全域性變數、常用函式、例程等的頁面,fifo 演算法並不能保證這些頁面不被淘汰。

這裡,我們仍用上面的例子,但採用 fifo 演算法進行頁面置換(圖

4-27)。當程序第一次訪問頁面 2 時,將把第 7 頁換出,因為它是最先被調入記憶體的;在第一次訪問頁面 3 時,又將把第 0 頁換出,

因為它在現有的 2, 0,

1 三個頁面中是最老的頁。 由圖 4-27 可以看出,利用 fifo 演算法時進行了

12 次頁面置換,比最佳置換演算法正好多一倍。

//fifo頁面置換

void fifopage(pro *page, pro *memory)

break;

}

else

tem++;

} //end for

if (j == pagenum)

} missnum++;

memory[curmemory].num = page[i].num;

print(memory);

}

}//end for

missrate = (float)missnum / pagenum;

printf("缺頁次數:%d 缺頁率: %f\n", missnum, missrate);

}

c.最近最久未使用lru(least

recently used)置換演算法

fifo 置換演算法效能之所以較差,是因為它所依據的條件是各個頁面調入記憶體的時間,而頁面調入的先後並不能反映頁面的使用情況。最近最久未使用(lru)的頁面置換演算法,是根據頁面調入記憶體後的使用情況進行決策的。由於無法**各頁面將來的使用情況,只能利用「最近的過去」作為「最近的將來」的近似,因此,lru 置換演算法是選擇最近最久未使用的頁面予以淘汰。該演算法賦予每個頁面乙個訪問字段,用來記錄乙個頁面自上次被訪問以來所經歷的時間 t,當須淘汰乙個頁面時,選擇現有頁面中其 t 值最大的,即最近最久未使用的頁面予以淘汰。

利用 lru 演算法對上例進行頁面置換的結果如圖 4-28 所示。當程序第一次對頁面

2 進行訪問時,由於頁面 7 是最近最久未被訪問的,故將它置換出去。當程序第一次對頁面 3進行訪問時,第

1 頁成為最近最久未使用的頁,將它換出。由圖可以看出,前 5 個時間的影象與最佳置換演算法時的相同,但這並非是必然的結果。因為,最佳置換演算法是從「向後看」的觀點出發的,即它是依據以後各頁的使用情況;而 lru 演算法則是「向前看」的,即根據各頁以前的使用情況來判斷,而頁面過去和未來的走向之間並無必然的聯絡。

printf("缺頁次數:%d 缺頁率: %f\n", missnum, missrate);

}

頁面置換演算法

常用的頁面置換演算法有三種 先進先出演算法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 理想置換演算法 這是一種理想情況下的頁...