零型(Type Zero)虚拟机监控程序的兴起
This post is also available in: 繁体中文, 英语
虚拟技术为嵌入式设计带来了巨大的好处,比如可以将多个系统同时固定在一个单独的平台上或将不同安全等级的应用区分开来。 然而,虚拟技术在高安全性和高可靠性的领域比如美国军用标准/航空领域的应用则受到了主流的虚拟机监控程序类型1以及类型2的限制。 这两种虚拟机监控程序往往由于其主机或支持OS(OS)的原因而体型过大或过于复杂,或因为嵌入系统的设计而在可配置性方面严重受限。 而来自LynuxWorks的名为LynxSecure*的新一代“零型”虚拟机监控程序,则通过使用一种专门为嵌入系统设计的轻便型结构,将这些问题一一破解。
这种新型架构拥有一个最小化的虚拟机监控程序,不需要支持的OS,而且为嵌入式工程师对整体系统资源的细微控制提供了一套完整的工具。 这种最小化设计以减小系统攻击面和为任务关键型环境提供高可靠性为主要目的。 此外,这种新型架构方法利用了第3代Intel® Core™处理器与Intel 虚拟技术的特点,使多个OS和裸机应用程序都能在虚拟环境下安全运行,并取得一种近乎本机的CPU和I/O性能。
虚拟机监控程序的角色
虚拟机监控程序是一个监控软件,能够在硬件与OS之间创造一个抽象层,作为计算机虚拟化的基础技术。 虚拟机监控程序通过完全控制物理计算平台来实现这种抽象层,以创造各种软件模拟式硬件平台(见图1)。这些模拟平台然后就可以允许OS被当做来宾OS在模拟平台而非物理硬件上运行。这种模拟平台可被多次复制,以支持在同一台机器上有多个来宾OS。
图1:虚拟机监控程序将硬件隔离,允许多个OS同时在一台机器上运行
虚拟技术与嵌入式应用的关系越来越紧密。 随着虚拟机监控程序可配置性的进步和第3代Intel® Core™等处理器的多核性能与硬件虚拟化加速的提升,嵌入式架构师现在能够构建嵌入式系统来解决一些最困难的计算问题,例如:
安全域隔离——虚拟机监控程序具备隔离访问硬件资源的能力,以便创造一个单独的计算环境。 需要多个(或冗余的)计算平台来处理各层的分类数据的应用,现在能够在一个单独的平台上完成(图2所示)。
图2:虚拟机监控程序安全域隔离,显示了两种环境同时运行在一个平台上,消除了对额外硬件的需求
独立检测 – 虚拟机监控程序能够创造一种独立的计算环境,可以使任务关键型功能在不受共存应用程序或全OS中的复杂依赖性的影响下正常运行。 通过使用一个虚拟机监控程序,一个单独的计算节点就可以在一个虚拟的环境中运行一个系统应用程序,一个单独的健康状态监控器在另一个单独的环境中检测应用程序的状态(如图3所示)。一旦出现应用程序错误,健康状态监控器就可以从本地对应用程序进行重新设置,或引导一个故障转移程序以实现更快地响应和更智能的容错设计。
图3:虚拟机监控程序独立检测使用独立健康状况监视器来监控并且可在来宾OS中对任何应用程序故障进行重新设置
参照监控——虚拟机监控程序可独立调节应用程序与数据通道接口之间的访问和监控信息流,以确保所有的信息流不受干扰并被授权以维护安全操作(图4)。
图4:虚拟机监控程序的参照监视器监视和调节信息流与访问
第3代Intel® Core™处理器在支持虚拟机监控程序方面起到了主要作用,其硬件特点在很大程度上提高了虚拟化技术的安全、性能和确定机制。这些硬件特点包括:
用于IA-32、Intel® 64,以及 Intel® 架构(Intel® VT-x) 的Intel 虚拟化技术——为来宾OS的执行和记忆管理提供虚拟机监控程序支持,减小了虚拟机监控程序的复杂性,增强了性能及安全性。
用于Directed I/O (Intel® VT-d)的Intel 虚拟化技术——为I/O设备分配提供了虚拟机监控程序支持,以便保护来宾OS的I/O数据通道,提高I/O性能。
Intel® Trusted Execution Technology (Intel® TXT) – 辅助虚拟机监控程序启动程序,使系统进入安全初始状态。
我们会在下面部分详细描述上述技术。
“零型”虚拟机监控程序介绍
虚拟机监控程序有2种常见的架构:类型2和类型1。类型2作为应用程序在通用OS如Windows或Mac OS上运行。通常部署类型2虚拟机监控程序以在一个不同的OS机器上运行为OS设计的用户程序;比如,在苹果OS上运行微软应用程序。由于其对通用OS的依赖,类型2虚拟机监控程序很少被用于嵌入式系统中。
类型1虚拟机监控程序则直接在硬件上运行。 如今的类型1虚拟机监控程序通常与特殊用途型主机OS以及附加服务应用程序集成。 主机OS的复杂性会影响到整体方案的尺寸、安全性及性能。 安全性则是一个特别需要关注的问题,因为主机型OS通常管理来宾OS的内存、文件系统及通信设备。
零型虚拟机监控程序是一种比类型1还要小的新型监控程序。零型虚拟机监控程序是一种裸机架构模式,消除了对支持OS的需求。通过解除支持性OS,零型虚拟机监控程序则在很大程度上减小了尺寸以及施加在虚拟平台上的计算开支。图5显示了类型2、类型1以及类型零之间在架构大小上的对比,同时显示了类型2以及1虚拟机监控程序中的多数代码长度都是由支持的主机或辅助OS造成的。请注意,这里所列举的类型2以及类型1的大小反映了专门为企业应用程序而设计的虚拟机监控程序。
图5:虚拟机监控程序大小对照图:图中显示零型虚拟机监控程序具有最小的编码长度,更适合嵌入式系统。
零型虚拟机监控程序的主要设计动机是,为安全关键型系统中的嵌入式虚拟化提供一个强大的基础。 主要的架构设计要求包括:
大小最小化——LynxSecure零型虚拟机监控程序只占120KB的内存以及4MB的系统RAM。而当今使用的主流类型1虚拟机监控程序在添加来宾OS图像之前则需要成百至上千兆字节的存储,占据了几百至将近一千兆字节的RAM。类型1虚拟机监控程序的基本内存和存储需求要比传统的嵌入式OS需求还要大几十甚至上千倍,这种需求则超过了嵌入式平台的大小限制。
效率最大化——这种零型虚拟机监控程序专门设计了透明式开支运行,其中大部分操作交给硬件辅助的操作,如Intel VT或来宾OS中的软件支持。 Intel VT直接在硬件中执行各种虚拟化任务,减小了虚拟机监控程序的足迹并且改进了性能和确定机制。 通过将虚拟机监控程序的大多数操作在虚拟机监控程序之外执行,零型虚拟机监控程序使嵌入式系统架构师可调整其性能目标。 类型1虚拟机监控程序则依赖封闭式OS的底层支持,这样会消耗一些不必要的CPU周期,非嵌入式系统架构师所能控制。
安全性 – 增强虚拟机监控程序或任何系统的安全的最佳方式是,限制软件组件访问具有特权的资源并减小设计的复杂性。 依赖主机OS的类型1虚拟机监控程序包含复杂的具有特权的组件如设备驱动程序和I/O堆栈。 很难证明这些组件无可被利用的缺陷。 相比之下,LynxSecure则使用了一种更简单的设计,取消了对支持OS的需求。此外,LynxSecure还利用了 Intel VT,其直接在硬件内部执行各种虚拟化任务,减小了虚拟机监控程序的复杂性,从而减小了系统的攻击面。
可靠性——有很多因素影响着虚拟机监控程序的可靠性,其中包括设计复杂度。 为进一步减小复杂度,LynxSecure零型虚拟机监控程序在最小动态功能下无状态执行,提供了一个简单、强大而又稳固的基础。 而类型1虚拟机监控程序则不得不进行很多测试以维持运行,对OS的依赖性也在很大程度上通过内核组件的复杂性将风险引入,如动态处理排程、完整程序模型、动态记忆管理、文件系统、I/O堆栈及第三方设备驱动程序。 若这些组件中存在任何缺陷的话,都有可能引起系统故障。
为了更好的理解如何满足了这些重要的嵌入式要求,下面部分概述了LynuxWorks的LynxSecure零型虚拟机监控程序的架构。
LynxSecure——零型虚拟机监控程序的架构
LynxSecure零型虚拟机监控程序的架构分为两部分:一个有特权的核心虚拟机监控程序基础和一个无特权的虚拟化框架。 前者有一套最小规模的组件组成,用来安全可靠地对来宾计算环境进行虚拟化。 此核心基础包括(图6):
图6:LynxSecure零型虚拟机监控程序内核包含的主要部件都是专为在嵌入式系统中有效运行而设计的,同时与 Intel VT硬件紧密合作。
实时虚拟CPU(RTvCPU)调度程序——实时虚拟CPU(RTvCPU)调度程序指挥着常规的来宾OS、实时来宾OS以及裸机应用程序在多个指定的、专用的或共享的CPU内核上正常执行。 实时调度程序使系统架构师可精确控制每个来宾执行的CPU循环数以托管硬实时应用程序。 虚拟CPU调度程序利用Intel VT-x 来提供硬件支持,以显著加速虚拟机监控程序与来宾OS之间的CPU控制转移。
内存管理器——内存管理器为每个来宾OS分配内存,保护每个来宾OS的内存不受非法访问,并且控制着各个来宾OS之间的通信交流。 内存管理器受益于Intel VT-x的扩展页表功能(EPT),其可辅助内存虚拟化。 使用EPT,来宾OS就可直接管理其本地内存页表,不再需要来自虚拟机监控程序的帮助。 这就解决了来宾OS内存访问性能的一大瓶颈问题。
内存管理器还通过使用VT-d来安全地控制外部I/O设备读写来宾OS内存的要求。 Intel VT-d提高了I/O的安全性和可用性,因为用于特定装置或来宾OS的数据会受到保护,而不会被其他硬件或来宾OS非法访问。Intel VT-d在芯片集上还添加了硬件加速器,使得虚拟机监控程序能够将特定的I/O设备分配给特定的来宾OS,同时为来宾OS与I/O需求大的设备比如网络与存储控制器之间的高速通信创造直接的内存访问(DMA)通道。而在过去,虚拟机监控程序不得不介入每一个I/O事务,极大增加了I/O计算开支。
超级调用API – 这是一个特权界面,为来宾OS和裸机应用程序提供一个用于相互通信、来宾OS管理、审计以及维护管理的工具。
中断处理器 – 中断处理器用来路由来宾OS、裸机应用程序、虚拟设备、半虚拟设备及物理设备之间的中断信号。
异常处理器——异常处理器用来管理非法或有特权的来宾OS操作,以确保所有系统运行都不会破坏虚拟机监控程序提供的可用性、完整性以及保密性。
安全监控器——安全监控器负责将虚拟机监控程序带入一种安全的状态,并且对安全关键性硬件资源进行不断监控以保持安全运行状态。 在启动初始化过程中,安全监控器依赖于Intel TXT。 Intel TXT是一种硬件安全方案,通过验证主要组件的行为来免遭攻击。 在载入虚拟机监控程序之前,Intel TXT会检查行为和启动时间配置的一致性,这是通过比较硬件可信赖平台模式(TPM)中存储的一个名为 “已知良好”顺序的基准来检查的。Intel TXT还会在启动来宾OS之前执行此检查。在这两种情况下,系统都能对任何试图改变或篡改启动时间环境的异常作出快速评估和提醒。
系统审计——系统审计组件为一种先进的记录服务,用来记录主要的安全或用户定义的系统事件,这些事件可以向上传递给来宾OS或裸机应用程序,以构建强大的故障检测、威胁检测及系统恢复子系统。
虚拟机监控程序核心基础由一个无特权的虚拟化框架(图7所示)来补充。该虚拟框架使嵌入式架构师可对系统资源和管理工具进行精细控制,以处理来宾OS启动程序、互相通信、设备分配及远程管理。(此框架的详细信息不属于本文的讨论范围,有关详情,请联系inside@lnxw.com。)
图7:如图所示,LynxSecure零型虚拟化框架不仅由虚拟机监控程序构成
满足当今嵌入式设计的需求
LynxSecure的零型虚拟机监控程序内核设计模式满足了嵌入式任务关键型系统在大小、效率、安全性和可靠性等方面的要求。 通过选择最小的功能集和Intel VT中的硬件辅助和Intel TXT,在很大程度上减小了核心组件的尺寸和复杂性,确保重大安全性和可靠性的逻辑是正确的,同时将软件计算开支减小到少,改善了确定行为的延迟。 最终为嵌入式安全关键型和高可靠性设计提供了一个独一无二的平台。