|  | # Pager | 
|  |  | 
|  | ## NAME | 
|  |  | 
|  | pager - Mechanism for userspace paging | 
|  |  | 
|  | ## SYNOPSIS | 
|  |  | 
|  | Pagers provide a mechanism for a userspace process to provide demand paging for VMOs. | 
|  |  | 
|  | ## DESCRIPTION | 
|  |  | 
|  | A pager object allows a userspace pager service (typically a filesystem) to create VMOs that serve | 
|  | as in-memory caches for external data. For a given VMO created by a pager object, the kernel | 
|  | delivers page requests to an associated port. The pager service is then responsible for fulfilling | 
|  | the requests by supplying the appropriate pages to the VMO. | 
|  |  | 
|  | The kernel does not do prefetching; it is the responsibility of the pager service to implement any | 
|  | applicable prefetching. | 
|  |  | 
|  | It is possible for a single pager to simultaneously back multiple VMOs. Requests for the different | 
|  | VMOs can be differentiated by the *key* parameter used when creating the VMO. It is also possible | 
|  | for multiple independent pager objects to exist simultaneously. | 
|  |  | 
|  | Creating a pager is not a privileged operation. However, the default behavior of syscalls which | 
|  | operate on VMOs is to fail if the operation would require blocking on IPC back to a userspace | 
|  | process, so applications generally need to be aware of when they are operating on pager owned | 
|  | VMOs. This means that services which provide pager owned VMOs to clients should be explicit about | 
|  | doing so as part of their API. Whether or not accesses into a VMO may result in a pager request | 
|  | can be determined by checking for the **ZX_INFO_VMO_PAGER_BACKED** flag returned by | 
|  | [`zx_object_get_info()`] in `zx_info_vmo_t`. | 
|  |  | 
|  | TODO(stevensd): Writeback is not currently implemented. Update the documentation when it is. | 
|  |  | 
|  | ## SEE ALSO | 
|  |  | 
|  | + [vm_object](vm_object.md) - Virtual Memory Objects | 
|  |  | 
|  | ## SYSCALLS | 
|  |  | 
|  | + [pager_create](/docs/reference/syscalls/pager_create.md) - create a new pager object | 
|  | + [pager_create_vmo](/docs/reference/syscalls/pager_create_vmo.md) - create a vmo owned by a pager | 
|  | + [pager_detach_vmo](/docs/reference/syscalls/pager_detach_vmo.md) - detaches a pager from a vmo | 
|  | + [pager_supply_pages](/docs/reference/syscalls/pager_supply_pages.md) - supply pages into a pager owned vmo |