0

我遇到的问题是它总是错过,而不是替换一个元素,而是用它拉入的整数填充每一帧。我很难弄清楚从这里去哪里。“requests.txt”是一个随机整数文件,示例输出应如下所示:

2: page hit, page 2 is in frame 8    
45: page hit, page 45 is in frame 2

但我的看起来像:

99: page miss, page 99replaces page 0in frame 0
99: page miss, page 99replaces page 0in frame 1
99: page miss, page 99replaces page 0in frame 2
99: page miss, page 99replaces page 0in frame 3
99: page miss, page 99replaces page 0in frame 4
99: page miss, page 99replaces page 0in frame 5
99: page miss, page 99replaces page 0in frame 6
99: page miss, page 99replaces page 0in frame 7
99: page miss, page 99replaces page 0in frame 8
99: page miss, page 99replaces page 0in frame -1
4: page miss, page 4replaces page 0in frame 0
4: page miss, page 4replaces page 0in frame 1
4: page miss, page 4replaces page 0in frame 2
4: page miss, page 4replaces page 0in frame 3
4: page miss, page 4replaces page 0in frame 4
4: page miss, page 4replaces page 0in frame 5
4: page miss, page 4replaces page 0in frame 6
4: page miss, page 4replaces page 0in frame 7
4: page miss, page 4replaces page 0in frame 8

代码:

#include <iostream>
#include <fstream>
#include <iomanip>

using namespace std;
void search(int input, int  P_list[], bool  R_bit[], int & victim);
int main()
{
//Basic initilization
int victim = 0;
bool R_bit [10];
int P_list [10];

 for(int i = 0; i <10;  i++)
 {
    //Sets one array to all false
    R_bit [i] = false;
    //Sets every integer in the other array to -1
    P_list [i] = -1;
 }

 int input;


 ifstream inFile;

 //Opens up the text file "requests.txt"
 inFile.open("requests.txt");
 //If It is not able to open the file
 if (!inFile)
 {
     //Display error message
    cout << "Unable to open specified file";
    //Exit with an error(1)
      exit(1);
 }

 while(inFile >> input )
 {
    if(input < 0)
    {
        cout << "invalid input ";
        exit(1);
    }
    else if(input > 99) 
    {
        cout << "invalid input ";
        exit(1);
    }
  //search array 2, replace and end
    search(input, P_list, R_bit, victim);



}       return 0;
}



void search(int input, int  P_list[], bool  R_bit[], int &victim)
{

//local var only unless you pass them  input is the only thing you passed
for(int i = 0; i <10; i++)
{

    if(input == P_list [i])
    {//Output if it is a hit

        cout << input << ": page hit, " << input << "is in frame " << i << endl;
        R_bit [i] = 1;

        return;
    }
    int oldpage;
    //Sets up a bool to end the while loop
    bool flag = true;
    //While true
    while(flag){
    //looks for the first 0 in the R-Bit array
    if (R_bit [victim] == 0)
    {
        //If it is zero
        flag = false;
        //Recording previous page for output 
        oldpage = R_bit [victim];
        //Replaces with input 
        R_bit [victim] = input;

        victim = victim + 1;


    }
    else
    {   //Makes the R-Bit zero
        R_bit [victim] = 0;
        //Increments, makes it zero
        ++victim;

    }
        //If the victim is going to go out of bounds
    if(victim > 9)
    {
        //Set to zero 
        victim = 0;
    }
    }

    //output if it misses and the frame it is in
    cout << input << ": page miss, page " << input << " replaces page " << oldpage << " in frame " << (victim - 1) << endl;

}

}

4

2 回答 2

0

您将 R_bit (最近的标志)与 P_list (保存的数据)混合在一起

    //Recording previous page for output 
    oldpage = R_bit [victim];
    //Replaces with input 
    R_bit [victim] = input;

应该

    //Recording previous page for output 
    oldpage = P_list [victim];
    //Replaces with input 
    P_list [victim] = input;
于 2012-11-08T03:50:23.080 回答
0

我认为,在您的搜索功能中,您从未设置 P_list[someIndex] 值。

我相信,这就是正在发生的事情:

  1. 你打电话搜索第一个号码
  2. P_list 将没有它,因为您已将所有内容初始化为 -1
  3. 所以你决定你将替换一些东西,但你永远不会将当前整数添加到 P_list

希望你能从这里开始。

于 2012-11-08T03:51:12.707 回答