实现LRU算法

时间:2010-09-27 06:03:58

标签: c

我正在尝试实现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 个答案:

答案 0 :(得分:1)

实现LRU的一种方法是将resolve()例程更改为无条件地将pte[virt_page].frame移动到常驻集列表的底部,以便在需要新帧时将其最后被驱逐