Реализация алгоритма LRU - PullRequest
1 голос
/ 27 сентября 2010

Я пытаюсь реализовать алгоритм LRU, однако я действительно не очень уверен, как изменить FIFO на LRU и манипулировать таблицей страниц в

//The declared parameters are as follows:
 pt_entry pte[MAX_PAGE];        /* page table */
 int mem_size;          /* physical memory size in page frames */
 list free_list_head;       /* free list */ 
 list res_set_head;         /* resident set */
 int total_fault = 0;       /* total number of page faults */
 int total_ref = 0;         /* total number of memory references */


unsigned short find_victim()
 {
unsigned short frame;
list current;

frame = res_set_head->next->frame;  
invalidate(frame);

current = res_set_head->next;
res_set_head->next = current->next;
res_set_head->next->prev = res_set_head;
to_resident_set(current);

return frame;
 }

   //-----------------------------------------------------------------

 void resolve(int address)
  {
unsigned short frame_alloc;
int virt_page;
static int disp_counter = 0;

virt_page = address >> 8;
if (pte[virt_page].valid == 1)
{

    }
else
{

    frame_alloc = find_frame();
    pte[virt_page].valid = 1;
    pte[virt_page].frame = frame_alloc;
    total_fault++;
}
   }

1 Ответ

1 голос
/ 27 сентября 2010

Одним из способов реализации LRU является изменение вашей подпрограммы resolve() для безусловного перемещения pte[virt_page].frame в конец списка резидентных наборов, чтобы оно было последним изгнанным при необходимости нового кадра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...