blob: 835e3d14fffa8e66589b100d157f683a6490397f [file] [log] [blame] [view]
# 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