1. 程式人生 > >頁面置換-先進先出置換

頁面置換-先進先出置換

先進先出置換:淘汰最先進入記憶體的頁面

所需的資料結構:

//頁面
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");
}