| # 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 |