最近未使用 (NUR) 页面替换算法
Not Used Recently (NUR) Page Replacement Algorithm
如何使用任何高级编程语言(c、c++ 或 java)实现 NUR(最近未使用页面替换算法)
通常页面替换算法有 buffer
和 pages
放入 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;
}
}
如何使用任何高级编程语言(c、c++ 或 java)实现 NUR(最近未使用页面替换算法)
通常页面替换算法有 buffer
和 pages
放入 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;
}
}