2013-11-22 3 views
1

Я пишу программу для поиска ошибок страницы с использованием FIFO в C#. Пользователь либо предоставляет ссылку на 20 символов, либо генерируется случайная. Пользователь также вводит количество кадров.Проблемы с алгоритмом замены страницы FIFO

Итак, я передаю массив из 20 однозначных чисел, массив кадров и # кадров в мою функцию FIFO. По какой-то причине мой номер выключен, и я не уверен, что я делаю неправильно. Я использую справочную строку 1 2 3 4 2 1 5 6 2 1 2 3 7 6 3 2 1 2 3 6 с 4 кадрами для проверки, и мне кажется, что я получаю 56, когда мне нужно получить 14 ошибок. Ниже приведена моя функция FIFO.

 private static void FIFO(int numFrames, int []refString, int []frame) 
    { 
     int i, j = 0, k, fault = 0, flag = 0; 

     for (i = 0; i < 20; i++) 
     { 
      for (k = 0; k < numFrames; k++) 
      { 
       if (frame[k] == refString[i]) 
        flag = 1; 
      } 

      if (flag == 0) 
      { 
       frame[j] = refString[i]; 
       j++; 

       for (k = 0; k < numFrames; k++) 
       { 
        fault++; 
       } 
      } 

      else 
      { 
       flag = 0; 
      } 

      if (j == numFrames) 
      { 
       j = 0; 
      } 

     } 
     Console.WriteLine("\nThe number of page faults with FIFO is: " + fault); 
    } 
+0

что ваш массив кадров? – Noctis

+0

Просто массив int размером 7 (7 максимальных разрешенных кадров) Он называется «frame» – user3015999

ответ

1

Причина в том, этот бит:

for (k = 0; k < numFrames; k++) 
{ 
    fault++; 
} 

вы поднимаете 4 ошибки для каждого промаха кэша (следовательно, вы 56 = 14 * 4)

+0

Спасибо! Я удалил цикл и просто использовал ошибку ++ и, похоже, работает! – user3015999

+0

Тогда не стесняйтесь ответить на этот вопрос и пометить его как ответ :) – Noctis

+1

У меня недостаточно репутации, чтобы поддержать вас или меня! Кроме того, если кто-нибудь знает что-нибудь о LRU, у меня тоже есть проблемы с этим. http://stackoverflow.com/questions/20136696/lru-page-replacement-algorithm-c-sharp – user3015999

Смежные вопросы