Combine every component of VM together #62

Merged
td1223 merged 6 commits from vm/shared-ro-executables/gleb into vm/merged/themis 2024-12-06 04:15:21 +00:00
8 changed files with 365 additions and 64 deletions
Showing only changes of commit 833c1b0520 - Show all commits

View File

@@ -71,17 +71,19 @@ static void page_set_swap (struct thread *owner, uint32_t *pte,
bool
page_insert_swapped (void *upage, void *kpage, struct list *owners)
{
struct file *exec_file = NULL;
struct list_elem *e;
for (e = list_begin (owners); e != list_end (owners); e = list_next (e))
{
struct thread *owner = list_entry (e, struct frame_owner, elem)->owner;
uint32_t *pte = lookup_page (owner->pagedir, upage, false);
if (page_is_shared_pte (pte))
if (exec_file != NULL || page_is_shared_pte (pte))
{
ASSERT (list_size (owners) == 1);
ASSERT (page_is_shared_pte (pte));
pagedir_clear_page (owner->pagedir, upage);
size_t swap_slot = swap_out (kpage);
return true;
exec_file = owner->exec_file;
ASSERT (exec_file != NULL);
continue;
}
ASSERT (list_size (owners) == 1);
@@ -112,6 +114,14 @@ page_insert_swapped (void *upage, void *kpage, struct list *owners)
lock_release (&page->lock);
}
if (exec_file != NULL)
{
lock_acquire (&shared_file_pages_lock);
struct shared_file_page *sfp = shared_file_page_get (exec_file, upage);
sfp->frame = NULL;
sfp->swap_slot = swap_out (kpage);
lock_release (&shared_file_pages_lock);
}
return true;
}