KVM 虚拟化架构和实现原理

2022-03-07KVM 虚拟化架构

KVM 是嵌入在 Linux 操作系统标准内核中的虚拟化模块。 Linux标准内核转换为VMM,嵌入KVM模块的Linux标准内核可以支持通过kvm工具加载。所以在这样的操作系统平台下,计算机的物理硬件层直接就是VMM虚拟化层,没有独立的操作系统层。在这样的环境中是一个 VMM。

每个由 KVM(或 VMM)创建的都是一个进程。上面在User-space中运行的可以理解为进程中的一个线程。

需要注意的是,KVM 只是虚拟化解决方案的一部分。要实现全虚拟化,还需要其他条件:

1.CPU处理器提供虚拟化支持(VT-x硬件辅助虚拟化,可以创建虚拟化处理器,本质上是寄存器的隔离模拟和指令集的划分)。

图片[1]-KVM 虚拟化架构和实现原理-唐朝资源网

2.内存可以被kvm虚拟成一个单独的虚拟化地址(/dev/kvm)

3. I/O 虚拟化 (QEMU)

==> KVM 虚拟化 = KVM 内核模块 + /dev/kvm + QEMU

/dev/kvm

Linux 操作系统标准内核中的KVM 内核模块生成一个名为/dev/kvm 的设备。使用 /dev/kvm 设备,地址空间(内存地址、磁盘地址)可以独立于标准内核或任何其他地址空间。 Linux 操作系统目录结构中包含的 /dev 目录树下的设备对所有 User-space 进程或线程(无论是在 VMM 上还是在 VMM 上)都是通用的,但每个打开的 /dev/kvm 设备不同的进程或线程可以使用唯一的以及不同的地址映射(为了支持它们之间的隔离)。

KVM 内核模块通过 /dev/kvm 设备提供内存虚拟化,给它一个相对独立于内核或其他的地址空间。每个都有自己的地址空间,这些地址空间是在实例化时映射的。映射到的物理内存其实就是映射到VMM中对应进程的虚拟内存。

有两种方法支持Guest地址到Host(VMM)地址的转换:

所以一般来说,/dev/kvm设备的作用是:不同地址隔离之间的转换,或者(VMM)和(VMM)之间的地址隔离

图片[2]-KVM 虚拟化架构和实现原理-唐朝资源网

QEMU

QEMU 是一种 I/O 虚拟化解决方案,能够处理完整的计算机物理层环境 (例如磁盘、图形适配器、网络设备)。

QEMU中产生的所有I/O请求都会被QEMU拦截,并重新发送到QEMU进程模拟的User Mode。

KVM和QEMU的关系

图片[3]-KVM 虚拟化架构和实现原理-唐朝资源网

KVM用于模拟CPU的运行,但缺乏对I/O的支持。 QEMU-KVM 是一个完整的仿真器,它基于 KVM 并提供完整的 I/O 支持。其中,为了跨VM,不会直接控制QEMU-KVM,而是通过.的库间接控制QEMU-KVM。

KVM的虚拟化实现

KVM内核模块为Linux标准内核引入了除现有Mode和User Mode之外的新进程模式以外的新进程模式。这种新模式叫做Guest Mode,顾名思义,就是用来执行代码的。

Linux标准内核的执行模式可以针对不同的运行内容和目的进行定义。访客模式用于执行代码,但仅适用于非 I/O 代码。 I/O 代码也需要 QEMU 的支持。

可以在两种模式下运行:

同样是I/O操作只能在User Mode下进行,这个由QEMU-KVM单独管理。

分类:

技术要点:

相关文章:

© 版权声明
THE END
喜欢就支持一下吧
点赞249 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片