对于普通的独立主机,不同的进程使用调度程序进行上下文切换。例如,假设有进程1和进程2,则控制从进程1进入调度程序,然后从调度程序进入进程2,进程2然后执行直到它向调度程序返回控制以调度另一个进程。
我想知道从流程1到流程2的这种切换是如何在VM中进行的?VM_EXIT()
每次VM内的两个进程之间都有进程切换时,VM是否会调用?或主机调度程序与进程切换有关?
AFAIK,主机操作系统将VM视为单个进程。有人可以指出一些提示我可以清除这些疑虑吗?
对于普通的独立主机,不同的进程使用调度程序进行上下文切换。例如,假设有进程1和进程2,则控制从进程1进入调度程序,然后从调度程序进入进程2,进程2然后执行直到它向调度程序返回控制以调度另一个进程。
我想知道从流程1到流程2的这种切换是如何在VM中进行的?VM_EXIT()
每次VM内的两个进程之间都有进程切换时,VM是否会调用?或主机调度程序与进程切换有关?
AFAIK,主机操作系统将VM视为单个进程。有人可以指出一些提示我可以清除这些疑虑吗?
Answers:
虚拟机无法理解内部发生的事情,它们只是模拟硬件。
VM仿真有3种基本方法。最明显的是硬件仿真,这是Bochs所做的。它只是以编程方式模拟兼容x86的PC,背后没有任何更深层的魔力。PC是一种处理数据的机器,因此Bochs只使用主机操作系统来收集输入数据并将其提供给模拟的虚拟设备,然后从这些设备读取输出数据并使用主机来呈现它。这正是控制台模拟器和类似程序所做的。Bochs不知道VM内部发生了什么,它可以在裸模拟硬件上运行。流程的概念对它来说过于抽象,它不需要关心这些事情 - 只需要硬件仿真。
第二种VM是在引入硬件加速虚拟化之前常见的。Bochs式仿真很慢,因为它是逐字节解释机器代码。在运行的操作系统中运行裸字节码是不可能的,因为CPU的工作方式(并且它们的工作原理很好),但是应用程序可以占用一大块字节码并对其进行编辑,以便在主机操作系统中执行安全,然后将其作为自己的代码执行。编辑阶段有两个目的:它清理代码以使其运行成为可能,并将模拟的I / O设备连接到主机的适当数据源/目标。尽管如此,虚拟机并不存在任何类似的进程,它只是在物理CPU上伪模拟代码,假装它是程序的代码。
最后,第三种虚拟机是硬件加速的虚拟化虚拟机。它需要硬件支持,但所有现代CPU都有它。这只是做我之前说过的不可能的事情:与主机操作系统并行运行低级代码。问题是,如果你把它内置到CPU中,你可以让它正确处理代码。它将为该代码创建一个沙箱环境,使主机可以控制该沙箱。这样,VM代码甚至更接近硬件执行,因此它的工作速度更快。它也更接近于使用硬件环系统,但仍然没有引入过程的确切概念。这些始终由客户操作系统处理。但是在硬件加速的虚拟机中,您可以真正看到类似于主机上下文切换的内容。其他类型的VM始终作为用户级程序运行。
VM内部的进程切换与普通计算机上的进程切换方式相同。操作系统只是改变它正在处理的进程。主持人不知道或不关心虚拟机内部发生了什么 - 它有什么不同?