当前位置:首页 > 虚拟化 > 正文

虚拟化技术难不难(vm一键去虚拟化工具)


一、硬科技:为何x86的虚拟化这么难搞(下)

初步总结。现在我想大家对于处理器虚拟化的看法无非是“让操作系统成为应用程序,虚拟机管理器取代了操作系统的角色。不过,还有异常处理机制可以作为最后一道防线。””好吧”,但得益于x86指令集的发展历史,它有先天的缺点和后天的不平衡,所以处理起来非常困难,因为一些用户态的x86指令也有机会“越界”而降低

让我们看看1974年创建的“Popek和Goldberg虚拟化要求”是如何定义的,用于验证计算机架构是否可以有效地虚拟化

。:不改变系统状态的机器指令应该直接使用底层硬件执行,无需干预。资源控制:VMM(虚拟机管理器)完全控制破坏系统稳定性的虚拟资源行为,然后将其替换。不会造成伤害的东西。等效性:在VMM上运行的操作系统的行为与在本机硬件上运行的行为相同。

只要所有改变底层系统状态的关键(敏感)命令都应该包含在系统命令(特权)范围内,操作系统在虚拟机上执行的任何“有害行为”都会触发处理器的异常处理机制和VMM陷阱(Trap)可以绕过它并用安全命令代码替代它。

不幸的是,x86指令集中的18条用户模式指令和大部分I/O指令都不符合上述标准。最著名的案例是POPF命令更改了InterruptEnableEFLAGS字段,该字段在用户模式下不会被激活,但不会引发异常。无论是改变系统底层状态还是处理器不执行,都不会引发异常。这个命令在独立操作系统上不会产生问题,但对于虚拟化来说却是一个巨大的头疼问题。也就是说,必须先抓住这些“麻烦制造者”,然后通过软件模拟或二进制翻译(BinaryTranslation)等手段取而代之,以保证系统的稳定性。

所以在IntelVT-X“Vanderpool”和AMD-V“Pacifica”等硬件辅助虚拟化技术(HardwareAssisted)出现之前,只有两种方法可以实现有效的x86处理器路径:

全虚拟化:像VMware早期的虚拟机监控器(VMMonitor)一样,它会监控用户操作系统的命令代码,首先找到这些有问题的命令,然后使用二进制代码机制(.BinaryTranslation)进行转换它们到安全脚本,但这会降低性能。半虚拟化:修改操作系统代码并替换导致问题的指令,以便所有指令都可以在处理器上本机执行。然而,不同的操作系统需要对不同的虚拟机软件进行不同程度的修改,导致兼容性受到损害,如果微软Windows永远不开放源代码,那就根本没有机会。

坦白说,硬件辅助虚拟化技术所做的就是“弥补”,通过添加新的权限级别和“拦截网络”来阻止这些不受控制的命令,然后允许虚拟机管理器执行类似的操作。系统陷阱机制以确保操作系统作为应用程序不会使每个人崩溃的方式启动系统调用。

前面提到了提高切换速度的“执行数据结构”(TSSforx86)和提高应用程序与操作系统、IntelVT-x和AMD之间交互的“标准系统调用接口”-V分别将数据结构VMCS(VMControlStructure)和VMCB(VMControlBlock)定义为x86虚拟化技术的TSS。每当处理器更改、重新启动或退出操作系统时,处理器首先加载并更新其数据。由于它享受原生硬件加速,并且可以使用新增的虚拟机管理命令,因此可以让操作系统反向认识到“原来脚下有公共土地”,加强了操作系统与虚拟机管理器的交互,减少不必要的切换,提高执行效率。

然而,IntelAMD不同努力的结果是,虚拟机管理器开发者将陷入困境,要实现“不停动态传输”将是一项不可能完成的任务。

费了九牛二虎之力,绕了一大圈,终于让x86处理器能够有效虚拟化,但是这些年编译出来的x86虚拟化技术却没有那么简单。敬请期待本专栏,科科科科。

追踪硬科技王者硬件世界考古历险
二、请大神介绍一下虚拟化可以划分为哪些类型,各种类型有什么优缺点以及有什么代表性的产品?目前,虚拟化主要分为三种类型,分别是托管虚拟化、裸机虚拟化和操作系统虚拟化。
托管虚拟化是通过直接安装运行应用程序来实现的,因此最大的优点是易于实现,但由于主机操作系统对设备的支持,性能损失较大。实现此类虚拟化的产品主要有VMwareworkstation和virtualPC。
操作系统虚拟化易于实现,相对易于管理,启动速度快。实现此类虚拟化的产品主要有Docker。裸机虚拟机独立于操作系统,可以同时支持多个操作系统和多个应用程序。问题比较高。实施此类虚拟化的供应商必须具备一定的技术技能。国外最有名的有VMwareVsphere,以及国产的云宏CNware等。
而且,随着国家安可战略的实施以及对网络数据安全的重视,服务器虚拟化尽量选择国产产品。