CPU 虚拟化的常见方式
2012-06-07 12:32
120 查看
CPU虚拟化是将一个物理的CPU虚拟成多个虚拟CPU供虚拟机使用。
在传统的X86指令集中,CPU有4个特权级(0-3),第0级用来运行操作系统,拥有最高的特权,第3级用来运行应用程序,拥有最低的特权级。
虚拟机运行的过程中,通常VMM作为管理组件,运行在宿主机的操作系统中,拥有最高特权级别,而虚拟机上的操作系统就职能运行在第3级别了。
但是,操作系统中的某些指令,只能运行在最高特权级别,因此运行在第3级别的guest操作系统如何去执行那些只能在第0级才能运行的特权指令,就成为一个急需解决的问题。
根据实现机制的不同,这一过程分为三类:
(1)基于模拟执行的CPU虚拟化,也就是所谓的全虚拟化。
当VMM捕获到guest操作系统需要执行的特权指令时,用本地物理CPU的指令对该特权指令进行模拟运行,并将结果返回给guest操作系统。
这中方式的一个优点就在于,它可以虚拟出与本地物理CPU指令集不同的虚拟CPU
如kvm, vmware
(2)操作系统辅助虚拟化,也就是所谓的半虚拟化
将guest操作系统中的特权指令通过hypercall的方式进行改写,类似于系统调用
这种方式需要修改guest操作系统,
如xen
(3)硬件支持的虚拟化
现如今常见的处理器都支持,intel为 Intel VT-x, AMD 为 SVM
在通常的CPU基础之上,增加了一个新的模式,通过CPU模式的切换来执行那些特权指令。
在传统的X86指令集中,CPU有4个特权级(0-3),第0级用来运行操作系统,拥有最高的特权,第3级用来运行应用程序,拥有最低的特权级。
虚拟机运行的过程中,通常VMM作为管理组件,运行在宿主机的操作系统中,拥有最高特权级别,而虚拟机上的操作系统就职能运行在第3级别了。
但是,操作系统中的某些指令,只能运行在最高特权级别,因此运行在第3级别的guest操作系统如何去执行那些只能在第0级才能运行的特权指令,就成为一个急需解决的问题。
根据实现机制的不同,这一过程分为三类:
(1)基于模拟执行的CPU虚拟化,也就是所谓的全虚拟化。
当VMM捕获到guest操作系统需要执行的特权指令时,用本地物理CPU的指令对该特权指令进行模拟运行,并将结果返回给guest操作系统。
这中方式的一个优点就在于,它可以虚拟出与本地物理CPU指令集不同的虚拟CPU
如kvm, vmware
(2)操作系统辅助虚拟化,也就是所谓的半虚拟化
将guest操作系统中的特权指令通过hypercall的方式进行改写,类似于系统调用
这种方式需要修改guest操作系统,
如xen
(3)硬件支持的虚拟化
现如今常见的处理器都支持,intel为 Intel VT-x, AMD 为 SVM
在通常的CPU基础之上,增加了一个新的模式,通过CPU模式的切换来执行那些特权指令。
相关文章推荐
- CPU虚拟化的常见技术
- 常见物理CPU个数逻辑CPU个数计算方式
- java使用递归,非递归方式实现二叉树的三种常见遍历方式
- bluestacks模拟器常见四大安装失败原因和解决方式
- [置顶] Java数据采集-4.分析常见的翻页(加载数据)方式
- 数据库常见的join方式有三种
- 常见错误解决方式
- 几种常见的xml解析方式 SAX,DOM,PULL以android为例
- 02-struts2结果常见的四种处理方式
- Java中常见图形绘制方式与实现
- Android中ListView的几种常见优化方式
- 常见网络攻击方式
- 关于Maven中的常见命令,通过命令的方式快速创建一个空的maven工程,将jar包打到maven仓库中
- JSON的两种常见解析方式
- Oracle几种常见启动方式比较
- 四种常见的 POST 提交数据方式
- robot framework接口测试之二-四种常见的POST提交数据方式
- 四种常见的POST提交数据方式
- Intel X86 CPU 系列的寻址方式与段式内存管理机制