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 by 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 vmo_create and basic I/O can be performed on them with vmo_read and vmo_write. A VMO‘s size may be set using vmo_set_size. Conversely, 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 vmo_read, vmo_write, or by writing to a mapping of the VMO created using vmar_map. Pages can be committed and decommitted from a VMO manually by calling vmo_op_range with the ZX_VMO_OP_COMMIT and ZX_VMO_OP_DECOMMIT operations, but this should be considered a low level operation. 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 vmo_set_cache_policy to change the policy of a given VMO. This use case typically applies to device drivers.