嵌入式虚拟化技术

1 虚拟化技术

虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

提供虚拟化的软件层称为 Hypervisor,有时称为虚拟机管理器VMM(Virtual Machine Manger)。VMM提供的虚拟的运行平台,称之为虚拟机VM(Virtual Machine), VM中运行的操作系统称为客户操作系统Guest OS。由于在PC和服务器平台上,VM中运行的通常是一个OS,因此Guest OS和VM不加区分。

图1简单的展示了Hypervisor的通常架构。

嵌入式虚拟化技术

图1 Hypervisor架构

虚拟化技术自20世纪60年代已经用于大型机系统,但是直到20世纪90年代中期随着桌面处理器技术的提升,开启了虚拟机技术在PC市场的应用,嵌入式市场也开始利用这一个非常有前景的技术。尽管近年来虚拟化技术的发展已经应用到PC系统上,但是将这些技术成果应用到嵌入式系统上并不是那么直接的。虚拟化技术是集操作系统设计、编译器、解释器、硬件支持等领域的交叉技术。这种异构的起源,近年来获得了快速发展,引发了术语上的混乱。同一个术语可以用来描述不同的思想,这依赖于工程师的不同背景。

从VM使用资源的角度,可以将Hypervisor分成两类:Type-1与Type-2。Type-1的Hypervisor直接运行在物理硬件上(有时也称之为裸机虚拟器或者本地虚拟机),Type-2的Hypervisor直接运行在一个操作系统(该操作系统运行在物理硬件)上面。运行在物理硬件上的操作系统我们称之为主机操作系统(Host OS),运行在虚拟机VM上的操作系统,我们称之为客户操作系统(Guest OS)。

Type-1 hypervisor 的一个例子是基于内核的虚拟机(KVM:它本身是一个基于操作系统的 hypervisor)。Type-2 hypervisor 包括 QEMU ,WINE,VMWare。

尽管虚拟化的概念非常容易理解“用任何一个方法重建的不在裸机上运行的执行环境”,但是不同的虚拟化技术在实现这一目标的途径上却有巨大的不同。虚拟化的实现上可以分成完全虚拟化技术(Full Virtualization)和半虚拟化技术(Paravirtualization)。

完全虚拟化技术又叫硬件辅助虚拟化技术,最初所使用的虚拟化技术就是完全全虚拟化(Full Virtualization)技术,它在虚拟机(VM)和硬件之间加了一个软件层Hypervisor,VM发出的指令需经过Hypervisor捕获并处理。为此每个客户操作系统(Guest OS)所发出的指令都要被翻译成CPU能识别的指令格式,这里的客户操作系统即是运行的虚拟机,所以Hypervisor的工作负荷会很大,因此会占用一定的资源,所以在性能方面不如裸机。全虚拟化最大的优点就是运行在虚拟机上的操作系统没有经过任何修改,唯一的限制就是操作系统必须能够支持底层的硬件。由于目前的操作系统一般都能支持底层硬件,所以这个限制就变得微不足道了。

随着硬件虚拟化技术的逐渐演化,主流的处理器都在已经在指令集上支持硬件完全虚拟化,比如Intel的VT-x技术。加之全虚拟化不需要对客户机操作系统做任何修改的固有优势。因此,基于硬件的全虚拟化产品已经在服务器领域占据了绝对统治地位。全虚拟化技术如图2所示。

嵌入式虚拟化技术

图2 完全虚拟化技术

半虚拟化技术(Paravirtualization)也叫做准虚拟化技术,它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要Hypervisor耗费一定的资源进行翻译操作,因此Hypervisor的工作负担变得非常的小,因此整体的性能也有很大的提高。不过要修改包含该API的操作系统,但是对于某些不含该API的操作系统(主要是windows)来说,就不行能用这种方法。半/准虚拟化技术如图3所示。

 

嵌入式虚拟化技术

图3 半/准虚拟化技术

虚拟化领域是一个非常活跃的领域,多种计算技术正在被开发和研究,但是目前仍然没有一个清晰的解决方案或者一种实现技术明显优于其它技术。但是就一个具体的目标平台而言,却存在某些虚拟化技术明显优于其它。比如在PC系统中,如果虚拟化执行环境的源码是可以获得的,那么半虚拟化技术将会是最优的选择;否则全虚拟化技术将会是仅有的方案。关于这些技术或者解决方案的完整描述超越了本文的范围,本文仅集中在目前在嵌入式实时系统上的解决方案。

