Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.94 KB | None | 0 0
  1. void*
  2.  ft_entry_evict(enum palloc_flags flags) {
  3.    struct list_elem* e;
  4.    //return NULL;
  5.    lock_acquire(&ft_lock);
  6.  
  7.    for (;;) {
  8.      struct ft_entry* ft_e = list_entry(e, struct ft_entry, elem);
  9.      struct sp_entry* sp_e = ft_e->sp_e;
  10.      if (pagedir_is_accessed(thread_current()->pagedir, sp_e->u_virtual_address)) {
  11.        pagedir_set_accessed(thread_current()->pagedir, sp_e->u_virtual_address, false);
  12.      } else {
  13.        if (pagedir_is_dirty(thread_current()->pagedir, sp_e->u_virtual_address) || sp_e->mem_type == SWAP) {
  14.          sp_e->swap_index = s_out(ft_e->frame);
  15.        }
  16.        sp_e->loaded = false;
  17.        list_remove(&ft_e->elem);
  18.        pagedir_clear_page(thread_current()->pagedir, sp_e->u_virtual_address);
  19.        palloc_free_page(ft_e->frame);
  20.        free(ft_e);
  21.        return palloc_get_page(flags);
  22.      }
  23.      e = list_next(e);
  24.      if(e==list_end(&ft_list)) {
  25.        e= list_begin(&ft_list);
  26.      }
  27.    }
  28.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement