摘要
建立 vCPU。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_vcpu_create(zx_handle_t guest,
uint32_t options,
zx_vaddr_t entry,
zx_handle_t* out);
說明
zx_vcpu_create()
會在訪客內建立 vCPU,以便在虛擬機器中執行。每位訪客可能會建立一或多個 vCPU,其中 vCPU 數量不必與機器上的實體 CPU 數量相符。
entry 是指示指標,用於指出在 VCPU 訪客實體記憶體執行作業中的啟動位置。
out 會繫結至建立該執行緒的執行緒,且所有在其上運作的系統呼叫都必須從相同的執行緒呼叫 (zx_vcpu_interrupt()
除外)。
一個執行緒中一次只能有一個 vCPU。執行緒關閉現有的 vCPU 後,就可以建立另一個 vCPU。
N.B. vCPU 是虛擬 CPU 的縮寫。
根據預設,帳號代碼可設定下列權限:
ZX_RIGHT_DUPLICATE
- out 可能會重複。
ZX_RIGHT_TRANSFER
- 您可以透過管道轉移。
ZX_RIGHT_EXECUTE
:out 可能會繼續執行作業 (或啟動)
ZX_RIGHT_SIGNAL
- out 可能會中斷
ZX_RIGHT_READ
- out 可能會讀取狀態
ZX_RIGHT_WRITE
— 可能寫入其狀態
權限
guest 類型必須為 ZX_OBJ_TYPE_GUEST
且具有 ZX_RIGHT_MANAGE_THREAD
。
傳回值
zx_vcpu_create()
會在成功時傳回 ZX_OK
。失敗時,系統會傳回錯誤值。
錯誤
ZX_ERR_ACCESS_DENIED
guest 沒有 ZX_RIGHT_MANAGE_THREAD
權限。
ZX_ERR_BAD_HANDLE
訪客是無效的帳號代碼。
ZX_ERR_BAD_STATE
執行緒目前具有 vCPU。一次只能在執行緒上啟動一個 vCPU。
ZX_ERR_INVALID_ARGS
args 包含無效引數,out 為無效指標,或 options 為非零。
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。使用者空間無法以任何方式處理這個錯誤 (極可能) 錯誤。日後的建構作業不會再發生這個錯誤。
ZX_ERR_WRONG_TYPE
訪客不是訪客的控制代碼。
另請參閱
zx_guest_create()
zx_guest_set_trap()
zx_vcpu_enter()
zx_vcpu_interrupt()
zx_vcpu_kick()
zx_vcpu_read_state()
zx_vcpu_write_state()