2 嵌入式虚拟化技术

嵌入式虚拟化是指嵌入式系统中部署的Type-1 hypervisor的虚拟化技术,在嵌入式虚拟化平台中,由嵌入式hypervisor管理的虚拟平台,一般不称为Virtual Machine,而是称为分区Partition。在分区中可以运行一个客户操作系统,比如RTOS或者GPOS,也可以运行一个非操作系统的应用,比如前后台系统。嵌入式Hypervisor和运行于PC和服务器平台的Hypervisor相比,具有如下的特性:

效率:所有虚拟机监控程序都致力于提高效率,但嵌入式虚拟机监控程序必须处理在传统虚拟化环境之外添加的限制。因此,嵌入式虚拟机监控程序必须规模小,且拥有极高的内存使用效率。

安全性:规模小有其优势。应用程序的代码越小,就越容易验证和证明它是没有 bug 的。事实上,有些嵌入式Hypervisor供应商已经正式验证了他们的虚拟机监控程序,并保证它们没有 bug(比如WindRiver系统公司的VxWorks-178B和VxWorks MILS)。虚拟机监控程序越小,平台就可能越安全可靠。这是因为嵌入式Hypervisor是系统中惟一以特权模式运行的部分,充当 所谓的可信计算基(Trusted Computing Base,TCB),形成一个更安全的平台。

通信:嵌入式Hypervisor的目的在于与多个来宾和应用程序共享一个硬件平台,但通常还扩展一些通信方法以便它们交互。这个通信通道既有效又安全,允许特权和非特权应用程序并存。

隔离:隔离分区中应用程序的能力与安全性相关。除了提供安全性和可靠性的容器之外,这种能力还提供许可隔离方面的好处。使用嵌入式Hypervisor的通信机制允许专有软件和开源软件在隔离的环境中共存。随着嵌入式设备变得更加开放,混合专有软件和第三方或开源软件的愿望成为一个重要需求。

实时性:嵌入式Hypervisor必须支持拥有实时功能的调度。对于手持式设备,虚拟机监控程序能够与核心通信功能和第三方应用程序共享平台。具有实时特征的调度允许这些关键功能与一些尽力运行的应用程序共存。

嵌入式平台的Type-1 hypervisor采用分离内核[1]的架构实现(图4所示)。

嵌入式虚拟化技术

图4 分离内核(Separation Kernel)架构

3 采用分离内核架构的主流嵌入式产品

Windriver公司的VxWorks-653[2]和VxWorks MILS[3],其中VxWorks MILS Platform 2.0凭借其与Common Criteria Evaluation Assurance Level (EAL) 6+标准的高度一致性和通过High Robustness(高鲁棒性)验证,被美国国家安全局下属的国家信息保障合作体(NIAP)官方列为“In Evaluation”级别。按照SKPP规范中的描述,一个遵循EAL6+标准、通过High Robustness验证的操作系统必须是“一个面向关键任务级别系统服务和应用而设计的高度稳定的基础架构”,VxWorks MILS Platform 2.0 采用Type-1虚拟化技术构建而成,核心代码不超过5000行[4]

其它的产品,比如sysgo 公司的PikeOS,也是采用分离内核(separation kernel)实现。 用于处理航空电子工业中安全性至关重要的航空电子应用程序。Lynx软件技术公司的LynxSecureLynxOS-178 RTOS,以及GreenHill公司 INTEGRITY  RTOS-178B。

 

备注:通过INTEGRITY-178B operating system和VxWorks MILS之间的两个访谈,我们可以一窥两者之间的差异性[4][6].

 

4 参考资料

[1]https://en.wikipedia.org/wiki/Separation_kernel

[2] http://www.windriver.com/products/vxworks/certification-profiles/#vxworks_653

[3] http://www.windriver.com/products/vxworks/certification-profiles/#vxworks_mils

[4]http://mil-embedded.com/articles/eal-strategy-marketing-wind-river-systems/

[5]https://www.sysgo.com/products/pikeos-rtos-and-virtualization-concept/

[6]http://mil-embedded.com/news]-id/?19638

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: