虚拟化
本质:通过添加虚拟化层将物理设备进行逻辑化,转化成一个文件夹或文件,实现软硬件解耦
核心思想:利用软件或固件管理程序构成虚拟化层,把物理资源映射车虚拟资源。在虚拟资源上可用安装和部署多个虚拟机,实现多用户共享物理资源。
计算机系统的各个抽象层:
- 应用程序
- 库函数
- 操作系统
- 硬件
应用程序、库函数、操作系统间构成API抽象层,操作系统、硬件间构成硬件抽象层。
由位于下层的软件模块,通过向上一层软件模块提供一个与它期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可用直接运行在虚拟的环境上。
虚拟化的不同层级
- 应用程序:VMWare、ThinApp、JVM、.NET、CLR……
- 程序库API:WINE、WABI、LxRun……
- 操作系统:Jail、Virtual Environment……——在操作系统中插入一个虚拟化层,一个操作系统内核运行多个虚拟机
- 硬件级:VMWare、Virtual PC、Xen……——用于虚拟化基础设施:CPU、内存、存储、IO、网络
- ISA:Bochs、Crusoe、BIRD……——通过物理主机的ISA模拟一个给定的ISA。基本方式:代码解释
代表产品
VMware
- VMware vSphere:安装在裸机上的强大服务器,可用同时运行多台虚拟机
- VMware Workstation: 在Windows或Linux上运行的应用程序,可以安装操作系统,模拟x86标准PC环境
Xen
需要对操作系统进行显式修改才能运行。
可以在不停止的情况下在多个物理主机之间实时迁移。
KVM
Kernel-based Virtual Machine
需要安装操作系统,在操作系统里面实现虚拟机监控程序。
LXC
Linux容器
三种虚拟机的比较:
- 性能:LXC>KVM>XEN
- 隔离:XEN>KVM>LXC
- 内存利用率:LXC>KVM>XEN
Docker
硬件虚拟化
添加一个称为虚拟化层的软件,管理客户操作系统,使其能够独立于主机操作系统同时运行在同一个硬件上
- Hypervisor
- Virtual Machine Monitor(VMM)
虚拟机可以看作物理机的一种高效隔离的复制。
三个要求:
- 同质:为程序提供与原始硬件机器基本一致的环境
- 高效:运行在该虚拟硬件环境中的程序性能损失应该较低
- 隔离:系统资源应该处于VMM的完全控制之中
优势
封装性
以虚拟机为粒度的封装使得虚拟机运行环境的保存非常便捷
- 虚拟机快照
- 虚拟机克隆
- 虚拟机挂起和恢复
保存、部署更加方便,从而使得软件开发、测试和调试更加便捷;降低IT管理和维护成本
多实例
提高计算机性能利用率,降低计算机资源消耗
不同的服务器有不同的繁忙和空闲时段,将多个物理服务器合并到少数服务器上以虚拟机运行,使用更少的服务器获得同样的整体性能,通过虚拟机的忙闲交错大大提高资源利用率,节约资源成本
隔离
虚拟机中的应用程序可以在自己的操作系统中独立的运行,不影响其他工作负载,提高安全性、适用于测试场景
硬件无关性
屏蔽硬件差异,无缝跨硬件迁移;云计算环境中虚拟机迁移是非常重要的
特权功能
在虚拟化层添加特权功能的优点:不能被客户机绕过、更容易实现
事件记录和回放——入侵检测、病毒检测等
条件
客户机操作系统的敏感指令都是特权指令才能实现虚拟化——陷入VMM
或者客户机系统的所有指令全部由VMM执行
对象
CPU
- 任意时刻一个物理cpu只能运行一个虚拟cpu
- 每个客户操作系统可以使用一个或多个虚拟CPU
- 各个操作系统之间虚拟CPU运行相互隔离,互不影响
调度:VMM决定当前哪个虚拟CPU在物理CPU上执行,保证隔离、公平和性能
执行:虚拟CPU正确运行是保证虚拟机指令正确运行,实现技术包括模拟执行和监控执行
基于软件
模拟执行:慢
监控执行:非敏感指令之间交给硬件执行
实现方式有解释执行、扫描与修补、二进制翻译(JIT)
一切为VMM掌控,底层硬件与上层用户操作系统互不知晓
基于硬件
硬件中加入针对虚拟化的支持,,使得系统软件更加容易高效地实现虚拟化功能
根操作模式:VMM运行所处的模式
非根操作模式:客户机运行所处的模式
改操作系统的类虚拟化
修改暴露给虚拟机的硬件抽象以及上层操作系统,使得修改后的客户机操作系统与VMM配合实现虚拟化;修改后的操作系统能够意识到虚拟环境的存在
类虚拟化的优势:
- 通过消减冗余代码、减少地址空间切换和跨特权级切换、减少内存复制等,减少额外开销,提高性能
- 一定程度上消除了虚拟层和上层操作系统间的语义鸿沟:操作系统内部运行状态能够被VMM获得
- 使得硬件抽象层的抽象高度更加灵活,为实现各自不同功能的硬件抽象探索出了可行的路径
内存
基于软件
虚拟内存空间、虚拟地址GVA——客户机操作系统内页表——>客户机物理内存、客户机物理地址GPA——虚拟物理地址页表——>宿主机物理内存空间、宿主机物理地址HPA
影子页表:用于直接将客户机操作系统虚拟地址翻译为宿主机物理地址