tags:

views:

59

answers:

1

I am trying to implement the LRU alogorithm, however I am really not so sure how to change the FIFO to LRU and to manipulte the page table in the

//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  A: 

One way to implement LRU is to change your resolve() routine to unconditionally move pte[virt_page].frame to the bottom of the resident set list, so that it will be last to be evicted when a new frame is needed.

caf