1# Virtual Memory Object
2
3## NAME
4
5vm\_object - Virtual memory containers
6
7## SYNOPSIS
8
9A Virtual Memory Object (VMO) represents a contiguous region of virtual memory
10that may be mapped into multiple address spaces.
11
12## DESCRIPTION
13
14VMOs are used in by the kernel and userspace to represent both paged and physical memory.
15They are the standard method of sharing memory between processes, as well as between the kernel and
16userspace.
17
18VMOs are created with [vmo_create](../syscalls/vmo_create.md) and basic I/O can be
19performed on them with [vmo_read](../syscalls/vmo_read.md) and [vmo_write](../syscalls/vmo_write.md).
20A VMO's size may be set using [vmo_set_size](../syscalls/vmo_set_size.md).
21Conversely, [vmo_get_size](../syscalls/vmo_get_size.md) will retrieve a VMO's current size.
22
23The size of a VMO will be rounded up to the next page size boundary by the kernel.
24
25Pages are committed (allocated) for VMOs on demand through [vmo_read](../syscalls/vmo_read.md), [vmo_write](../syscalls/vmo_write.md), or by writing to a mapping of the VMO created using [vmar_map](../syscalls/vmar_map.md). Pages can be committed and decommitted from a VMO manually by calling
26[vmo_op_range](../syscalls/vmo_op_range.md) with the *ZX_VMO_OP_COMMIT* and *ZX_VMO_OP_DECOMMIT*
27operations, but this should be considered a low level operation. [vmo_op_range](../syscalls/vmo_op_range.md) can also be used for cache and locking operations against pages a VMO holds.
28
29Processes with special purpose use cases involving cache policy can use
30[vmo_set_cache_policy](../syscalls/vmo_set_cache_policy.md) to change the policy of a given VMO.
31This use case typically applies to device drivers.
32
33## SYSCALLS
34
35+ [vmo_create](../syscalls/vmo_create.md) - create a new vmo
36+ [vmo_read](../syscalls/vmo_read.md) - read from a vmo
37+ [vmo_write](../syscalls/vmo_write.md) - write to a vmo
38+ [vmo_get_size](../syscalls/vmo_get_size.md) - obtain the size of a vmo
39+ [vmo_set_size](../syscalls/vmo_set_size.md) - adjust the size of a vmo
40+ [vmo_op_range](../syscalls/vmo_op_range.md) - perform an operation on a range of a vmo
41+ [vmo_set_cache_policy](../syscalls/vmo_set_cache_policy.md) - set the caching policy for pages held by a vmo
42
43<br>
44
45+ [vmar_map](../syscalls/vmar_map.md) - map a VMO into a process
46+ [vmar_unmap](../syscalls/vmar_unmap.md) - unmap memory from a process
47