blob: a431fa37ace7489912aafb375886e75a8db72412 [file] [log] [blame] [view]
# 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 simultaniously 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 simultaniously.
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