zx_pager_脫離_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 將這些範圍寫回。寫回後,這些頁面會再次變為乾淨頁面,因此核心可以任意逐出這些頁面。

權限

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 pager 沒有 ZX_RIGHT_ATTACH_VMOZX_RIGHT_MANAGE_VMO, 或 pager_vmo 沒有 ZX_RIGHT_WRITE

ZX_ERR_INVALID_ARGS pager_vmo 不是從 pager 建立的 VMO。

另請參閱