Virtual Memory Object


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_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.