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_vmopager 分离会导致内核停止将 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。一旦收到回复 这些网页会再次变为整洁有序,以便内核随时将其逐出。

权限

pager 的类型必须为 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 分页器没有 ZX_RIGHT_ATTACH_VMOZX_RIGHT_MANAGE_VMO, 或 pager_vmo 没有 ZX_RIGHT_WRITE

ZX_ERR_INVALID_ARGS pager_vmo 不是通过 pager 创建的 VMO。

另请参阅