我分享我的逻辑。我需要知道它是否正常。
我创建了一个数组,用于存储每个页面的出现总数。
例如 - 如果页面要求的顺序是 { 1,2,3,1,2}。让我们称之为“ 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++;
但是,这个算法似乎是不正确的。我不明白为什么。我在这里找到了正确的算法,但我不明白为什么我的算法不起作用。