我正在尝试实现LRU页面替换。我能够让FIFO算法工作。但我不确定如何跟踪最近最少使用的?
我在阅读文件。其结构类似于第一个数字是pid(1),第二个数字是ref(45),依此类推:
1 45
1 46
1 45
1 44
2 76
2 75
2 77
2 77
所以,我正在使用一个类数组,并逐行解析文件,如果它不在数组中,则将pid和ref放在该索引中。如果阵列已满,请返回到开头的广告开始。
class pagetable
{
public:
int pid;
int ref;
int faults;
pagetable();
};
pagetable* page = new pagetable[frames];
我正在提示帧数。 我提示输入文件名并将其存储在
中ifstream inputStream;
然后我可以调用我的LFU函数并抓住每个pid并参考。
int runsimLFU(ifstream &inputStream, pagetable* page, int frames ){
int i =0;
int j=0;
bool flag = false;
int cnt=0;
int index = 0;
int value = 0;
while(1){
inputStream >> pid;
inputStream >> ref;
page[count].pid = pid;
page[count].ref = ref;
pagefaults++;
像这样的东西,我可以继续抓住文件的每一行。
这就是我搜索数组的方式
bool findinarray(pagetable* page, int frames, int pid, int ref)
{
for(int i=0; i < frames+1; i++) {
if(page[i].pid == pid && page[i].ref == ref)
{
return true;
}
}
return false;
}
两个问题
1)我不确定如何跟踪LRU。我会想象第二个数组和一个计数器变量,但就我所知,该怎么做。
2)一旦我知道了LRU,当输入pid时,ref不在数组中,我将其填入索引LRU号的数组中?
谢谢
答案 0 :(得分:1)
通常,您对LRU有两种竞争需求:
如果您单独解决任何一项要求,最终会导致暴力效率低下。您可以自己协调两个容器 - 理想情况下将它们包装到LRU类中以提供一些封装并提高可靠性。或者,boost多索引容器可满足这些要求:www.boost.org/libs/multi_index/