頁面置換演算法 FIFO和LRU 及各自的命中率

2021-07-25 10:33:21 字數 1389 閱讀 6504

(1) 先進先出演算法fifo:該演算法的實質是選擇作業中在主存駐留時間最長的一頁淘汰,這種演算法容易實現,例如分配乙個作業的儲存塊數為m,則只需建立一張m個元素的隊列表q(0)、q(1)、…、q(m-1)和乙個替換指標。這個佇列是按頁調入主存的一頁。如圖4-1所示,某時刻調入主存四個塊,(即m=4),它們按頁進入主存的先後順序為4、5、1、2,當需要置換時,總是淘汰替換指標所指向的那一頁, 新調進的頁面裝入主存後,修改相應的佇列元素,然後將替換指標往前移動,使其指向當前最老的一頁。

(2) 最近最少使用頁面淘汰演算法(lru):這是一種經常使用的方法,有多種不同的實施方案。這裡採用不斷調整頁錶鏈的方法,即總是淘汰頁錶鏈鏈首的頁面,而把新訪問的頁面插入鏈尾。如果當前呼叫頁面已在頁表內,則把它再次調整到鏈尾。這樣就能保證最近使用的頁面總處於靠近鏈尾部分,而不常使用的頁面被移到鏈首,逐個被淘汰。

#include#define n 100

#define m 12//作業數

#define assign 4//儲存塊數

//請求式分頁儲存演算法

//佇列

typedef struct queuequeue;

//鍊錶

typedef struct adjlistadjlist;

//初始化佇列

void initqueue(queue *q)

//加入佇列

void enterqueue(queue *q,int n)else

}//出隊

void outqueue(queue *q)else

}//在佇列中查詢

int checkqueue(queue *q,int n)else

}} return 0;

}//列印佇列

void printqueue(queue *q)else

printf("\n");

}}//先進先出並算命中率

void fifo(int a)else

}//刪除鏈首

void deletetail(adjlist *l)

p->next=null;

}else

}//查詢n,若在,則調整到隊尾

int checkchangetail(adjlist *l,int n)

p=p->next;

}return 0;

}}//列印鍊錶、

void printtail(adjlist *l)

printf("\n");

}}//最近最少使用頁面淘汰演算法

void lru(int a){

int i,num=0,k=0;

adjlist *l=(adjlist *)malloc(sizeof(adjlist));

l->next=null;

for(i=0;i

作業系統 頁面置換演算法 LRU和FIFO

lru least recently used 最少使用頁面置換演算法,顧名思義,就是替換掉最少使用的頁面。fifo first in first out,先進先出 頁面置換演算法,這是的最早出現的置換演算法。該演算法總是淘汰最先進入記憶體的頁面,即選擇在記憶體中駐留時間最長的頁面給予淘汰。fifo...

頁面置換演算法之 LRU演算法

基本思想 利用區域性性原理,根據乙個作業在執行過程中過去的頁面訪問歷史來推測未來的行為。它認為過去一段時間裡不曾被訪問過的頁面,在最近的將來可能也不會再被訪問。所以,這種演算法的實質是 當需要淘汰乙個頁面時,總是選擇在最近一段時間內最久不用的頁面予以淘汰。即淘汰最近最長時間未訪問過的頁面。往前看 l...

fifo頁面置換演算法 作業系統 FIFO演算法詳解

a 考慮下述頁面走向 6,7,5,2,6,7,3,6,7,5,2,3 當分配的記憶體物理塊數量分別為 3 和 4 時 fifo 先進先出頁面置換演算法 的缺頁次數分別是多少?fifo 先進先出頁面置換演算法 的缺頁次數 fifo 先進先出頁面置換演算法 看到先進先出,我們想到的資料結構就是佇列 當分...