Compare commits

...

2 Commits

Author SHA1 Message Date
Themis Demetriades
0084d12fb1 fix: synchronise destruction of page directories with frame table 2024-12-06 17:30:46 +00:00
Themis Demetriades
6943c77630 fix: re-enable shareable pages 2024-12-06 17:25:50 +00:00
3 changed files with 12 additions and 3 deletions

View File

@@ -6,6 +6,7 @@
#include "threads/init.h"
#include "threads/pte.h"
#include "threads/palloc.h"
#include "threads/synch.h"
#include "vm/frame.h"
#include "vm/page.h"
@@ -35,6 +36,7 @@ pagedir_destroy (uint32_t *pd)
return;
ASSERT (pd != init_page_dir);
lock_acquire (&lru_lock);
for (pde = pd; pde < pd + pd_no (PHYS_BASE); pde++)
if (*pde & PTE_P)
{
@@ -53,6 +55,7 @@ pagedir_destroy (uint32_t *pd)
palloc_free_page (pt);
}
palloc_free_page (pd);
lock_release (&lru_lock);
}
/* Returns the address of the page table entry for virtual

View File

@@ -209,8 +209,13 @@ frame_free (void *frame)
"but this address is not allocated!\n",
frame);
bool lock_held = lock_held_by_current_thread (&lru_lock);
free_owners (&frame_metadata->owners);
lock_acquire (&lru_lock);
if (!lock_held)
lock_acquire (&lru_lock);
hash_delete (&frame_table, &frame_metadata->hash_elem);
list_remove (&frame_metadata->list_elem);
@@ -224,7 +229,9 @@ frame_free (void *frame)
else
next_victim = lru_next (next_victim);
}
lock_release (&lru_lock);
if (!lock_held)
lock_release (&lru_lock);
free (frame_metadata);
palloc_free_page (frame);

View File

@@ -183,7 +183,6 @@ page_load_file (struct page_entry *page)
panics as this should not happen if eviction is working correctly. */
struct thread *t = thread_current ();
bool shareable = !page->writable && file_compare (page->file, t->exec_file);
shareable = false;
if (shareable)
{
lock_acquire (&shared_file_pages_lock);