![像 VMware 这样的软件是在用户空间还是内核空间运行?](https://linux22.com/image/1242207/%E5%83%8F%20VMware%20%E8%BF%99%E6%A0%B7%E7%9A%84%E8%BD%AF%E4%BB%B6%E6%98%AF%E5%9C%A8%E7%94%A8%E6%88%B7%E7%A9%BA%E9%97%B4%E8%BF%98%E6%98%AF%E5%86%85%E6%A0%B8%E7%A9%BA%E9%97%B4%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
Vmware 是用户安装的软件。因此它应该在底层操作系统提供的用户空间中运行。但它运行的操作系统完全可操作,并且需要在内核模式下运行。那么它在哪里运行呢?
答案1
VMWare 提供了大量的项目,Vinko Vrsalovic 已经指出 VMWare ESX 确实是一个自己的操作系统。
通常,可以完全在用户空间中运行虚拟机监视器 (VMM),例如 VMWare Workstation、QEmu 或 Virtualbox。它们只需要运行操作系统的磁盘或 CDROM 映像,然后通过解释所有指令和模拟设备访问来开始模拟 PC。然而,出于性能原因,虚拟化软件会尽可能避免模拟,因为在真实硬件上执行指令流比模拟它要快得多。
有几种方法可以加速虚拟化过程:
二进制重写:您的虚拟化操作系统执行操作系统内核和用户空间应用程序。对于用户空间应用程序,指令执行方面的限制与虚拟机监视器本身相同,因此在本机 CPU 上执行这些应用程序没有问题。但是对于操作系统部分,您需要模拟底层 CPU 的行为,因为您的 VMM 本身无法做到这一点。您现在需要检测用户代码和内核代码之间的所有切换,以便您可以高效地在本机执行和模拟之间切换。VMWare 和 Qemu 在执行虚拟化操作系统时对其应用二进制重写,从而捕获所有这些切换。
硬件协助:随着 VMM(自 20 世纪 70 年代出现)的日益普及,Intel 和 AMD 开始为其指令集提供硬件扩展,从而简化了在用户空间中实现 VMM。
内核扩展:VMWare 和 Qemu 还允许您在主机操作系统中安装设备驱动程序,使它们能够通过直接在内核模式下执行来加快内核代码和设备访问的执行。
直通设备驱动程序:设备 I/O 是另一个性能问题。通常,VMM 将实现一组虚拟设备,其行为与现实世界中的设备类似。此模拟步骤会减慢 I/O 速度,并且是虚拟化操作系统时的主要性能瓶颈。为了避免这种情况,VMM 还允许您在虚拟化客户操作系统中安装一堆设备驱动程序,这些驱动程序可以识别客户硬件,并允许将设备直接从主机操作系统传递到客户机,而无需模拟步骤。(但这仅在您在主机上运行一个操作系统实例时才有效,因为如果您将设备传递给客户机,其他任何人都无法访问该设备)。
答案2
VMware 的可下载版本可用作用户级程序。它使用虚拟机监视器来拦截真实的 x86 指令,并使用设备驱动程序来执行客户操作系统的并发执行,同时使用 CPU 虚拟化实现硬件辅助虚拟化,以便通过其 VMM 运行客户操作系统,同时仍然在操作系统之上并作为一个进程。Virtualbox 也是如此——它们是通常不在裸机上运行的程序(但可以),它们本身使用来自 Intel 等的 VMM 和 CPU VT 来拦截 x86 并“欺骗”客户操作系统,使其认为它正在运行整个机器,并模拟通常并不真正存在的支持硬件。在某种程度上,它就像模拟和非模拟混合在一起。例如,它可能模拟 BIOS/固件,因为没有虚拟化方法。它可能还模拟虚拟化客户 Windows 95/98 可能需要的较旧的遗留硬件。
简单来说,它使用有助于虚拟化处理的 CPU 功能,使另一个操作系统能够通过复杂的监控/替代仿真过程在同一 CPU 上运行,而不必真正成为裸机操作系统。
答案3
这取决于您运行的 VMWare 程序类型。有些在内核中运行,有些在用户空间中运行。
答案4
不考虑 VMWare ESX 之类的软件本身就是一个操作系统(经过修改的 Linux 版本)这一事实,另一个操作系统版本通常运行在内核空间和用户空间中,它会为所有特权任务(网络、监控等)安装驱动程序(在内核空间中运行)。