Я использую алгоритм подкачки MRU (последний использовавшийся) и предположим, что у нас есть строка: 3 5 2 2 0 4 6 4 4 1 3 4 5 0 4 5 6 2 0 0 1
Вот код ниже:
//int * A = array, int N = number of elements, int PAGE_TABLE_SIZE = # page frames entered
int MRU(int * A, int N, int PAGE_TABLE_SIZE)
{
int i = 0, j = 0 , k = 0, page_faults = 0;
//indexes
int previous_num = 0 , next_num = 1;
//temp array
int temp[PAGE_TABLE_SIZE];
for(; i < PAGE_TABLE_SIZE; i++)
temp[i] = -1;
for(i = 0; i < N; i++)
{
j = 0;
for(k = 0; k < PAGE_TABLE_SIZE; k++)
{
if(A[i] == temp[k])
{
j++;
page_faults -= 1;
}
}
page_faults++;
if((page_faults <= PAGE_TABLE_SIZE) && (j == 0))
{
temp[i] = A[i];
}
else if(j == 0)
{
//if a new page fault then:
//correctly places the new page item
//onto its correct place in temp array
temp[previous_num] = A[i];
page_faults++;
}
if(next_num != N+1 && previous_num != N-1)
{
previous_num++;
next_num++;
printf("PREV = %d & NEXT = %d\n",A[previous_num],A[next_num]);
}
}
return page_faults;
}
Мой вопрос: я пытаюсь получить ошибки страницы, которые возникают, но я не думаю, что мои логики c правильны в отношении этого фрагмента кода:
page_faults++;
if((page_faults <= PAGE_TABLE_SIZE) && (j == 0))
{
temp[i] = A[i];
}
else if(j == 0)
{
//if a new page fault then:
//correctly places the new page item
//onto its correct place in temp array
temp[previous_num] = A[i];
page_faults++;
}
Если число новое и его нет в временном массиве страницы, то оно должно поменяться с тем, которое мы поменяли местами в последнее время ... Спасибо за помощь (: