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