2010-09-27 124 views
1

我想实现LRU算法,但我真的不是很确定如何将FIFO改变LRU和操纵页表来实现LRU是实现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

的一种方式将您的resolve()例程更改为无条件地将​​移动到常驻套餐列表的底部,以便在需要新框架时最后将其驱逐。