首页 文章

如何在没有硬件支持的情况下实现机器虚拟化

提问于
浏览
1

这是参考机器虚拟化 . 我正在进行虚拟化并了解通过硬件辅助虚拟化技术,特权指令通过陷阱故障方法识别,并在运行时替换为等效的用户级指令 . 但是,如果没有硬件支持,虚拟化是如何实现的?在英特尔VTi或AMD-V之前,特权指令是如何被软件本身捕获的?无处不在:使用“二进制转换”术语,只要用用户指令替换特权指令就可以了,但是如何通过虚拟化工具(hypervisor / vmm)识别来宾os运行的特权指令


edit :有些人认为这个问题没有表现出研究成果,而且正在进行投票 . 这些是我经历过的一些论文

概述:https://www.vmware.com/pdf/virtualization.pdf

英特尔文件:https://software.intel.com/sites/default/files/m/d/4/1/d/8/An_Introduction_to_Virtualization.pdf

介绍:http://www.kernelthread.com/publications/virtualization/

x86虚拟化http://en.wikipedia.org/wiki/X86_virtualization

hw sf虚拟化的比较:http://www.vmware.com/pdf/asplos235_adams.pdf

螺母和螺栓:http://www.anandtech.com/show/2480

半虚拟化:http://en.wikipedia.org/wiki/Paravirtualization

如果有人有任何纸张/来源可以回答上面提到的问题,我可能会错过亲切的回应 .

2 回答

  • 2

    在没有硬件支持的情况下,可以使用paravirtualization . 修改客户操作系统,以便不直接访问某些硬件资源,而是调用虚拟机管理器(VMM)或管理程序 .

    例如,不允许x86上的客户机操作系统禁用实际CPU上的中断 . 相反,来宾操作系统调用VMM来模拟禁用中断 .

    另一种选择是native virtualization . 在本机虚拟化中,来宾操作系统及其进程的指令是 emulated . 仿真层允许像cli这样的特权指令由虚拟化软件处理 . 因此,本机虚拟化既不需要硬件支持也不需要修改客户OS .

  • 2

    如果您没有硬件虚拟化,并且您不想考虑半虚拟化,则另一种选择是二进制转换 . x86的问题(我假设是在讨论x86)是有一些非特权的敏感指令(See Popek and Goldberg virtualization requirements) . 在这个意义上,我认为它会导致从用户到内核模式的陷阱 . 由于这些指令位于来宾内核(以用户空间权限作为来宾运行)中,但不会导致退出,因此可能会出现问题 . 例如,popf的行为会有所不同,具体取决于它是在用户还是内核中调用(英特尔参考手册第2卷,请参阅popf部分) . 因此,当guest虚拟机执行popf时,我们希望VM退出,但不会 . 在二进制转换中,我们基本上扫描内核二进制文件,并将与敏感非特权指令相对应的所有机器代码替换为执行正确仿真的机器代码,或者更可能导致VM退出,以便管理程序可以进行干预 . 在_3037567中可以找到一点这一点 . 我能找到的大多数其他文档都能解释任何深度的二进制翻译都是付费墙 .

相关问题