Implement VM #63

Merged
td1223 merged 94 commits from vm/merged/themis into master 2024-12-06 05:07:14 +00:00
146 changed files with 15383 additions and 182 deletions
Showing only changes of commit a2f46f3b72 - Show all commits

View File

@@ -397,6 +397,8 @@ thread_exit (void)
process_exit (); process_exit ();
#endif #endif
mmap_destroy ();
/* Remove thread from all threads list, set our status to dying, /* Remove thread from all threads list, set our status to dying,
and schedule another process. That process will destroy us and schedule another process. That process will destroy us
when it calls thread_schedule_tail(). */ when it calls thread_schedule_tail(). */

View File

@@ -33,3 +33,21 @@ mmap_less (const struct hash_elem *a_, const struct hash_elem *b_,
return a->mapping < b->mapping; return a->mapping < b->mapping;
} }
/* Cleans up the mmap table for the current thread. Frees the memory allocated
for the mmap entry. */
static void
mmap_cleanup (struct hash_elem *e, void *aux UNUSED)
{
struct mmap_entry *mmap = hash_entry (e, struct mmap_entry, elem);
file_close (mmap->file);
free (mmap);
}
/* Destroys the mmap table for the current thread. Frees all the memory
allocated for the mmap entries. */
void
mmap_destroy (void)
{
hash_destroy (&thread_current ()->mmap_files, mmap_cleanup);
}

View File

@@ -3,6 +3,7 @@
#include <hash.h> #include <hash.h>
#include "threads/thread.h" #include "threads/thread.h"
#include "filesys/file.h"
/* A mapping identifier type. */ /* A mapping identifier type. */
typedef unsigned mapid_t; typedef unsigned mapid_t;
@@ -17,5 +18,6 @@ struct mmap_entry {
}; };
bool mmap_init (void); bool mmap_init (void);
void mmap_destroy (void);
#endif /* vm/mmap.h */ #endif /* vm/mmap.h */