From e88a8c4c379d721e9901752d440a05295087da11 Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 19 Jun 2012 01:44:56 +0200 Subject: implement page table and use it for lazy loading of segments --- vm/page.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 vm/page.h (limited to 'vm/page.h') diff --git a/vm/page.h b/vm/page.h new file mode 100644 index 0000000..29159fb --- /dev/null +++ b/vm/page.h @@ -0,0 +1,41 @@ +#ifndef VM_PAGE_H +#define VM_PAGE_H + +#include +#include "hash.h" +#include "filesys/off_t.h" + +/* supplemental page table entry */ +struct page_table_entry +{ + void *uvaddr; + bool loaded; + enum + { + PAGE_SEGMENT, + PAGE_MEMORY_MAPPED_FILE, + } type; + + union + { + struct segment + { + struct file *file; + off_t ofs; + uint32_t read_bytes; + uint32_t zero_bytes; + bool writable; + } segment; + }; + + struct hash_elem elem; +}; + +void page_table_init (struct hash *ht); +void page_table_free (struct hash *ht); +struct page_table_entry *page_table_fetch (struct hash *ht, void *uvaddr); +bool page_table_insert_segment (struct file *file, off_t ofs, uint8_t *upage, + uint32_t read_bytes, uint32_t zero_bytes, bool writable); +bool page_load (struct page_table_entry *pte); + +#endif -- cgit v1.2.3