(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 先進先出頁面置換演算法 看到先進先出,我們想到的資料結構就是佇列 當分...