最为称赞的是XEN的内存虚拟化技术,因为xen是半虚拟化方案。
这里需要科普一个概念,页表是由操作系统来管理的,而MMU是内存管理单元,做地址翻译的,将虚拟地址转换成物理地址。TLB是做页表的缓存,因为如果让CPU访问页表,时间会比较长, 因为这个时候要访问内存,而CPU访问TLB,TLB在处理器的内部,所以访问时间很短。由于每个页表项都包含了该页是否在内存中等详细的信息,所以发生缺页,系统会产生缺页中断,从内存中将数据读出来。MMU只能做一个逻辑地址,转换成物理地址。
虚拟机并不知道实际内存的总线地址,这个只有宿主机才会知道,如果每次访存都需要VMM的介入,那么访存的性能将会严重下降。
半虚拟化的方法是修改操作系统的代码,剥夺了guest os的写页表的权利,由于VMM知道了所有的映射关系,所以直接将机器地址写入到guest os的页表中实现页表的虚拟化。
内存的全虚拟化方案是采用影子页表的方法,采取了将虚拟机的物理地址到中线地址的映射关系转换到了VMM层,VMM为每一个页表都准备了一个影子页表,VMM将影子页表的转换工作交给了MMU来进行地址转换。
阅读(3043) | 评论(0) | 转发(0) |