zx_pager_split_vmo

摘要

从分页器分离 VMO。

声明

#include <zircon/syscalls.h>

zx_status_t zx_pager_detach_vmo(zx_handle_t pager, zx_handle_t pager_vmo);

说明

pager 分离 pager_vmo 会导致内核停止为 VMO 排队页面请求。后续本应生成网页请求的访问操作将改为失败。

分离后,系统不会再生成新的 ZX_PAGER_VMO_READZX_PAGER_VMO_DIRTY 请求,但可能仍有一些请求正在处理中。寻呼服务可以放心地忽略这些请求,因为内核会恢复并使生成这些请求的线程出现故障。寻呼服务将收到的最终请求是 ZX_PAGER_VMO_COMPLETE 请求。

以下分页器系统调用将在分离的 VMO 上失败:

以下功能将继续像分离前一样运行:

内核可以自由地从分离的 VMO 中逐出干净的页面,但会保留任何脏页面。收到 ZX_PAGER_VMO_COMPLETE 请求后,寻呼服务应使用 zx_pager_query_dirty_ranges() 查询这些范围,并使用 zx_pager_op_range()ZX_PAGER_OP_WRITEBACK_BEGINZX_PAGER_OP_WRITEBACK_END 将它们写回。写回后,这些页面将再次变为干净页面,因此内核可以自由地将其逐出。

权限

寻呼机必须是 ZX_OBJ_TYPE_PAGER 类型,并且具有 ZX_RIGHT_ATTACH_VMOZX_RIGHT_MANAGE_VMO

pager_vmo 必须是 ZX_OBJ_TYPE_VMO 类型,并且具有 ZX_RIGHT_WRITE

返回值

zx_pager_detach_vmo() 在成功时返回 ZX_OK,在失败时返回以下错误代码之一。

错误

ZX_ERR_BAD_HANDLE pagerpager_vmo 不是有效的句柄。

ZX_ERR_WRONG_TYPE pager 不是分页器句柄,或者 pager_vmo 不是 VMO 句柄。

ZX_ERR_ACCESS_DENIED pager 没有 ZX_RIGHT_ATTACH_VMOZX_RIGHT_MANAGE_VMO,或者 pager_vmo 没有 ZX_RIGHT_WRITE

ZX_ERR_INVALID_ARGS pager_vmo 不是从 pager 创建的 VMO。

另请参阅