LRUページ置換を実装しようとしています。FIFOアルゴリズムを動作させることができました。しかし、最近使用されていないものを追跡する方法がわかりませんか?
ファイルを読み込んでいます。その構造化された最初の数はpid(1)で、2番目の数はref(45)などです。
1 45
1 46
1 45
1 44
2 76
2 75
2 77
2 77
したがって、私はクラス配列を使用しており、ファイルを1行ずつ解析し、配列にない場合は、そのインデックスにpidとrefを配置します。アレイがいっぱいの場合は、最初の広告に戻って最初からやり直してください。
class pagetable
{
public:
int pid;
int ref;
int faults;
pagetable();
};
pagetable* page = new pagetable[frames];
フレーム数の入力を求めています。ファイル名の入力を求めて保存しています
ifstream inputStream;
次に、LFU関数を呼び出して、各pidとrefを取得して確認します。
int runsimLFU(ifstream &inputStream, pagetable* page, int frames ){
int i =0;
int j=0;
bool flag = false;
int cnt=0;
int index = 0;
int value = 0;
while(1){
inputStream >> pid;
inputStream >> ref;
page[count].pid = pid;
page[count].ref = ref;
pagefaults++;
このようなもので、ファイルの各行を取得し続けることができます。
これは私が配列を検索している方法です
bool findinarray(pagetable* page, int frames, int pid, int ref)
{
for(int i=0; i < frames+1; i++) {
if(page[i].pid == pid && page[i].ref == ref)
{
return true;
}
}
return false;
}
2つの質問
1)LRUを追跡する方法がわかりません。私は2番目の配列とカウンター変数を想像しますが、それは私が何をすべきかを見ることができる限りです。
2)LRUを知ったら、着信pidが配列にない場合、インデックスLRU番号で配列に詰め込みますか?
ありがとうございました