Update SPT page entry to change type from EXECUTABLE to PAGE_FILE to capture mmaps in addition to executables
This commit is contained in:
@@ -194,7 +194,7 @@ try_fetch_page (void *upage, bool write)
|
|||||||
/* Load the page into memory based on the type of data it is expecting. */
|
/* Load the page into memory based on the type of data it is expecting. */
|
||||||
bool success = false;
|
bool success = false;
|
||||||
switch (page->type) {
|
switch (page->type) {
|
||||||
case PAGE_EXECUTABLE:
|
case PAGE_FILE:
|
||||||
success = page_load (page, page->writable);
|
success = page_load (page, page->writable);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -706,7 +706,7 @@ load_segment (struct file *file, off_t ofs, uint8_t *upage,
|
|||||||
|
|
||||||
/* Add the page metadata to the SPT to be lazy loaded later on */
|
/* Add the page metadata to the SPT to be lazy loaded later on */
|
||||||
if (page_insert (file, ofs, upage, page_read_bytes, page_zero_bytes,
|
if (page_insert (file, ofs, upage, page_read_bytes, page_zero_bytes,
|
||||||
writable, PAGE_EXECUTABLE) == NULL)
|
writable, PAGE_FILE) == NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Advance. */
|
/* Advance. */
|
||||||
|
|||||||
@@ -444,7 +444,7 @@ syscall_mmap (int fd, void *addr)
|
|||||||
off_t zero_bytes = PGSIZE - read_bytes;
|
off_t zero_bytes = PGSIZE - read_bytes;
|
||||||
|
|
||||||
if (page_insert (file, ofs, addr + ofs, read_bytes, zero_bytes, true,
|
if (page_insert (file, ofs, addr + ofs, read_bytes, zero_bytes, true,
|
||||||
PAGE_EXECUTABLE) == NULL)
|
PAGE_FILE) == NULL)
|
||||||
return MMAP_FAILURE;
|
return MMAP_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -457,9 +457,11 @@ syscall_mmap (int fd, void *addr)
|
|||||||
return mmap->mapping;
|
return mmap->mapping;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handles the syscall for unmapping a memory mapped file. */
|
/* Handles the syscall for unmapping a memory mapped file.
|
||||||
|
|
||||||
|
Pre: mapping is a valid mapping identifier returned by mmap syscall.*/
|
||||||
static void
|
static void
|
||||||
syscall_munmap (mapid_t mapping UNUSED)
|
syscall_munmap (mapid_t mapping)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,21 +107,3 @@ page_cleanup (struct hash_elem *e, void *aux UNUSED)
|
|||||||
{
|
{
|
||||||
free (hash_entry (e, struct page_entry, elem));
|
free (hash_entry (e, struct page_entry, elem));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Updates the 'owner' thread's page table entry for virtual address 'upage'
|
|
||||||
to have a present bit of 0 and stores the specified swap slot value in the
|
|
||||||
entry for later retrieval from disk. */
|
|
||||||
void
|
|
||||||
page_set_swap (struct thread *owner, void *upage, size_t swap_slot)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Given that the page with user address 'upage' owned by 'owner' is flagged
|
|
||||||
to be in the swap disk via the owner's page table, returns its stored
|
|
||||||
swap slot. Otherwise panics the kernel. */
|
|
||||||
size_t
|
|
||||||
page_get_swap (struct thread *owner, void *upage)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
#include "filesys/off_t.h"
|
#include "filesys/off_t.h"
|
||||||
|
|
||||||
enum page_type {
|
enum page_type {
|
||||||
PAGE_EXECUTABLE,
|
PAGE_FILE,
|
||||||
PAGE_EMPTY
|
PAGE_EMPTY
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user