现在的位置: 首页 > 综合 > 正文

X86平台虚拟化问题

2013年11月23日 ⁄ 综合 ⁄ 共 937字 ⁄ 字号 评论关闭

X86平台下,实现虚拟化需要解决哪些问题,经过这段时间的学习,根据自己的理解应该包括以下几个方面:

第一:CPU虚拟化。X86平台下,部分敏感指令不会自动陷入,从而Hypervisor无法自动捕获客户OS的敏感指令。这种情况当前主流解决方案有两种,即VMware的“二进制转换”,VMWare Hypervisor通过分析客户操作系统的所有指令,将敏感指令进行二进制转译,然后安全执行,另外就是修改客户机操作系统,Xen的准虚拟化方法就是修改Linux操作系统,通过向Xen HyperVisor进行调用,去处客户Linux中的敏感指令调用。 补充说明以下,现在AMD和Inter都针对这个问题推出了虚拟化的cpu,能够让所有的敏感指令能够自动被Hypervisor捕获,从而不需要修改客户操作系统。

 

第二:内存虚拟化。内存虚拟化当前有两种解决方案,其一是Hypervisor通过为每个客户OS维护一个影子页表,影子页表实现客户OS中的地址向主机OS的地址转换,Xen就是采用这种方法。另外一种就是直接修改客户OS的内存页表,从而让客户OS的内存地址能够正确映射到主机的内存地址。

 

第三:I/O虚拟化。PC机的外围IO设备有三种类型,分别是独占设备/共享设备(多个客户OS分时复用)/独立分配(比如硬盘)。

独占设备,比如系统时钟就是典型的独占设备,这种设备不能让客户OS访问,否则多个OS会产生冲突。所以只能是hypervisor进行模拟。不能让Guest OS直接访问真实的设备。其二就是共享设备,比如网卡,声卡就是这种分时复用,多个OS都尅通过网络发送数据,只是在网卡那里排队而已,网卡的缓冲区会顺序发送数据,而不管它是哪个Guest OS的。其三就是硬盘这种可以多个硬盘提供给不同的Guest OS独占。

 

以上就是最近学习虚拟化的一些简单的总结,这里有很多东西都没有详细说明,对于开始学习虚拟化的朋友理解起来会比较困难,后面会针对这些概念再做详细的说明。

 

需要详细说明的主要有以下几个:

1 影子页表机制,它是如何实现Guest OS 到主机OS的虚拟内存映射??

2 I/O虚拟化,XEN,KVM,VMWare等都是如何解决的,他们的解决方法有什么区别,性能特点如何?

3 独占设备如何模拟的?

 

抱歉!评论已关闭.