| # 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 |