文章目录
计算虚拟化相关概念及技术
计算虚拟化概念
什么是虚拟化?
虚拟化可以看作是一个抽象层,它打破了原本物理硬件和操作系统之间紧耦合的关系。
虚拟化可以将资源抽象成共享资源池,实现对资源的动态调度和管理。
本质上,虚拟化就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟环境上。
虚拟化的本质
分区:虚拟化层为多个虚拟机划分所需的服务器资源,每个虚拟机可以同时运行一个单独的操作系统。
隔离:虚拟机之间相互隔离(可以进行资源控制、性能隔离)
封装:意味着整个虚拟机(硬件配置、BIOS 配置、内存状态、磁盘状态、CPU 状态)都存储在一个文件夹当中,只需要复制文件,就可以实现虚拟机的移动、复制。
相对于硬件独立 :由于虚拟机运行在虚拟化层上,使用虚拟的硬件,不用考虑物理服务器的情况。因此在任何x86服务器上都可以无需任何修改的运行虚拟机。
计算虚拟化技术分类
根据虚拟化对象分类:
CPU虚拟化—为了虚拟机上的指令可以被正常执行
内存虚拟化—做到虚拟机之间的内存空间相互隔离,使它们都认为自己拥有整个内存空间
I/O虚拟化—让虚拟机可以访问到所需的I/O资源
根据虚拟化过程分类:
全虚拟化—使用VMM实现CPU、内存、设备I/O的虚拟化。(兼容性好,但处理器会产生额外开销。)
半虚拟化—使用VMM实现CPU和内存虚拟化,I/O虚拟化交给GusetOS实现。(因此需要修改操作系统内核,使得它们可以协同工作。兼容性差,只有Suse、Ubuntu等少数Linux系统支持。但性能比全虚拟化好)
硬件辅助虚拟化—借助硬件(主要为处理器)的支持来实现高效的全虚拟化。
CPU虚拟化
首先我们要考虑,CPU虚拟化需要解决哪些问题?
- 如何模拟CPU指令(敏感指令)
敏感指令:可以读写系统关键资源的指令
系统关键资源:处理器呈现给软件的接口是指令集和寄存器。而 I/O 设备呈现给软件的接口是状态和控制寄存器。这些都是系统的资源,其中影响处理器和设备状态和行为的寄存器称为关键资源 。
特权指令:绝大多数的敏感指令都是特权指令,特权指令只在处理器的最高特权级执行。 - 如何让多个虚拟机共享CPU
类似于原生操作系统的定时器中断机制。(中断:在计算机执行程序期间,系统发生了需要紧急处理的事件,cpu会立刻停止当前操作,转而去处理相应的中断处理程序。处理完毕后,返回原本被中断的位置继续执行。)
在CPU虚拟化场景下,当中断触发时陷入VMM,从而根据调度机制进行资源的调度。
全虚拟化可以分为软件辅助虚拟化和硬件辅助虚拟化。
(参考博客:https://blog.csdn.net/jmilk/article/details/51824935)
软件辅助虚拟化能够成功的将所有在GuestOS中执行的系统内核特权指令进行捕