vm_address_space --> vm_translation_map --> vm_virtual_map |--> vm_region ---> vm_cache_ref ---> vm_cache ---> vm_store | | | |--> vm_page | | | |--> vm_page | | | |--> vm_page | | | ~ | |--> vm_region ---> vm_cache_ref ---> vm_cache ---> vm_store | ^ | | | |--> vm_page | | | | | |--> vm_page | | | | | ~ | | |--> vm_region ---> vm_cache_ref -----/ | | | | |--> vm_region ---> vm_cache_ref ---> vm_cache ---> vm_store | ^ | | | |--> vm_page | | | | | |--> vm_page | | | | | ~ | | | \-----------\ | | | | |--> vm_region ---> vm_cache_ref ---> vm_cache ---/ <<= this is a private mapping of an existing vm_store | | | |--> vm_page | | | |--> vm_page | | | ~ | | ~ NOTES: 1 vm_address_space per process 1 vm_translation_map per vm_address_space. vm_translation_map is the equivalent of mach's pmap many vm_regions per vm_address_space, sorted by base address 1 vm_cache_ref per region a vm_cache_ref can point to a single vm_cache a vm_cache can be pointed to by many vm_cache_refs 1 vm_store per vm_cache many vm_pages per vm_cache a vm_page can only be in at most one vm_cache (or none at all if not in use) most of these structures can be found at http://newos.org/WebSVN/filedetails.php?repname=NewOS&path=%2Fnewos%2Finclude%2Fkernel%2Fvm.h&rev=0&sc=0