深度探索Linux系统虚拟化:原理与实现
上QQ阅读APP看书,第一时间看更新

1.5.1 创建虚拟机实例

显然,对于一台虚拟机实体而言,在KVM中需要一个实例与其对应。因此,在与内核KVM子系统建立关系后,需要向内核中的KVM子系统申请创建一台虚拟机,KVM子系统为此提供的API是KVM_CREATE_VM。通过向KVM子系统发起一个KVM_CREATE_VM命令,KVM子系统将会在内核中创建一个虚拟机实例,并返回指向这个虚拟机实例的一个文件描述符,后续凡是与这个虚拟机实例有关的操作,比如创建这台虚拟机的内存、处理器等都需要通过这个虚拟机实例文件描述符。最初创建的虚拟机只是一个空机箱,既没有内存,也没有处理器。创建虚拟机实例的代码如下:


int setup_vm(struct vm *vm, int ram_size) {
  int ret = 0;

  if ((vm->vm_fd = ioctl(g_dev_fd, KVM_CREATE_VM, 0)) < 0) {
    fprintf(stderr, "failed to create vm.\n");
    return -1;
  }
  …
}