QEMU/KVM源码分析之——虚拟机创建流程
Linux
系统下
QEMU/KVM
虚拟化架构有两部分:
QEMU
和
KVM
。
QEMU用户态虚拟机管理工具,它是一个普通的Linux进程,为客户机提供设备模拟的功能,包括模拟BIOS、PCI/PCIE总线、磁盘、网卡、显卡、声卡、键盘、鼠标等。同时它通过ioctl系统调用与内核态的KVM模块进行交互 。
KVM内核模块,它属于标准Linux内核的一部分,是一个专门提供虚拟化功能的模块,主要负责CPU和内存的虚拟化,包括:客户机的创建、虚拟内存的分配、
CPU执行模式的切换、vCPU寄存器的访问、vCPU指令的执行。
QEMU
和
KVM
通过
IOCTL
进行交互,
Linux
系统下
QMEU/KVM
虚拟化架构见图1.1:
KVM
是
Linux
系统下的一个内核模块,下面以
AMD
的
x86
架构为例介绍
KVM
内核模块的初始化流程。kvm-amd
以内核模块的方式加载入
Linux
内核,然后执行
kvm_init()
,在
kvm_init()
中进行了一系列初始化,见图2.1.1:
kvm_init
是
QEMU
中创建虚拟机的入口,下图主要呈现了
kvm_init
的注册流程:
kvm_init
发起创建虚拟机的的流程,见图2.3.1:
kvm_init
创建虚拟机时同时要创建
vCPU
,
kvm_init
发起创建
vCPU
流程,见图2.4.1:
标签: