gpt4 book ai didi

operating-system - 类似 VirtualBox 的虚拟化是如何工作的? (需要一些技术细节)

转载 作者:行者123 更新时间:2023-12-05 06:32:02 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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


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

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

操作系统内核始终运行在 ring 0 中。这个环允许内核执行它需要的特权指令,以便控制内存、启动程序、写入 HDD 等。

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

虽然第 1 环和第 2 环有用,但它们往往不被使用。

Further reading


虚拟化是如何工作的?

在虚拟化有硬件支持之前,虚拟机监视器(如 VMWare)需要做一些称为二进制翻译的事情(参见 paper)。在高级别,这包括 VMM 检查 guest 操作系统的二进制文件并以安全的方式模拟特权指令的行为。

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

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

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

需要澄清的是,在非根模式的第 3 环运行的代码如果试图执行特权指令,将导致向客户操作系统发送异常,就像如果代码执行时向主机操作系统发送异常一样在 root 模式的 ring 3 中运行,尝试执行特权指令。

关于operating-system - 类似 VirtualBox 的虚拟化是如何工作的? (需要一些技术细节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51538789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com