虚拟化
什么是虚拟化?
虚拟化是一种资源管理的技术,是将计算的实体资源,如服务器、网络、内存、以及存储,抽象、转换后呈现出来。虚拟机共享实体机的cpu、内存、IO、硬件资源,但是逻辑上虚拟机之间又是相互隔离,解决高性能硬件产能过剩和老旧机器硬件产能过低的重组重用,从而达到物理硬件利用最大化。
虚拟化分类
全虚拟化
全虚拟化也称为原始虚拟化技术,Hypervisor机协调guest操作系统和原始硬件,VMM在guest操作系统和裸硬件之间用于工作协调,受保护的指令必须有Hypervisor(虚拟机管理程序)捕获处理,运行速度快于宿主机性能(Guest OS认为自己是一个独立的机器)。
半虚拟化
类似于全虚拟化技术,使用Hypersior分享底层硬件,但是它的guest操作系统集成了虚拟化的代码(Guest OS修改了敏感指令和核心态指令),无需重新编译或者引起缺陷,操作系统自身能够与虚拟进程进行很好的协作,半虚拟化提供了与原操作系统性能相近。(修改了内核指令Guest OS不能公用)
半虚拟化的产生
x86体系是导致半虚拟化技术产生的重要原因,下面我们先提一下特权指令和敏感指令
特权指令:操作和管理系统资源的指令,这些指令只有在最高特权级才能运行。如果在非最高特权级运行,特权指令会引发异常,处理器陷入最高特权级,然后由系统软件处理。但并不是所有特权指令都会引发异常(x86系统中的特权指令会有这种问题)。
敏感指令:传统机器只有特权指令和普通指令这两种概念,虚拟化的机器会有一个独特的概念,它就是敏感指令。敏感指令是指在虚拟化时必须在最高特权级运行的指令。在RISC体系中所有的特权指令都是敏感指令,可以支持全虚拟化,但是x86体系中部分敏感指令不是特权指令那么这些非特权的敏感指令在运行过程中就会发生异常,半虚拟化就是为了捕获非特权的敏感指令,使得非特权的敏感指令在最高特权级执行。