摘要
從呼叫器卸離 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_READ 和 ZX_PAGER_VMO_DIRTY 要求,但部分要求可能仍在處理中。分頁服務可以免費忽略這些要求,因為核心會繼續執行並產生這些要求。呼叫器服務收到的最終要求是 ZX_PAGER_VMO_COMPLETE 要求。
在已卸離的 VMO 上,下列分頁系統呼叫會失敗:
zx_pager_supply_pages()zx_pager_op_range()(搭配ZX_PAGER_OP_DIRTY和ZX_PAGER_OP_FAIL)
卸離後,下列項目會繼續運作,與卸離前相同:
zx_pager_query_dirty_ranges()zx_pager_query_vmo_stats()zx_pager_op_range()(搭配ZX_PAGER_OP_WRITEBACK_BEGIN和ZX_PAGER_OP_WRITEBACK_END)
核心可從已卸離的 VMO 任意逐出乾淨頁面,但會保留所有髒頁面。收到 ZX_PAGER_VMO_COMPLETE 要求後,分頁服務應使用 zx_pager_query_dirty_ranges() 查詢這些範圍,並使用 zx_pager_op_range()
ZX_PAGER_OP_WRITEBACK_BEGIN 和 ZX_PAGER_OP_WRITEBACK_END 將這些範圍寫回。寫回後,這些頁面會再次變為乾淨頁面,因此核心可以任意逐出這些頁面。
權限
pager 必須是 ZX_OBJ_TYPE_PAGER 類型,且具有 ZX_RIGHT_ATTACH_VMO 和 ZX_RIGHT_MANAGE_VMO。
pager_vmo 必須為 ZX_OBJ_TYPE_VMO 類型,且具有 ZX_RIGHT_WRITE。
傳回值
如果成功,zx_pager_detach_vmo() 會傳回 ZX_OK;如果失敗,則會傳回下列其中一個錯誤代碼。
錯誤
ZX_ERR_BAD_HANDLE pager 或 pager_vmo 不是有效的控制代碼。
ZX_ERR_WRONG_TYPE pager 不是分頁處理常式,或 pager_vmo 不是 VMO 處理常式。
ZX_ERR_ACCESS_DENIED pager 沒有 ZX_RIGHT_ATTACH_VMO 或 ZX_RIGHT_MANAGE_VMO,
或 pager_vmo 沒有 ZX_RIGHT_WRITE。
ZX_ERR_INVALID_ARGS pager_vmo 不是從 pager 建立的 VMO。