首页
社区
课程
招聘
[翻译] 虚拟化是如何工作的(第一部分 虚拟化控制结构)
发表于: 2018-12-28 17:52 8135

[翻译] 虚拟化是如何工作的(第一部分 虚拟化控制结构)

2018-12-28 17:52
8135

在上一部分,我们讨论了虚拟机的生命周期。

那么,虚拟机的处理器怎样获取客户机配置信息?加载哪些寄存器、中断或CPU指令会导致VM-Exit?

VMM通过调用虚拟化控制结构(VMCS)获取这些信息,它存储着所有配置信息和必须遵守的规则。VMCS的结构是怎样的呢?

MSR

VMCS ID的第31位用于标记它是否为已存在VMCS的自更新副本(对我们不重要)。第32到63位总为0,除非在VM-Exit时出错。

其余部分是真正重要的部分。

还记得吗,虚拟机关闭时,处理器要保存客户机所有寄存器的值和其他一些信息。这些信息都保存在此区域。例如:

这部分用于定义允许客户机处理的内容,以及导致VM-Exit的条件。

(1)中断

中断,即处理器通过硬件或某些软件产生的中断。比如,当长按电源键时,会发送一个中断请求(IRQ)给处理器。CPU在中断描述符表(IDT)中查找该中断请求,并执行该条目指向的指令,启动一个快速关闭程序。其他情况下,还会调用蓝屏等其他程序。

(2)基于处理器的执行控制

设置这些标志位可以标志一些导致VM-Exit的指令。例如:对控制寄存器03和08进行读写,使用I/O指令,读写本地描述符表,运行指令时退出。

注释:不是所有处理器都支持英特尔手册的所有设置列表。比如Xen需要在设置前读取MSR。

(3)其他

你可以定义VMM是否使用位图。什么是位图呢?位图就像位数组,每一位表示一个中断、一个MSR或一条I/O指令。例如,客户机在CPU上运行时发生了一个中断,处理器在位图中查找相同位。如果是1则VM-Exit,如果是0则不是VM-Exit。当客户机使用MSR或I/O指令时,过程也一样。

这部分主要用于定义,VM-Exit时,需要加载和保存哪些寄存器

(主要是MSR和调试寄存器)

这部分用于列出虚拟机启动时需要调用或保存的寄存器。但是在此之上,VMM可以指定中断注入到客户的执行流中,只需在中断描述符表中指定条目。之后处理器会准备该中断必要的寄存器,并在返回到非根模式时执行中断处理程序。

VMCS保存在内存中什么位置,完全取决于处理器(研究人员已经找到在内存中定位VMCS的方法)。所以要读写VMCS,需要调用VMREAD/VMWRITE函数。

再回忆一下这些配置。

在处理器执行客户机代码之前,VMM可以控制客户机的整个环境,包括:寄存器,中断,IO相关东西,以及内存(第二部分讲解)。所以VMM控制所有基础的硬件字符串。Xen、KVM和Hyper-V等管理程序都运行在上面,提供一种更抽象、更简单的方法来控制虚拟机。


这是本系列文章的第一部分,如果有什么问题或者需要了解更多细节,请联系我。

如果你想开发一个基础的管理程序,可以参考链接:https://rayanfam.com/topics/hypervisor-from-scratch-part-1/(此文已由sudozhange翻译,链接:https://bbs.pediy.com/thread-246580.htm) 



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//