初识openstack之0,虚拟化及Xen和KVM介绍

  

一、CPU虚拟化

  

<强> 1。CPU的工作机制
随着云计算的兴起,虚拟化作为云计算的组成部分也火了一把,但虚拟化并不是什么新技术,早在上世纪60年代虚拟化技术就已经出现.X86的CPU架构有4个保护环,分为:环0 - 3环,环0只与内核通信,执行特权指令,而环3工作在用户空间,环1、环2预留,每当用户空间发起特权请求时,会立即激活内核空间,此时用户与内核空间的切换称为软中断,用户空间的所有特权指令都必须通过系统调用的方式来完成,CPU虚拟化按照工作机制的不同分为全虚拟化,半虚拟化和硬件辅助虚拟化3种。
初识openstack之0,虚拟化及Xen和KVM介绍”> <br/> <强> <em> 2。全虚拟化</em> </强> <br/>在传统架构下,应用程序会直接向环0上的内核发起系统调,用此时系统由用户空间转为内核空间的过程称为软中断,当硬件执行完指令时会通知内核的过程称为硬中断。在全虚拟化架构下,虚拟机监控程序运行在环0,客人系统运行在环1,但它以为自己运行在环0,当客人系统的应用向内核发起系统调用时会发生异常(特权指令无法在环1运行),程序会捕获到这些异常,在异常里面做翻译,模拟,而后的特权指令会在环1和0之环间转换,最后返回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。硬中断结果返回时先经过虚拟机监控程序,再由Hypervisor通知客人内核。<br/> <img src=

  

二,内存虚拟化

  

所有操作系统的内存都是以虚拟内存的方式提供,内存虚拟化很象现在的操作系统支持的虚拟内存方式,所以先来介绍下虚拟内存的实现方式:每个应用程序在运行时需要一段连续的地址空间,如果如实按照应用程序要求的地址空间提供的话,内存中会出现很多碎片,所以内核采取虚拟内存的方式,将物理内存以4 k为一个单位进行分页,应用程序以为自己获得的是一片连续的地址空间,实际上是若干个内存页组成,每个内存页上都以双向链表的方式标明自己上一个和下一个内存页的位置,而内存虚拟化则是再这个基础上再做一次分页,所以客人系统的内存到物理内存就要经过2次映射,GVA(客人虚拟地址)——GPA(客户物理地址)——HPA(主机物理地址)。
初识openstack之0,虚拟化及Xen和KVM介绍”> <h2 class=初识openstack之0,虚拟化及Xen和KVM介绍