0

3 つのページ置換アルゴリズムを実行するプログラムを作成しています。FIFO、LRU、および OPT ここでは、「デマンド」ページングを想定しています。

FIFO があり、LRU が終了しました。しかし、私はOPTに取り組む方法がわかりません。読み込んでいるファイルを要求し、行ごとに pid とクラス内の参照番号に解析します。フレームサイズもおねがいします。

ファイルは次のように構成されています。

1 45  // 1= pid,  45 = ref
1 46
1 45

LRU の場合、2 番目の配列を使用して、最近使用されていないスロットをカウンターで追跡しました。

optのために何をすべきかわかりません。解析中のファイルを先読みする必要がありますか? 2 番目のアレイが必要ですか?

ファイルを1行ずつ解析し、次のようにクラスに追加しています。これは私が他の 2 つのアルゴリズムに対して行ったことであり、ファイルを 1 行ずつ解析し、フレーム サイズを入力する必要があります。ファイルを配列に保存し、私が推測する配列を処理できます。

class pagetable
{

public:
int pid;
int ref;
int faults;
pagetable();
};

そして main() で

ifstream inputStream;
cout << "\n\n\t*********** Virtual Memory Management Simulator ***********\n";
cout << "\n";


while(!done){
 pagetable* page = new pagetable[frames];

getFileName(inputStream);//asks for input filename until it is valid
   cout << "\nEnter in the number of frames:";
cin >> frames;
   faults = runsimLFU2(inputStream, page, frames );

int runsimLFU2(ifstream &inputStream, pagetable* page, int frames ){

int i =0;
int j=0;
int pid =0;
int ref = 0;
int index = 0;
int count = 0;
int pagefaults = 0;
int lowest=0;

int counter = 1;

int * LRU;
LRU = new int[frames];


while(1){

  inputStream >> pid;  //parse the file line by line
  inputStream >> ref;
      page[index].pid = pid;   //lets add it... when needed
  page[index].ref = ref;

ファイルを解析していてキャッシュがいっぱいで、ファイル内の番号がキャッシュにない場合、どうすればよいかわかりません。コーディング用語で説明できますか。

配列でコーディングする際にこれを行う方法は何ですか? 2 番目の配列にカウンターを保持しますか? 誰かがこれを行う最も簡単な方法を説明できますか?

ファイルの長さは数百行になる可能性があることに注意してください。

4

2 に答える 2

0

「最適」の意味がわかりません。最も最適な置換アルゴリズムは全知であり、将来のページがどの順序で参照されるかを事前に知っています。

「デマンド」ページングを想定している場合は、将来最も遠くから参照されるページを置換対象として選択します。

また、全知の予測ページングも想定している場合は、おそらくより複雑になります。単純なルールがあるかどうかはわかりません。

全知を前提としない場合、「最適」はおそらくページング統計によって決定され、統計的に将来参照される可能性が最も低いページを置換用に選択します。

于 2012-11-19T02:31:46.813 に答える