Added demand paging support
authorAndrew Waterman <waterman@ros-dev.(none)>
Sat, 27 Mar 2010 04:06:31 +0000 (21:06 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:38 +0000 (17:35 -0700)
commit6cdfd489eae603c3222d0719ac2e272be2cbce72
treed517524d96b4b668aad57abb175e7325d6630416
parent17337ff9859d55df73244f4a46bdaa65b6f7fc30
Added demand paging support

mmap'd pages are now faulted in on demand.  Metadata about paged-out
pages are stored in the unused bits of the PTE when the PTE is invalid.
Metadata comes in the form of a pointer to type pfault_info_t.

The main thing to keep in mind is it's often no longer sufficient to
check user PTEs against PTE_P to determine their state.  Use the
macros PAGE_PRESENT, PAGE_PAGED_OUT, and PAGE_UNMAPPED instead;
exactly one of the three must be true at any time.

On any call to mmap with fd != -1, a new struct file is instantiated.
It is reference-counted, once per mmap'd page.  When a page is faulted
in, or when a paged-out page is freed, the file is decref'd.  Allocating
and freeing a pfault_info_t will automatically incref/decref the associated
file, if any.
14 files changed:
kern/arch/i686/env.c
kern/arch/i686/pmap.c
kern/arch/sparc/env.c
kern/arch/sparc/pmap.c
kern/include/frontend.h
kern/include/mm.h
kern/src/env.c
kern/src/frontend.c
kern/src/init.c
kern/src/manager.c
kern/src/mm.c
kern/src/pmap.c
kern/src/process.c
kern/src/syscall.c