【问题标题】:How does VirtualBox-like virtualization work? (some technical details required)类似 VirtualBox 的虚拟化如何工作? (需要一些技术细节)
【发布时间】:2019-01-03 10:43:52
【问题描述】:

首先考虑只安装一个操作系统的情况。现在我运行一些可执行文件。处理器从可执行文件中读取指令并执行这些指令。即使我可以将任何我想要的指令放入文件中,我的程序也无法读取 HDD 的任意区域(并且做许多其他可能“坏”的事情)。

它看起来像魔法,但我明白这个魔法是如何运作的。操作系统启动我的程序并将处理器置于某种“非特权”状态。在这种状态下不允许“不安全”处理器指令,将处理器恢复到“特权”状态的唯一方法是将控制权交还给内核。内核代码可以使用处理器的所有指令,因此如果它决定允许它,它可以执行我的程序“要求”的潜在不安全事情。

现在假设我们在 Windows 主机上有 VMWare 或 VirtualBox。来宾操作系统是 Linux。我在来宾中运行一个程序,它将控制权转移到来宾 Linux 内核。来宾 Linux 内核的代码应该在处理器的“特权”模式下运行(它必须包含“不安全”的处理器指令!)。但我强烈怀疑它是否可以无限制地访问所有计算机资源。

我不需要太多技术细节,我只想了解这部分魔法是如何工作的。

【问题讨论】:

    标签: operating-system


    【解决方案1】:

    这是一个很好的问题,它确实涉及到一些关于安全和虚拟化的很酷的细节。我将简要概述英特尔处理器上的工作原理。


    操作系统如何管理正常进程?

    英特尔处理器有 4 个不同的“保护环”,可以随时使用。当前运行代码的环决定了可能运行的特定汇编指令。环 0 可以运行所有特权指令,而环 3 不能运行任何特权指令。

    操作系统内核始终在环 0 中运行。该环允许内核执行它所需的特权指令,以控制内存、启动程序、写入硬盘驱动器等。

    用户应用程序在环 3 中运行。该环不允许运行特权指令(例如用于写入 HDD 的指令)。如果应用程序尝试运行特权指令,处理器将从进程中获取控制权并引发内核将在 ring 0 中处理的异常;内核可能会终止进程。

    戒指 1 和 2 往往不会被使用,尽管它们有用处。

    Further reading


    虚拟化如何工作?

    在硬件支持虚拟化之前,虚拟机监视器(例如 VMWare)需要做一些称为二进制转换的事情(参见 paper)。概括地说,这包括 VMM 检查客户操作系统的二进制文件并以安全的方式模拟特权指令的行为。

    现在英特尔处理器中的虚拟化硬件支持(查找英特尔 VT-x)。除了上面提到的四个环之外,处理器还有两个状态,每个状态包含四个环:VMX根模式和VMX非根模式。

    主机操作系统及其应用程序以及 VMM(例如 VMWare)以 VMX 根模式运行。来宾操作系统及其应用程序在 VMX 非 root 模式下运行。同样,这两种模式都有自己的四个环,因此主机操作系统在根模式的环 0 中运行,主机操作系统应用程序在根模式的环 3 中运行,来宾操作系统在非根模式的环 0 中运行,并且来宾操作系统应用程序在非 root 模式的 ring 3 中运行。

    当在非 root 模式的 ring 0 中运行的代码尝试执行特权指令时,处理器会将控制权交还给运行在 root 模式下的主机操作系统,以便主机操作系统可以模拟效果并防止来宾无法直接访问特权资源(或者在某些情况下,处理器硬件可以在不涉及主机的情况下模拟效果本身)。因此,客户操作系统可以“执行”特权指令,而无需对硬件资源进行不安全的访问——这些指令只是被截获和模拟。客人不能随心所欲 - 只能做主机和硬件允许的事情。

    澄清一下,在非 root 模式的 ring 3 中运行的代码如果尝试执行特权指令,将导致向来宾操作系统发送异常,就像在代码中向主机操作系统发送异常一样在 root 模式的 ring 3 中运行会尝试执行特权指令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      相关资源
      最近更新 更多