这两天一直在看cpu虚拟化,小总结一下吧,算个概述。
cpu虚拟化要解决的关键问题:
1、指令的模拟。
2、中断异常的模拟。
3、多处理器的模拟。
指令模拟:
在之前谈到x86架构内存的时候我说道过敏感指令,这里不再多叙述。VMM在做的一个关键事情就是捕获敏感指令,然后进行处理,这应该就是虚拟cpu中关键的一步,对敏感指令的模拟。但是由于要虚拟化后我们是要用一台物理硬件虚拟化出20个甚至更多的客户机。可是如果这些机子都在使用敏感指令,那么真实的物理CPU会处理不过来(我是这样理解的,因为CPU的寄存器有限,无法同时快速处理那么多)于是出现了虚拟寄存器。将这些虚拟的寄存器放在内存中。每台客户机对应一个寄存器,这样当VMM捕获敏感指令后将这些敏感指令和内存中的虚拟寄存器进行内容的交换。那么如何捕获这些指令呢?
可以通过让这些敏感指令发出异常信号,然后VMM捕获异常。也可以通过陷阱,就是满足某些条件时由陷阱给出异常。,再有就是后面说的中断,通过中断使VMM执行终端服务程序。
当然指令模拟的内容还有很多。不一一叙述。。。
中断异常的模拟:
正如我上面说的,中断和异常常常是VMM捕获敏感指令的重要信号,所以,VMM模拟当然也要将这两部分模拟好,否则会出现问题。这部分主要依靠一些“门事件”还有就是准确模仿物理cpu处理中断和异常的状态。
多处理器的模拟:
这个技术在最开始的系统虚拟化中是没有的,但是经过了许多高手的模拟,使多处理器虚拟化称为了可能,俗称SMP技术。这部分的关键是多处理器的同步与协调问题。以及在启动加载程序的时候多处理器会和单处理器有所不同。
阅读(2467) | 评论(0) | 转发(0) |