LRU ページ置換をシミュレートする関数を作成しようとしています。私は LRU をよく理解していますが、コーディングに問題があります。次のものが LRU 関数に渡されます。ユーザーは、サイズ 20 の refString という配列に格納されている # の 1 ~ 9 の 20 文字の参照文字列を指定します。ユーザーが入力したフレーム数 (1 ~ 7) は、変数 numFrames に格納されます。最後に、frame と呼ばれるサイズ 7 の配列が渡されます。
これが私が持っているコードです。近い数を取得していますが、完全ではありません。多分誰かが助けることができます!
private static void LRU(int numFrames, int[] refString, int[] frame)
{
int i, j = 0, k, m, flag = 0, count = 0, top = 0;
for (i = 0; i < 20; i++)
{
for (k = 0; k < numFrames; k++)
{
if (frame[k] == refString[i])
{
flag = 1;
break;
}
}
if (j != numFrames && flag != 1)
{
frame[top] = refString[i];
j++;
if (j != numFrames)
{
top++;
}
}
else
{
if (flag != 1)
{
for (k = 0; k < top; k++)
{
frame[k] = frame[k + 1];
}
frame[top] = refString[i];
}
if (flag == 1)
{
for (m = k; m < top; m++)
{
frame[m] = frame[m + 1];
}
frame[top] = refString[i];
}
}
if (flag == 0)
{
count++;
}
else
{
flag = 0;
}
}
Console.WriteLine("\nThe number of page faults with LRU is: " + count);
}