vm_object - Virtual memory containers
A Virtual Memory Object (VMO) represents a contiguous region of virtual memory that may be mapped into multiple address spaces.
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_write(). A VMO‘s size may be set using
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_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.
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
zx_vmar_map()- map a VMO into a process
zx_vmar_unmap()- unmap memory from a process