x86 - 没有硬件支持如何实现机器虚拟化

标签 x86 operating-system virtual-machine virtualization itanium

这是关于机器虚拟化的。 我正在经历虚拟化并了解到借助硬件辅助虚拟化技术,特权指令通过陷阱故障方法识别,并即时替换为等效的用户级指令。但是在没有硬件支持的情况下如何实现虚拟化?在 Intel VTi 或 AMD-V 之前,特权指令是如何被软件本身捕获的?到处都使用:“二进制翻译”术语,就用用户指令替换特权指令而言这很好,但是虚拟化工具(hypervisor/vmm)如何识别 guest 操作系统运行的特权指令


编辑: 有些人认为这个问题没有显示出研究成果,因此投了反对票。这些是我浏览过的一些论文

概览: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

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

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

如果有人有任何论文/资源可以回答上面提出的问题,而我可能错过了,请回复。

最佳答案

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

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

另一种选择是 native virtualization .在 native 虚拟化中, guest 操作系统及其进程的指令被模拟。仿真层允许虚拟化软件处理诸如 cli 之类的特权指令。因此, native 虚拟化既不需要硬件支持,也不需要修改客户操作系统。

关于x86 - 没有硬件支持如何实现机器虚拟化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641784/

相关文章:

c - 在汇编器中将值从一个数组传递到另一个数组

memory-management - set_bh_page 对页面缓存中给定的缓冲区头到底做了什么?

c - 子进程 pid() 是否被分配给父进程?

c++ - 即使 CPU 数量增加,执行时间也会增加,为什么?

docker - Kubernetes集群上的Apache pulsar(本地环境)

macos - 无法从 OSX 主机上的 Ubuntu 客户机的串行端口读取数据

assembly - SYSRET 与 SYSRETQ 区别及兼容模式

assembly - 处理器如何知道程序结束?

配置网桥后 ubuntu KVM guest 没有网络连接

c - 为什么省略 printf 打印垃圾的参数?