From e11b2ef0c606ab516a4344aeea1dbba22cb1fe5d Mon Sep 17 00:00:00 2001 From: manuel Date: Thu, 21 Jun 2012 16:47:23 +0200 Subject: initial implementation of memory mapped files --- userprog/process.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'userprog/process.c') diff --git a/userprog/process.c b/userprog/process.c index 2771e76..f399038 100644 --- a/userprog/process.c +++ b/userprog/process.c @@ -130,6 +130,8 @@ start_process (void *aux) thread->process = process; page_table_init (&thread->page_table); + if (!mmap_table_init (&process->mmap_table)) + goto signal; /* Initialize interrupt frame and load executable. */ memset (&if_, 0, sizeof if_); @@ -149,6 +151,14 @@ start_process (void *aux) /* If process startup failed, quit. */ if (thread->process == NULL) { if (process != NULL) { + //TODO: free mmap table + page table? + + /* close/free memory mapped files */ + //mmap_table_free (&process->mmap_table); + + /* free page table */ + //page_table_free (&thread->page_table); + if (process->fd_table.fds != NULL) palloc_free_page (process->fd_table.fds); palloc_free_page (process); @@ -232,6 +242,9 @@ process_exit (void) lock_release (&filesys_lock); } + /* close/free memory mapped files */ + mmap_table_free (&proc->mmap_table); + int fd; for (fd = 2; fd <= proc->fd_table.fd_max; fd++) { process_close_file (fd); @@ -254,6 +267,7 @@ process_exit (void) pagedir_destroy (pd); } + /* free page table */ page_table_free (&thread->page_table); /* Destroy the process structure if the parent is not alive @@ -560,8 +574,8 @@ load_segment (struct file *file, off_t ofs, uint8_t *upage, size_t page_zero_bytes = PGSIZE - page_read_bytes; /* add segment to page table for on demand loading */ - if (!page_table_insert_segment (file, ofs, upage, page_read_bytes, - page_zero_bytes, writable)) + if (!page_table_insert_segment (&thread_current ()->page_table, file, ofs, + upage, page_read_bytes, writable)) return false; /* Advance. */ -- cgit v1.2.3