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 番目の配列にカウンターを保持しますか? 誰かがこれを行う最も簡単な方法を説明できますか?
ファイルの長さは数百行になる可能性があることに注意してください。