总结
创建 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。
注意:VCPU 是虚拟 CPU 的缩写。
默认情况下,标识名 out 将设置以下权限:
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
guest 是无效的句柄。
ZX_ERR_BAD_STATE
:表示线程当前具有 vCPU。一个线程上一次只能有一个 vCPU 处于活动状态。
ZX_ERR_INVALID_ARGS
args 包含无效参数,out 是无效指针,或 options 为非零值。
ZX_ERR_NO_MEMORY
由于内存不足而失败。
用户空间没有什么方法来处理此(不太可能)错误。在以后的 build 中,此错误不会再发生。
ZX_ERR_WRONG_TYPE
guest 不是访客的标识名。
另请参阅
zx_guest_create()
zx_guest_set_trap()
zx_vcpu_enter()
zx_vcpu_interrupt()
zx_vcpu_kick()
zx_vcpu_read_state()
zx_vcpu_write_state()