最近未使用 (NUR) 页面替换算法

Not Used Recently (NUR) Page Replacement Algorithm

如何使用任何高级编程语言(c、c++ 或 java)实现 NUR(最近未使用页面替换算法)

通常页面替换算法有 bufferpages 放入 buffer.

缓冲区大小固定为一个值,比如 4。现在我们继续将页面添加到缓冲区中,如果它们已经在缓冲区中,我们将忽略它们并继续插入下一页。

如果它们不在缓冲区中。如果有space,我们必须插入其中。如果没有 space 那么我们搜索替换元素。在这种情况下使用频率最低。

我们如何计算最不常用的? 使用计数数组。

public class Demo {

public static void main(String[] args) {
    int size = 4;
    int []buffer = new int[size];
    int []bufferCount = new int[size];
    int[] pages = {1,2,3,4,5,1,2,1,2,3,4,6,1,2,1,5,1};
    int pos = 0;
    for(int i = 0; i < pages.length; i++)
    {
        System.out.print("For page: "+pages[i]+"\t");
        if((pos = contains(buffer, pages[i])) > 0)
        {
            //already in buffer increment the count
            bufferCount[pos] ++;
        }
        else
        {
            //choose the element with least usage and remove it
            int toRemove = getLeastUsed(bufferCount);
            bufferCount[toRemove] = 1;
            buffer[toRemove] = pages[i];
        }
        printBuffer(buffer);
        System.out.print("\t");
        printBuffer(bufferCount);
        System.out.println();
    }
}

private static void printBuffer(int[] buffer) {
    // TODO Auto-generated method stub
    for(int i = 0; i < buffer.length; i++)
        System.out.print(buffer[i] + "");
}

private static int getLeastUsed(int[] bufferCount) {
    // TODO Auto-generated method stub
    int index = 0;
    int min = bufferCount[0];
    for(int i = 0; i < bufferCount.length; i++)
        if(bufferCount[i] < min)
        {
            min = bufferCount[i];
            index = i;
        }
    return index;
}

private static int contains(int[] buffer, int key) {
    // TODO Auto-generated method stub
    for(int i = 0; i < buffer.length; i++)
        if(buffer[ i ] == key)
            return i;
    return -1;
}

}