我正在尝试实现 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 和 ref 来检查。
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编号的数组中?
谢谢