C++ 如何编写最佳页面替换算法?
我分享我的逻辑。我想知道天气是否好 我创建了一个数组,用于存储每页出现的总次数 对于ex-If,页面要求的顺序为{1,2,3,1,2}。我们把它称为“C++ 如何编写最佳页面替换算法?,c++,arrays,algorithm,priority-queue,page-replacement,C++,Arrays,Algorithm,Priority Queue,Page Replacement,我分享我的逻辑。我想知道天气是否好 我创建了一个数组,用于存储每页出现的总次数 对于ex-If,页面要求的顺序为{1,2,3,1,2}。我们把它称为“seq”数组 然后数组={2,2,1}。我们把它称为“count”数组 现在,我遍历seq并为其分配一个帧,直到我没有耗尽所有帧,或者如果该帧不在内存中。然后我将帧号及其剩余的出现次数推送到最小优先级队列 for (int i = 1; i <= M; ++i) { if (frameAssigned[arr[
seq
”数组
然后数组={2,2,1}。我们把它称为“count
”数组
现在,我遍历seq
并为其分配一个帧,直到我没有耗尽所有帧,或者如果该帧不在内存中。然后我将帧号及其剩余的出现次数推送到最小优先级队列
for (int i = 1; i <= M; ++i)
{
if (frameAssigned[arr[i]] != 0) //frame already assigned
{
count[arr[i]]--;
PQ.push(ii(count[arr[i]], arr[i]));
continue;
}
if (freeFrames >= 1)
{
frameAssigned[arr[i]] = presentFrame++; //presentFrame=0 initially
freeFrames--;
noOfReplacements++;
count[seq[i]]--;
PQ.push(ii(count[seq[i]], seq[i]));
continue;
}
//Now, if all free frames are exhausted, I do the following. Replace the page which is
//occurring the minimum number of times.
ii temp = PQ.top(); // ii = pair<int,int>
PQ.pop();
int frameNumber = temp.second;
count[seq[i]]--;
if (seq[arr[i]] >= 0) PQ.push(ii(count[seq[i]], seq[i]));
frameAssigned[arr[i]] = frameAssigned[custNumber];
frameAssigned[custNumber] = 0;
noOfReplacements++;
for(int i=1;i=1)
{
frameAssigned[arr[i]]=presentFrame++;//最初presentFrame=0
自由框架--;
noOfReplacements++;
计数[顺序[i]]-;
电能质量推送(ii(计数[顺序[i]],顺序[i]);
继续;
}
//现在,如果所有空闲帧都用完了,我将执行以下操作。替换已删除的页面
//发生的次数最少。
ii温度=PQ.top();//ii=对
PQ.pop();
int frameNumber=温度秒;
计数[顺序[i]]-;
如果(顺序[arr[i]>=0)PQ.push(ii(计数[seq[i]],顺序[i]);
frameAssigned[arr[i]]=frameAssigned[custNumber];
frameAssigned[custNumber]=0;
noOfReplacements++;
然而,这个算法似乎是不正确的。我不明白为什么。我找到了正确的算法,但我不明白为什么我的算法不起作用。让我们看看下面的页面: 1,2,3,2,3,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 让我们假设这两个页面可以保存在内存中。根据您的算法,当3第一次到达时,2将被替换,因为1的出现次数非常高,这不是最优的 在最优页面替换算法中,页面替换的标准基于页面再次被引用的时间
我建议你把这个问题发表后再看一遍社论