vm_map(9)

NAME

vm_map - virtual address space portion of virtual memory
subsystem

SYNOPSIS

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

DESCRIPTION

The vm_map subsystem is used to manage virtual address
spaces. This section 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
actually uses several maps, which are maintained as subordi
nate maps,
created 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;
#define min_offset header.start
#define max_offset header.end
};
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
region 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 sys
tem map.
nentries A count of the members in use within the
circular map
entry list.
size Specifies the size of the virtual address
space.
timestamp Used to determine if the map has changed
since its last
access.
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 sys
tem map; oth
erwise, 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
virtual map is associated.
min_offset The minimum vm_offset_t in this map. Pro
grams should
never use header.start or header.end di
rectly, use
min_offset and max_offset instead.
max_offset The maximum vm_offset_t in this map.
There is one possible map flag:
MAP_WIREFUTURE Wire all future pages in this map.
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
memory.
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 neces
sary.
MAP_DISABLE_COREDUMP Do not include the mapping in a
core dump.
MAP_PREFAULT_MADVISE Specify that the request from a
user process
calling madvise(2).
The struct vm_map_entry is a generic representation of a re
gion. The
region managed by each entry is associated with a union
vm_map_object,
described 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, circu
lar list.
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, speci
fies 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
entry's subtree.
object Pointer to the struct vm_map_object with
which this
entry is associated.
offset Offset within the object which is mapped
from start
onwards.
eflags Flags applied to this entry, described be
low.
The following five members are only valid for entries form
ing part of a
user process's address space:
protection Memory protection bits applied to this
region. These
are identical to those defined for
vm_page_protect(9).
max_protection Mask for the memory protection bits
which may be
actually be applied to this region.
These are identical to those defined for vm_page_pro
tect(9).
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 fault.
The following flags may be applied to each entry, by speci
fying them as a
mask within the eflags member:
MAP_ENTRY_NOSYNC The system should not flush
the data
associated with this map pe
riodically,
but only when it needs to.
MAP_ENTRY_IS_SUB_MAP If set, then the object mem
ber 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 with
in this
region, the system will pan
ic.
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
behaviour 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 un
wiring of an
entry is in progress, and
that other kernel threads should not at
tempt to modify
fields in the structure.
MAP_ENTRY_NEEDS_WAKEUP Indicate that there are ker
nel threads
waiting for this region to
become available.
MAP_ENTRY_NOCOREDUMP The region should not be in
cluded in a
core dump.
The inheritance member has type vm_inherit_t. This governs
the inheritance 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 neces
sary.
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.

SEE ALSO

pmap(9), vm_map_check_protection(9), vm_map_clean(9),
vm_map_create(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_re
move(9),
vm_map_simplify_entry(9), vm_map_stack(9), vm_map_submap(9),
vm_map_wire(9), vm_page_protect(9)

AUTHORS

This manual page was written by Bruce M Simpson
<bms@spc.org>.
BSD September 26, 2004
Copyright © 2010-2025 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout