From df20e0fdfe7b942bfef13e1d062e4e2b222c2204 Mon Sep 17 00:00:00 2001 From: sBubshait Date: Thu, 28 Nov 2024 18:35:49 +0000 Subject: [PATCH] Update load_segment to load only the metadata of the pages to the SPT, w/ G --- src/userprog/process.c | 37 ++++--------------------------------- 1 file changed, 4 insertions(+), 33 deletions(-) diff --git a/src/userprog/process.c b/src/userprog/process.c index acc711d..b3e5ce3 100644 --- a/src/userprog/process.c +++ b/src/userprog/process.c @@ -705,40 +705,11 @@ load_segment (struct file *file, off_t ofs, uint8_t *upage, and zero the final PAGE_ZERO_BYTES bytes. */ size_t page_read_bytes = read_bytes < PGSIZE ? read_bytes : PGSIZE; size_t page_zero_bytes = PGSIZE - page_read_bytes; - - /* Check if virtual page already allocated */ - struct thread *t = thread_current (); - uint8_t *kpage = pagedir_get_page (t->pagedir, upage); - - if (kpage == NULL){ - - /* Get a new page of memory. */ - kpage = get_usr_kpage (0, upage); - if (kpage == NULL){ - return false; - } - - /* Add the page to the process's address space. */ - if (!install_page (upage, kpage, writable)) - { - free_usr_kpage (kpage); - return false; - } - - } else { - - /* Check if writable flag for the page should be updated */ - if(writable && !pagedir_is_writable(t->pagedir, upage)){ - pagedir_set_writable(t->pagedir, upage, writable); - } - - } - /* Load data into the page. */ - if (file_read (file, kpage, page_read_bytes) != (int) page_read_bytes){ - return false; - } - memset (kpage + page_read_bytes, 0, page_zero_bytes); + /* Add the page to the SPT */ + if (page_insert (file, ofs, upage, read_bytes, zero_bytes, writable, + PAGE_EXECUTABLE) == NULL) + return false; /* Advance. */ read_bytes -= page_read_bytes;