摘要
建立 VM 物件。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_vmo_create(uint64_t size, uint32_t options, zx_handle_t* out);
說明
zx_vmo_create()
會建立新的零填入虛擬記憶體物件 (VMO),代表作業系統管理的記憶體容量,大小為 0 至 size 個位元組。
VMO 的大小會四捨五入至下一個系統頁面的大小邊界,由 zx_system_get_page_size()
回報。使用 zx_vmo_get_size()
傳回 VMO 目前的大小。
VMO 的內容大小會初始化為指定的 (未四捨五入) 大小。將 zx_object_get_property()
與 ZX_PROP_VMO_CONTENT_SIZE
搭配使用,可讀取 VMO 的內容大小。將 zx_object_set_property()
與 ZX_PROP_VMO_CONTENT_SIZE
搭配使用可設定 VMO 的內容大小,不必實際調整 VMO 大小。
成功時會傳回一個控制代碼,代表含有要求大小的物件。
根據預設,帳號代碼會設定下列權限:
ZX_RIGHT_DUPLICATE
- 帳號代碼可重複。ZX_RIGHT_TRANSFER
- 帳號代碼可能會轉移至其他程序。ZX_RIGHT_READ
- 可以讀取或具有讀取權限。ZX_RIGHT_WRITE
- 可能寫入或具有寫入權限。ZX_RIGHT_MAP
- 可能會對應。ZX_RIGHT_GET_PROPERTY
- 可以使用zx_object_get_property()
取得其屬性。ZX_RIGHT_SET_PROPERTY
- 可以使用zx_object_set_property()
設定屬性。ZX_RIGHT_RESIZE
- 可能會調整大小。只有在指定ZX_VMO_RESIZABLE
選項時,才需要設定。
options 欄位可以是 0 或以下兩者的組合:
ZX_VMO_RESIZABLE
建立可變更大小的 VMO。無法調整大小的 VMO 子項可調整大小。ZX_VMO_DISCARDABLE
用於建立 VMO,讓核心可以從記憶體壓力下捨棄頁面。使用zx_vmo_op_range()
搭配ZX_VMO_OP_LOCK
來鎖定使用中的 VMO,並在使用ZX_VMO_OP_UNLOCK
時解鎖,讓這些 VMO 符合核心收回的資格。新建立的可捨棄 VMO 最初已解鎖。ZX_VMO_UNBOUNDED
:建立可初始化為最大大小的 VMO。無法與ZX_VMO_RESIZABLE
搭配使用。大小引數只會設定串流大小。
ZX_VMO_ZERO_CHILDREN
信號會在新建立的 VMO 中啟用。每當 VMO 的子項被刪除,且這些子項都沒有對應至位址空間時,此類別就會變為無效狀態。
權限
呼叫端工作政策必須允許 ZX_POL_NEW_VMO
。
傳回值
zx_vmo_create()
在成功時傳回 ZX_OK
。如果失敗,系統會傳回負值的錯誤值。
錯誤
ZX_ERR_INVALID_ARGS
out 是無效指標或 NULL,但「options」包含不支援的標記組合。
ZX_ERR_NO_MEMORY
由於記憶體不足而失敗。使用者空間無法妥善處理這項 (不太可能) 錯誤。日後的建構作業就不會再發生這個錯誤。
ZX_ERR_OUT_OF_RANGE
要求的大小過大。
另請參閱
zx_system_get_page_size()
zx_vmar_map()
zx_vmo_create_child()
zx_vmo_get_size()
zx_vmo_op_range()
zx_vmo_read()
zx_vmo_replace_as_executable()
zx_vmo_set_size()
zx_vmo_write()