頁面置換-先進先出置換
阿新 • • 發佈:2018-12-12
先進先出置換:淘汰最先進入記憶體的頁面
所需的資料結構:
//頁面
struct Page
{
int id; //標誌
int start_time; //進入記憶體的時間
int exist_time; //在記憶體中沒有被訪問的時間
};
輔助函式:
//在記憶體中尋找最先進入記憶體的頁面。返回記憶體下標。 int FindFirst(Page *q, int m) { int time, k, i; time = q[0].start_time; k = 0; for(i = 1; i < m; i++) if(q[i].start_time < time) { time = q[i].start_time; k = i; } return k; }
//在記憶體中尋找標誌為id的頁,如果找到,返回記憶體下標,否則返回-1
//q記憶體,m記憶體大小。
int Find(Page *q, int m, int id)
{
int i;
for(i = 0; i < m; i++)
if(q[i].id == id)
return i;
return -1;
}
實現方法:
void FIFO(Page *p, int n, int m) { int i, j, k; Page q[maxm]; for(i = 0; i < m; i++) q[i] = p[i]; for(i = m; i < n; i++) if(Find(q, m, p[i].id) < 0) { k = FindFirst(q, m); //在記憶體中尋找最先進入記憶體的頁面 printf("%d ", q[k].id); q[k] = p[i]; } printf("\n"); }