QEMU-KVM的一般操作原理

图片

我目前的理解:

1)KVM


KVM(基于内核的虚拟机)-虚拟机管理程序(VMM-虚拟机管理器),在Linux OS上作为模块运行。 为了在不存在的(虚拟)环境中运行某些软件,同时需要一个虚拟机管理程序,请从该软件中隐藏该软件所运行的实际物理硬件。 系统管理程序充当物理硬件(主机)和虚拟OS(来宾)之间的“隔离带”。

由于KVM是Linux内核的标准模块,因此它从内核接收所有必需的nishtyaki(使用内存,调度程序等)。 因此,最终,所有这些优势都归来宾所有(因为来宾在Linux内核上运行的虚拟机监控程序上工作)。

KVM速度非常快,但仅凭它不足以运行虚拟OS,因为 这需要I / O仿真。 对于I / O(处理器,驱动器,网络,视频,PCI,USB,串行端口等),KVM使用QEMU。

2)QEMU


QEMU(快速仿真器)-各种设备的仿真器,使您可以在另一种架构上运行为一种体系结构设计的操作系统(例如,ARM-> x86)。 除了处理器之外,QEMU还模拟各种外围设备:网卡,HDD,视频卡,PCI,USB等。

它是这样的:

使用TCG(微型代码生成器)转换器将指令/二进制代码(例如ARM)转换为与平台无关的中间代码,然后将该平台无关的二进制代码转换为目标指令/代码(例如x86)。

ARM->中间件-> x86

实际上,即使使用不支持Intel VT-x(Intel虚拟化技术)/ AMD SVM(AMD安全虚拟机)的较旧处理器型号,也可以在任何主机上的QEMU上运行虚拟机。 但是,在这种情况下,由于二进制文件必须使用TCG(TCG是即时编译器)动态地重新编译两次的事实,它的工作将非常缓慢。

即 QEMU本身很酷,但是运行非常缓慢。

3)保护环


图片

处理器上的二进制程序代码不能那样工作,而是位于不同级别(保护环),具有不同级别的数据访问权限,从最特权(Ring 0)到最有限,过度监管和“拧紧螺母”(Ring 3) )

操作系统(OS内核)在Ring 0(内核模式)上运行,并且可以对任何数据和设备执行任何操作。 用户应用程序在Ring 3(用户模式)级别上运行,无权执行所需的操作,而是每次必须请求访问权限才能执行操作(通过这种方式,用户应用程序只能访问自己的数据,并且不能访问“进入”其他人的沙箱”)。 环1和2供驾驶员使用。

在发明Intel VT-x / AMD SVM之前,虚拟机管理程序在Ring 0上工作,而guest虚拟机在Ring 1上工作。由于Ring 1没有足够的权限来正常运行OS,因此,在来宾系统的每个特权调用下,虚拟机管理程序都必须即时修改此调用。并在第0环上执行它(类似于QEMU)。 即 来宾二进制代码不是直接在处理器上执行的,并且每次运行中都会进行几次中间修改。

开销是巨大的,这是一个大问题,然后处理器制造商彼此独立发布了一组扩展指令(Intel VT-x / AMD SVM),这些指令允许在主机处理器上直接执行客户操作系统代码(绕过任何昂贵的中间步骤,例如之前)。

随着Intel VT-x / AMD SVM的出现,创建了一个特殊的新Ring -1级(减1)。 现在,虚拟机管理程序正在处理它,来宾正在处理Ring 0,并获得对CPU的特权访问。

即 结果:

  • 主机在环0上运行
  • 客人在0环工作
  • 系统管理程序在环-1上运行

4)QEMU-KVM


KVM为来宾提供对Ring 0的访问,并使用QEMU模拟I / O(来宾“看到”并使用的处理器,磁盘,网络,视频,PCI,USB,串行端口等)。

因此,QEMU-KVM(或KVM-QEMU):)

学分
图片引起关注
图片保护环

PS这篇文章的文本最初发布在Telegram频道@RU_Voip中,作为对一个频道参与者问题的解答。

在我无法正确理解主题的地方或有补充内容的地方写下评论。

谢谢你

Source: https://habr.com/ru/post/zh-CN466549/


All Articles