基础知识
虚拟机技术
- 虚拟机就是通过软件在宿主机上虚拟出一台计算机。虚拟机技术是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。一般所指的虚拟化资源包括计算能力和数据存储。
- 虚拟机技术实现了一台计算机同时运行多个操作系统,而且每个操作系统中都有多个程序运行,每个操作系统都运行在一个虚拟的CPU或虚拟主机上。虚拟机技术需要 CPU、主板芯片组、BIOS和软件的支持,如VMM软件或者某些操作系统本身。
虚拟机监视器VMM (Virtual Machine Monitor)
- 虚拟机技术的核心是虚拟机监视器VMM (Virtual Machine Monitor) , VMM也称为Hyper visor. VMM的作用是向底层分配访问宿主机的硬件资源,向上管理虚拟机的操作系统和应用程序。它是一个宿主程序,该程序是一层位于操作系统和计算机硬件之间的代码,用来将硬件平台分割成多个虚拟机,实现一台计算机支持多个完全相同的执行环境。每个用户都会感觉到自己在一台独立的、与其他用户相隔离的计算机上进行操作,尽管事实上为每个用户提供服务的都是同一台机器。
- 在此种情况下,一台虚拟机就是由一个潜在的控制程序管理的操作系统。VMM为每个客户操作系统虚拟一套独立于实际硬件的虚拟硬件环境(包括处理器、内存、I/O 设备等)。VMM采用某种调度算法在各个虚拟机之间共享CPU, 如采用时间片轮转调度算法。
操作系统内核
- “内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。
CPU特权级别
- 在操作系统和计算机体系结构中,CPU Ring 0-3是特权级别或执行环级别。这些特权级别用于控制和管理计算机系统的访问权限和安全性。在x86架构中,通常有四个特权级别,也称为四个环(rings)。每个环都有不同的权限和访问级别。不同架构的CPU特权级别设置不同。
- 以x86为例,CPU Ring 0-3权限依次递减。
- Ring 0是操作系统内核运行的特权级别。在这个环级别下,操作系统具有最高的权限,可以访问所有的硬件资源和指令。操作系统在Ring 0中运行,以便执行敏感和特权操作,如管理内存、硬件设备、进程调度等。用户程序不能直接运行在Ring 0级别。Ring 3(用户态):
- Ring 3是用户程序运行的特权级别。在这个环级别下,用户程序只能访问有限的资源,不能直接执行敏感的特权指令。这样设计是为了保护操作系统的稳定性和安全性。绝大多数应用程序在Ring 3级别下运行,包括图形界面、浏览器、办公软件等。
- 某些设备驱动程序可能运行在Ring 1或Ring 2中,以区分其权限和访问级别。
- 从Ring 3到Ring 0通常通过系统调用。
虚拟和模拟
- 在虚拟化环境中,通常虚拟跟模拟是两个概念,VMWare的动态二进制翻译技术(BT)是虚拟的而QEMU软件技术是模拟的。最大的区别在于,模拟通过软件实现时需要模拟CPU ring 0-3,也就是需要转换CPU ring 0-3所有的指令,而虚拟只需要转换CPU ring 0特权指令即可。
虚拟化
CPU虚拟化
基于二进制翻译(BT)的全虚拟化
- 客户操作系统运行在 Ring 1,它在执行特权指令时,会触发异常(CPU的机制,没权限的指令会触发异常),然后 VMM 捕获这个异常,在异常里面做翻译,模拟,最后返回到客户操作系统内,客户操作系统认为自己的特权指令工作正常,继续运行。
半虚拟化
- 修改Guest OS内核,使Guest OS知道自己是虚拟机,从而使Guest OS会将和特权指令相关的操作都转换为发给VMM的Hypercall(超级调用),由VMM继续进行处理。这样以来,就不会有捕获异常、翻译、模拟的过程了,性能损耗非常低。
硬件辅助虚拟化
- 主要是Inter的VT-x 和 AMD-V 这两种技术。让VMM和Guest OS分别运行在root模式和非root模式下,让Guest OS的一般指令可以直接发送到硬件,而特权指令会切换到VMM去执行。