流程切换如何在VM中进行?


3

对于普通的独立主机,不同的进程使用调度程序进行上下文切换。例如,假设有进程1和进程2,则控制从进程1进入调度程序,然后从调度程序进入进程2,进程2然后执行直到它向调度程序返回控制以调度另一个进程。

我想知道从流程1到流程2的这种切换是如何在VM中进行的?VM_EXIT()每次VM内的两个进程之间都有进程切换时,VM是否会调用?或主机调度程序与进程切换有关?

AFAIK,主机操作系统将VM视为单个进程。有人可以指出一些提示我可以清除这些疑虑吗?

Answers:


2

虚拟机无法理解内部发生的事情,它们只是模拟硬件。

VM仿真有3种基本方法。最明显的是硬件仿真,这是Bochs所做的。它只是以编程方式模拟兼容x86的PC,背后没有任何更深层的魔力。PC是一种处理数据的机器,因此Bochs只使用主机操作系统来收集输入数据并将其提供给模拟的虚拟设备,然后从这些设备读取输出数据并使用主机来呈现它。这正是控制台模拟器和类似程序所做的。Bochs不知道VM内部发生了什么,它可以在裸模拟硬件上运行。流程的概念对它来说过于抽象,它不需要关心这些事情 - 只需要硬件仿真。

第二种VM是在引入硬件加速虚拟化之前常见的。Bochs式仿真很慢,因为它是逐字节解释机器代码。在运行的操作系统中运行裸字节码是不可能的,因为CPU的工作方式(并且它们的工作原理很好),但是应用程序可以占用一大块字节码并对其进行编辑,以便在主机操作系统中执行安全,然后将其作为自己的代码执行。编辑阶段有两个目的:它清理代码以使其运行成为可能,并将模拟的I / O设备连接到主机的适当数据源/目标。尽管如此,虚拟机并不存在任何类似的进程,它只是在物理CPU上伪模拟代码,假装它是程序的代码。

最后,第三种虚拟机是硬件加速的虚拟化虚拟机。它需要硬件支持,但所有现代CPU都有它。这只是做我之前说过的不可能的事情:与主机操作系统并行运行低级代码。问题是,如果你把它内置到CPU中,你可以让它正确处理代码。它将为该代码创建一个沙箱环​​境,使主机可以控制该沙箱。这样,VM代码甚至更接近硬件执行,因此它的工作速度更快。它也更接近于使用硬件环系统,但仍然没有引入过程的确切概念。这些始终由客户操作系统处理。但是在硬件加速的虚拟机中,您可以真正看到类似于主机上下文切换的内容。其他类型的VM始终作为用户级程序运行。


对于QEMU / KVM(第三种VM),如果我有两个进程 - 在Guest中运行Firefox和VLC,并且有一个从VLC到firefox的上下文切换,那么这个切换以及VM进程和其他主机之间的切换主机级别的进程是否相互关联?说VLC-Firefox交换机独立于VM-other_host_process交换机是否正确?由于VLC-Firefox切换发生在沙箱CPU环境中?
Shehbaz Jaffer 2013年

你是对的,那些是完全独立的。VM中的切换过程不应影响主机,反之亦然(当然性能除外 - 主机中较高的CPU负载会影响客户的性能)
gronostaj 2013年

0

VM内部的进程切换与普通计算机上的进程切换方式相同。操作系统只是改变它正在处理的进程。主持人不知道或不关心虚拟机内部发生了什么 - 它有什么不同?


好吧,如果虚拟进程1调用系统函数,它没有任何区别; 特别是如果它是阻塞的,如“暂停”或“读取”。但是,如果进程1只是在运行CPU时间,在没有任何I / O或任何其他外部交互的情况下进行大量计算,该怎么办?客户操作系统调度程序(内核)如何获得控制权?是否使用主机系统功能(如“报警”)定期重新获得控制权?或硬件加速虚拟化是否允许在VM运行时发生的时钟中断由来宾内核而不是主机内核处理?
Scott

@Scott从客户的角度来看,它在普通机器上的运行方式相同。它要求时钟中断,并且据它所知,它可以获得它们。主机模拟这些时钟中断的方式与模拟客户需要的其他内容的方式相同。
大卫施瓦茨2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.