Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
VM_MAP(9)		 BSD Kernel Developer's	Manual		     VM_MAP(9)

     vm_map -- virtual address space portion of	virtual	memory subsystem

     #include <sys/param.h>
     #include <vm/vm.h>
     #include <vm/vm_map.h>

     The vm_map	subsystem is used to manage virtual address spaces.  This sec-
     tion describes the	main data structures used within the code.

     The struct	vm_map is a generic representation of an address space.	 This
     address space may belong to a user	process	or the kernel.	The kernel ac-
     tually uses several maps, which are maintained as subordinate maps, cre-
     ated using	the vm_map_submap(9) function.

	   struct vm_map {
		   struct vm_map_entry header;
		   struct sx lock;
		   struct mtx system_mtx;
		   int nentries;
		   vm_size_t size;
		   u_int timestamp;
		   u_char needs_wakeup;
		   u_char system_map;
		   vm_flags_t flags;
		   vm_map_entry_t root;
		   pmap_t pmap;
		   int busy;

     The fields	of struct vm_map are as	follows:

     header	   Head	node of	a circular, doubly linked list of struct
		   vm_map_entry	objects.  Each object defines a	particular re-
		   gion	within this map's address space.

     lock	   Used	to serialize access to the structure.

     system_mtx	   A mutex which is used if the	map is a system	map.

     nentries	   A count of the members in use within	the circular map entry

     size	   Specifies the size of the virtual address space.

     timestamp	   Used	to determine if	the map	has changed since its last ac-

     needs_wakeup  Indicates if	a thread is waiting for	an allocation within
		   the map.  Used only by system maps.

     system_map	   Set to TRUE to indicate that	map is a system	map; other-
		   wise, it belongs to a user process.

     flags	   Map flags, described	below.

     root	   Root	node of	a binary search	tree used for fast lookup of
		   map entries.

     pmap	   Pointer to the underlying physical map with which this vir-
		   tual	map is associated.

     busy	   Map busy counter, prevents forks.

     Possible map flags:

     MAP_WIREFUTURE	   Wire	all future pages in this map.

     MAP_BUSY_WAKEUP	   There are waiters for the map busy status.

     The following flags can be	passed to vm_map_find(9) and vm_map_insert(9)
     to	specify	the copy-on-write properties of	regions	within the map:

     MAP_COPY_ON_WRITE	   The mapping is copy-on-write.

     MAP_NOFAULT	   The mapping should not generate page	faults.

     MAP_PREFAULT	   The mapping should be prefaulted into physical mem-

     MAP_PREFAULT_PARTIAL  The mapping should be partially prefaulted into
			   physical memory.

     MAP_DISABLE_SYNCER	   Do not periodically flush dirty pages; only flush
			   them	when absolutely	necessary.

     MAP_DISABLE_COREDUMP  Do not include the mapping in a core	dump.

     MAP_PREFAULT_MADVISE  Specify that	the request is from a user process
			   calling madvise(2).

     MAP_ACC_CHARGED	   Region is already charged to	the requestor by some

     MAP_ACC_NO_CHARGE	   Do not charge for allocated region.

     The struct	vm_map_entry is	a generic representation of a region.  The re-
     gion managed by each entry	is associated with a union vm_map_object, de-
     scribed below.

	   struct vm_map_entry {
		   struct vm_map_entry *prev;
		   struct vm_map_entry *next;
		   struct vm_map_entry *left;
		   struct vm_map_entry *right;
		   vm_offset_t start;
		   vm_offset_t end;
		   vm_offset_t avail_ssize;
		   vm_size_t adj_free;
		   vm_size_t max_free;
		   union vm_map_object object;
		   vm_ooffset_t	offset;
		   vm_eflags_t eflags;
		   /* Only in task maps: */
		   vm_prot_t protection;
		   vm_prot_t max_protection;
		   vm_inherit_t	inheritance;
		   int wired_count;
		   vm_pindex_t lastr;

     The fields	of struct vm_map_entry are as follows:

     prev	  Pointer to the previous node in a doubly-linked, circular

     next	  Pointer to the next node in a	doubly-linked, circular	list.

     left	  Pointer to the left node in a	binary search tree.

     right	  Pointer to the right node in a binary	search tree.

     start	  Lower	address	bound of this entry's region.

     end	  Upper	address	bound of this entry's region.

     avail_ssize  If the entry is for a	process	stack, specifies how much the
		  entry	can grow.

     adj_free	  The amount of	free, unmapped address space adjacent to and
		  immediately following	this map entry.

     max_free	  The maximum amount of	contiguous free	space in this map en-
		  try's	subtree.

     object	  Pointer to the struct	vm_map_object with which this entry is

     offset	  Offset within	the object which is mapped from	start onwards.

     eflags	  Flags	applied	to this	entry, described below.

     The following five	members	are only valid for entries forming part	of a
     user process's address space:

     protection	     Memory protection bits applied to this region.

     max_protection  Mask for the memory protection bits which may be actually
		     be	applied	to this	region.

     inheritance     Contains flags which specify how this entry should	be
		     treated during fork processing.

     wired_count     Count of how many times this entry	has been wired into
		     physical memory.

     lastr	     Contains the address of the last read which caused	a page

     The following flags may be	applied	to each	entry, by specifying them as a
     mask within the eflags member:

     MAP_ENTRY_NOSYNC		 The system should not flush the data associ-
				 ated with this	map periodically, but only
				 when it needs to.

     MAP_ENTRY_IS_SUB_MAP	 If set, then the object member	specifies a
				 subordinate map.

     MAP_ENTRY_COW		 Indicate that this is a copy-on-write region.

     MAP_ENTRY_NEEDS_COPY	 Indicate that a copy-on-write region needs to
				 be copied.

     MAP_ENTRY_NOFAULT		 Specifies that	accesses within	this region
				 should	never cause a page fault.  If a	page
				 fault occurs within this region, the system
				 will panic.

     MAP_ENTRY_USER_WIRED	 Indicate that this region was wired on	behalf
				 of a user process.

     MAP_ENTRY_BEHAV_NORMAL	 The system should use the default paging be-
				 haviour for this region.

     MAP_ENTRY_BEHAV_SEQUENTIAL	 The system should depress the priority	of
				 pages immediately preceding each page within
				 this region when faulted in.

     MAP_ENTRY_BEHAV_RANDOM	 Is a hint that	pages within this region will
				 be accessed randomly, and that	prefetching is
				 likely	not advantageous.

     MAP_ENTRY_IN_TRANSITION	 Indicate that wiring or unwiring of an	entry
				 is in progress, and that other	kernel threads
				 should	not attempt to modify fields in	the

     MAP_ENTRY_NEEDS_WAKEUP	 Indicate that there are kernel	threads	wait-
				 ing for this region to	become available.

     MAP_ENTRY_NOCOREDUMP	 The region should not be included in a	core

     The inheritance member has	type vm_inherit_t.  This governs the inheri-
     tance behaviour for a map entry during fork processing.  The following
     values are	defined	for vm_inherit_t:

     VM_INHERIT_SHARE	 The object associated with the	entry should be	cloned
			 and shared with the new map.  A new struct vm_object
			 will be created if necessary.

     VM_INHERIT_COPY	 The object associated with the	entry should be	copied
			 to the	new map.

     VM_INHERIT_NONE	 The entry should not be copied	to the new map.

     VM_INHERIT_DEFAULT	 Specifies the default behaviour, VM_INHERIT_COPY.

     The union vm_map_object is	used to	specify	the structure which a struct
     vm_map_entry is associated	with.

     The fields	of union vm_map_object are as follows:

	   union vm_map_object {
		   struct vm_object *vm_object;
		   struct vm_map *sub_map;

     Normally, the sub_map member is only used by system maps to indicate that
     a memory range is managed by a subordinate	system map.  Within a user
     process map, each struct vm_map_entry is backed by	a struct vm_object.

     pmap(9), vm_map_check_protection(9), vm_map_delete(9),
     vm_map_entry_resize_free(9), vm_map_find(9), vm_map_findspace(9),
     vm_map_inherit(9),	vm_map_init(9),	vm_map_insert(9), vm_map_lock(9),
     vm_map_lookup(9), vm_map_madvise(9), vm_map_max(9), vm_map_min(9),
     vm_map_pmap(9), vm_map_protect(9),	vm_map_remove(9),
     vm_map_simplify_entry(9), vm_map_stack(9),	vm_map_submap(9),
     vm_map_sync(9), vm_map_wire(9)

     This manual page was written by Bruce M Simpson <>.

BSD				 July 3, 2018				   BSD


Want to link to this manual page? Use this URL:

home | help