前言中曾提到:本章介绍PCI总线与虚拟化相关的一些内容。
目前,虚拟化技术在处理器体系结构中已经占据一席之地。虚拟化技术由来已久,其含义也较为广泛。多个进程共享一个CPU、多个进程的虚拟空间共享同一个物理内存等一系列在体系结构中已经根深蒂固的概念,都可以归于虚拟化技术。虚拟化的主要思想是,通过分层将底层的复杂、难用的资源虚拟抽象成简单、易用的资源,以提供给上层使用。本质上,计算机的发展过程也是虚拟化不断发展的过程。
虚拟化的思想存在于计算机科学中的各个领域。例如,CPU内部遍布的数字逻辑电路只能够识别二进制数据0和1,机器码是计算机唯一能识别的数据;汇编语言的出现让程序员能够比较简单地实现CPU的执行和内存访问;C语言的出现进一步方便了程序员,使得程序员可以从具体的CPU架构指令脱离出来,大部分情况下只需要考虑业务即可;Python、Java等现代高级语言更是重新定义了自己的指令,由各个平台的虚拟机去解释执行,实现了完全的跨平台。从机器码到汇编语言、再到C语言和现代高级语言,其本质就是一个不断虚拟的过程。再举几例:操作系统中文件管理的接口、TCP/IP协议栈模型、乃至操作系统中最基本的进程的概念,本质上也都是虚拟化的一种体现。
本章所强调的虚拟化技术是指在一个处理器系统中运行多个处理器系统的技术。其中每一个虚拟处理器系统都有独立的虚拟运行环境,包括CPU、内存和外部设备等。在这个虚拟环境中运行的操作系统彼此独立,但是这些操作系统仍使用相同的物理资源。因此处理器需要为虚拟化环境设置专门的硬件,以支持多个虚拟处理器系统在一个物理环境中的资源共享。
虚拟化技术的核心是通过VMM(Virtual Machine Monitor)集中管理物理资源,而每个虚拟机处理器系统通过VMM访问实际的物理资源。有时为了提高虚拟机访问外部设备的效率,虚拟处理器系统也可以直接访问物理资源。在一个处理器系统中,这些物理资源包括CPU、主存储器、外部设备和中断。
IA处理器(包括SMP系统和更为复杂的NUMA结构处理器系统)使用EPT(Extended Page Table)和VPID技术对主存储器进行管理,而使用虚拟中断控制器接管中断请求以实现中断的虚拟化。目前这些技术较为成熟,对这些内容感兴趣的读者可参阅《系统虚拟化——原理与实现》,本章对此不做详细分析。
本章重点关注的是VMM对外部设备的管理,而在外部设备中,重点关注对PCI设备的管理。在一个处理器系统中,设置了许多专用硬件,如IOMMU、PCIe总线的ATS机制、SR-IOV(Single Root I/O Virtualization)和MR-IOV(Multi-Root I/O Virtualization)机制,便于VMM对外部设备的管理。
更多内容请看下回。