[[!meta copyright="Copyright © 2002, 2003, 2010 Free Software Foundation,
Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

*Virtual address space*s in Mach define the valid virtual addresses that can be
used by [[thread]]s under execution in the [[task]] that owns that address
space.  Each task has only one address space and each address space belongs to
only one task.  So when we want to name an address space (for example, in the
Mach API) we name it by the task it belongs to.

These address spaces are divided into *pages*.  Each page has individual
properties like *access rights* (*read* / *write* / *execute*), *inheritance
attributes* (*no inheritance* / *copy* / *share*) and some other system
properties.  Page manipulation is optimized to help moving large blocks of data
from one address space to another, for example when one thread provides data to
another thread -- *client / server* technology.

Memory ranges of pages that can be controlled as a whole are called
*[[memory_object]]*s.

*Wired pages* are those that cannot be [[paged out|external_pager_mechanism]].
For example, Mach itself is a task with its own address space and threads, and
all of its pages are wired.

*Precious pages* are those that must not be discarded silently when they are
clean and memory is needed.  For example, a memory manager that shares memory
across a network could not restore a page if it is silently discarded because
it is unmodified.  This is not valid for the well-known [[pager
managers|external_pager_mechanism]] that use disks as backing store.