这两年汽车领域在智能与域融合的推动下,开始兴起了各种虚拟化(Virtualization
)的座舱解决方案,尤其以黑莓公司的QNX
虚拟化方案应用最为广泛。说起来,虚拟化并不是什么新的概念,操作系统诞生之初就有了类似的原型: 对于一个分时的操作系统,通过在不同进程之间切换状态,给每个用户都制造一种完全使用整个机器的感觉,实则是操作系统通过进程之间的资源分时复用实现的结果。简单来说,虚拟化就是一种资源隔离与抽象的方案,通过对CPU
、Memory
、I/O
设备增加中间层的访问控制,以达到与访问物理资源同等的效果。
在接下来的三篇文章里,我们就来一起来梳理虚拟化方案的整体脉络,先从大的基本概念入手,再将具体的实现细节,力求能够理解虚拟化的基本概念与实现原理:
- 虚拟机的基本概念,主要讲虚拟化方案的优势,类型以及常见的虚拟化方案
- 汽车软件中常用的
QNX
虚拟化平台介绍,以及CPU
、I/O
、Memory
以及中断虚拟化的具体原理 Linux
下的I/O
设备虚拟化方案virtio
的原理介绍
这篇文章,我们就来看看虚拟化的一些基本概念,以及实现的类型与方式。
虚拟化的基本概念
从本质来说,虚拟化是一种资源隔离与权限访问控制的方法,比如常见的操作系统中的虚拟内存(Virtual Memory
)以及Java
中的JVM(Java Virtual Machine
)都是基于类似的思路实现的。JVM
是一种语言级别的虚拟化解决方案,其更多的是为了提供一个跨平台的执行环境,以解决编程语言的移植性;对于系统级别的虚拟化方案,如VMWare/Xen/QNX
等,则是为了虚拟化整个操作系统所需要的环境,从而实现不同操作系统在同一个平台运行的目的。
常见的虚拟化方案有两种,分别称为type-1
和type-2
:
type-1
的虚拟化方案的hypervisor
直接运行在硬件上,此类虚拟机常见的有VMWare ESX server
、Xen
以及QNX
等type-2
的虚拟化方案的hypervisor
则跑在一个宿主操作系统上,常见的虚拟机有QEMU
、VMWare Workstations
、KVM
、Oracle VirtualBox
等
hypervisor
是为虚拟机提供运行环境的系统软件,其目的是为了尽可能减少虚拟化带来的性能损失,也被称为Virtual Machine Monitor(VMM)
1974年, Popek
与Goldberg
提出了一个虚拟化管理程序hypervisor
所需要遵循的三个基本的原则:
Equivalence
(等价性): 虚拟机所执行的环境跟实际的物理硬件是等价的,一个Guest
操作系统并不需要知道其本身是运行在虚拟机上还是实际的物理机上。这个规定相对而言比较严格,有时为了实现某些功能或者性能需要,Guest
操作系统可能需要知道自己当前执行的是虚拟环境。Safty
(安全): 虚拟化的隔离要求不同的虚拟机之间以及与hypervisor
是完全隔离的,确保每个系统都是模块化的,互不影响。Performance
(性能): 虚拟化hypervisor
需要尽可能的减少因为隔离与控制切换带来的性能损失,以接近于真实的物理执行环境的速度。
虚拟化的方法
早期的很多虚拟化方案,由于没有芯片指令级的支持,通常都需要通过二进制翻译(binary translation
)的方式来达到trap-and-emulate
(陷入与模拟)的虚拟化隔离,但这种方式效率较低,因此随着后续x86
、ARM
等平台增加了专门用于虚拟化的指令集,从而提升了虚拟机程序执行的效率。
实现虚拟化的方法一般有如下三种(下图中包含了软虚拟化与半虚拟化方案的示意图):
- 软件虚拟化(
Full(software) Virtualization
): 虚拟机完全运行在hypervisor
之上,并不知道当前运行在虚拟的环境中。常见的虚拟化提供商VirtualBox/VMWare
都有类似的解决方案 - 硬件辅助虚拟化(
Hardware Virtualization, HVM
): 通过在芯片指令集中增加特殊的指令来辅助进行虚拟化,以提升虚拟化的性能 - 半虚拟化(
Paravirtualization
): 半虚拟化方案则通过虚拟机与hypervisor
相互协作以完成虚拟化操作,此时虚拟机需要做额外的配置以实现虚拟化
总结
虚拟化的概念伴随着计算机操作系统的概念一起诞生的,至今已有几十年历史。不管是在个人消费领域,还是分布式系统上,都可以看到虚拟化的身影。而在汽车领域,由于软件定义汽车(SDV(Software Define Vehicle
)/SOA(Service Oriented Achitecture)
等概念与方案的逐步落地,用户对车辆不再满足于单一行车的功能,而是会有更多如个性化、智能化以及网联的需求。这些功能要求汽车厂商以及供应商具备更快速开发迭代的能力。目前虚拟化方案已经开始成为主机厂与方案供应商T1的首选方案了。未来,相信随着智能座舱域与自动驾驶域逐步走向融合,虚拟化方案由于其安全、高可用性、资源隔离等优点会得到更多的应用。
在下一篇文章,我们就一起来看看汽车领域的虚拟化方案领先者-QNX
系统的架构与虚拟化实现原理。
参考文献
- Virtio: An I/O virtualization framework for Linux
- A Comparison of Software and Hardware Techniques for x86 Virtualization
- Blackberry QNX
- hardware and software support for virtualization(Edouard Bugnion, Jason Nieh, and Dan Tsafrir)
- awesome-virtualization
- Anatomy of a Linux hypervisor
- An in-depth look into the ARM virtualization extensions