Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void*
- ft_entry_evict(enum palloc_flags flags) {
- struct list_elem* e;
- //return NULL;
- lock_acquire(&ft_lock);
- for (;;) {
- struct ft_entry* ft_e = list_entry(e, struct ft_entry, elem);
- struct sp_entry* sp_e = ft_e->sp_e;
- if (pagedir_is_accessed(thread_current()->pagedir, sp_e->u_virtual_address)) {
- pagedir_set_accessed(thread_current()->pagedir, sp_e->u_virtual_address, false);
- } else {
- if (pagedir_is_dirty(thread_current()->pagedir, sp_e->u_virtual_address) || sp_e->mem_type == SWAP) {
- sp_e->swap_index = s_out(ft_e->frame);
- }
- sp_e->loaded = false;
- list_remove(&ft_e->elem);
- pagedir_clear_page(thread_current()->pagedir, sp_e->u_virtual_address);
- palloc_free_page(ft_e->frame);
- free(ft_e);
- return palloc_get_page(flags);
- }
- e = list_next(e);
- if(e==list_end(&ft_list)) {
- e= list_begin(&ft_list);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement