# Virtual Memory Object

## NAME

vm\_object - Virtual memory containers

## SYNOPSIS

A Virtual Memory Object (VMO) represents a contiguous region of virtual memory
that may be mapped into multiple address spaces.

## DESCRIPTION

VMOs are used in the kernel and userspace to represent both paged and physical memory.
They are the standard method of sharing memory between processes, as well as between the kernel and
userspace.

VMOs are created with [`zx_vmo_create()`] and basic I/O can be
performed on them with [`zx_vmo_read()`] and [`zx_vmo_write()`].
A VMO's size may be set using [`zx_vmo_set_size()`].
Conversely, [`zx_vmo_get_size()`] will retrieve a VMO's current size.

The size of a VMO will be rounded up to the next page size boundary by the kernel.

Pages are committed (allocated) for VMOs on demand through [`zx_vmo_read()`], [`zx_vmo_write()`], or by writing to a mapping of the VMO created using [`zx_vmar_map()`]. Pages can be committed and decommitted from a VMO manually by calling
[`zx_vmo_op_range()`] with the **ZX_VMO_OP_COMMIT** and **ZX_VMO_OP_DECOMMIT**
operations, but this should be considered a low level operation. [`zx_vmo_op_range()`] can also be used for cache and locking operations against pages a VMO holds.

Processes with special purpose use cases involving cache policy can use
[`zx_vmo_set_cache_policy()`] to change the policy of a given VMO.
This use case typically applies to device drivers.

## SYSCALLS

 - [`zx_vmo_create()`] - create a new vmo
 - [`zx_vmo_read()`] - read from a vmo
 - [`zx_vmo_write()`] - write to a vmo
 - [`zx_vmo_get_size()`] - obtain the size of a vmo
 - [`zx_vmo_set_size()`] - adjust the size of a vmo
 - [`zx_vmo_op_range()`] - perform an operation on a range of a vmo
 - [`zx_vmo_set_cache_policy()`] - set the caching policy for pages held by a vmo

<br>

 - [`zx_vmar_map()`] - map a VMO into a process
 - [`zx_vmar_unmap()`] - unmap memory from a process

[`zx_vmar_map()`]: /docs/reference/syscalls/vmar_map.md
[`zx_vmar_unmap()`]: /docs/reference/syscalls/vmar_unmap.md
[`zx_vmo_create()`]: /docs/reference/syscalls/vmo_create.md
[`zx_vmo_get_size()`]: /docs/reference/syscalls/vmo_get_size.md
[`zx_vmo_op_range()`]: /docs/reference/syscalls/vmo_op_range.md
[`zx_vmo_read()`]: /docs/reference/syscalls/vmo_read.md
[`zx_vmo_set_cache_policy()`]: /docs/reference/syscalls/vmo_set_cache_policy.md
[`zx_vmo_set_size()`]: /docs/reference/syscalls/vmo_set_size.md
[`zx_vmo_write()`]: /docs/reference/syscalls/vmo_write.md
