虚拟化的定义
虚拟化就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟环境上。
虚拟化的分类
- 硬件抽象层上的虚拟化
- 操作系统层上的虚拟化
- 函数库层上的虚拟化
- 编程语言层上的虚拟化
硬件抽象层上的虚拟化
–通过虚拟化硬件抽象层来实现虚拟化,为客户机操作系统提供相同或相近的硬件抽象层;
–相同的指令集;
–特设指令由虚拟化软件进行处理;
–中断控制器、设备等可以是完全不同的抽象层;
–VMWare、Xen;
操作系统层上的虚拟化
– 操作系统的内核可以提供多个相互隔离的 用户态实例(容器);
– 想一想chroot;
– 每个容器有独立的文件系统、网络、函数库等;
– 灵活性小,Guest OS 相同;
– 隔离性稍差
– Virtuozzo (VPS)OpenVZ;
函数库层上的虚拟化
– 通过虚拟化操作系统的应用级函数库的服务接口,支持不 同的应用程序;
– WINE,在Linux环境下支持Windows程序的执行环境;
–Cygwin,在Windows环境下支持Linux程序的执行环境
编程语言层上的虚拟化
– 进程级的虚拟执行环境;
– 代码翻译为硬件机器语言;
– JVM;
– 跨平台;
虚拟化的优点
• 封装(逻辑化) –快照、克隆、挂起、迁移
• 多实例 –计算资源的充分利用率、绿色节能、降低成本
• 隔离
• 硬件兼容
• 虚拟化层特权 –入侵检测、病毒防护、细粒度IO控制
虚拟化的缺点
• 性能:虚拟化是对计算资源的分割;
• 错误:虚拟化层的引入增加了系统出错层面;
• 安全:虚拟化会带来一些安全隐患;
• 影响:一台服务器宕机会影响其上所有虚拟机;
• 复杂:带来管理上的复杂性;
虚拟化原理
虚拟化软件对物理资源的虚拟可以归结为三个主要任务:处理器虚拟化,内存虚拟化,I/O虚拟化。
处理器虚拟化
指令的模拟
传统方式:
1.操作系统内核运行在RING0;
2.对CPU有完全控制权;
3.直接读写寄存器,执行指令流;
4.直接切换上下文;
虚拟化以后:
1.客户操作系统内核运行在RING1;
2.VMM运行在RING0;
3.VMM为每个虚拟机开辟内存作为虚拟寄存器;
4.VMM切换整个虚拟处理器上下文;
5.客户操作系统在虚拟处理器中切换进程上下文;
内存虚拟化
操作系统对内存的要求:
1.从物理地址0开始;
2.内存是连续的;
VMM要做的是:
1.维护客户机物理地址到宿主机物理地址的映射;
2.截获虚拟机对客户机物理地址的访问并转换为宿主机物理地址;
计算机I/O原理
1. I/O端口寄存器被映射到I/O地址空间
2. 中断模块向中断控制器发出中断信号
3. 处理器中断当前指令流,通过IDT查找对应的中断服务程序
4. 通过I/O访问端口执行I/O操作
5. 在DMA情况下,MMIO寄存器会映射到物理地址空间,通过页表的方式来进行访问
I/O虚拟化
1. 设备发现:VMM提供一种方式,让客户操作系统发现虚拟设备,加载相关驱动
2. 访问截获:VMM截获客户机操作系统对虚拟设备的访问,并进行模拟
3. 设备模拟
4. 设备共享
VMM的功能和组成 (virtual machine monitor )
管理虚拟环境
– 虚拟资源
• 处理器虚拟化模块
• 内存虚拟化模块
• 设备虚拟化模块
– 虚拟环境调度
• 虚拟处理器上下文调度
– 虚拟机间通信
• 特权域与虚拟机之间的通讯
• 普通虚拟机之间的通讯
– 虚拟环境管理接口
• 为用户提供管理界面
管理物理资源
– 处理器管理
– 内存管理
– 中断管理
– 系统时间维护
– 设备管理
其他模块
– 软件定时器
– 电源管理
– 安全机制
– 多处理器同步原语
– 性能采集和分析工具
– 调试工具
VMM的分类
按虚拟平台分类
– 完全虚拟化(虚拟的平台和现实的平台一样)
• 软件辅助的完全虚拟化
• 硬件辅助的完全虚拟化
– 半虚拟化(虚拟的平台和现实的平台不一样)
按VMM实现结构分类
– Hypervisor模型
– 宿主模型
– 混合模型
虚拟化产品简介
• Vmware
– Hypervisor模型
– 面向企业级的产品
– 支持完全虚拟化和半虚拟化支持Intel VT和AMD-V技术
• KVM
– 开源(GPL)
– 基于Intel-VT技术的硬件虚拟化
– I/O虚拟化借用了QEMU
– 宿主模型
• Xen
– 开源(GPL)
– 混合模型
– 支持Intel VT和AMD-V技术
– 支持完全虚拟化和半虚拟化
– I/O虚拟化借用了QEMU