Update load_segment to load only the metadata of the pages to the SPT, w/ G

This commit is contained in:
sBubshait
2024-11-28 18:35:49 +00:00
parent 97e6e0fb1e
commit df20e0fdfe

View File

@@ -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;