许多嵌入式系统已经采用系统虚拟化,通过使用虚拟机(VM)将虚拟和物理系统分离。关键任务嵌入式系统中的虚拟化可以使用类似于企业系统使用的技术来实现,但嵌入式虚拟化的不同用例为与嵌入式系统的优先级更紧密地一致的其他解决方案打开了大门。
自 2000 年代初以来,虚拟化已广泛部署在企业服务器中。服务器虚拟化的最初驱动力是关于服务器整合的,它将运行不同应用程序的多个未充分利用的服务器的服务合并到一台计算机上。减少服务器数量节省了资本和运营成本。这种整合需要工作负载隔离,将应用程序彼此分开,并将系统的其余部分分开,从而提供某种程度的安全性和应用程序自主性。由于虚拟机 (VM) 将应用程序与其所依赖的操作系统配对,因此虚拟化还允许将 VM 从一台服务器迁移到另一台服务器,从而在各种任务关键型军事应用程序中实现高可用性、负载平衡和额外的节能。
服务器虚拟化的辅助驱动器是运行为不同操作系统 (OS) 或不同版本的操作系统设计的应用程序的能力。例如,运行Linux的工程工作站通常也运行Microsoft Windows以与业务应用程序进行交互。这对于支持遗留系统特别有用,例如从大型机迁移到服务器时。
嵌入式虚拟化用例
嵌入式虚拟化与企业用例有很多重叠,但具有不同的优先级和附加要求。嵌入式虚拟化的主要用例是支持异构操作系统和提高安全性。次要用例可能包括工作负载整合、软件许可证隔离以及促进向多核处理器的迁移。支持异构操作系统的常见驱动因素是需要为某些应用程序支持通用操作系统,例如 Linux 和 Windows,而关键和受信任的应用程序在实时操作系统 (RTOS) 上运行。在具有混合关键性的系统中,提高安全性尤为重要,以便将不太重要的应用程序与具有更关键的实时、安全或安保要求的应用程序隔离开来。
在评估安全解决方案时,一个关键概念是受信任计算基础 (TCB) 的大小,该计算基础由实施安全策略的硬件、软件和控制组成。总体目标是最小化 TCB 的大小和接口的数量,以便更容易地进行验证。TCB 和接口数越大,攻击面就越大。最小化 TCB 需要将许多非关键服务移出 TCB,这反过来又需要能够隔离这些服务,并在受信任和不受信任的组件之间提供安全通信。请注意,最小化 TCB 不是最终目标,而只是简化验证的一种手段。对于需要高安全性的系统,最终目标是根据适用的安全保证要求进行认证。
与服务器虚拟化中的虚拟机不同,嵌入式系统中的应用程序通常是高度集成的,需要协作。随后,解决方案的一部分需要包括可预测的低延迟、高带宽通信路径,其权限由安全 TCB 强制执行。特别是对于嵌入式实时系统,满足异构操作系统的虚拟化目标和提高安全性不能以牺牲系统的确定性或大大增加的延迟为代价。对于安全关键系统来说,情况更是如此。维护确定性对任何虚拟化解决方案来说都是一个挑战,因为高效的虚拟化实现通常使用启发式方法来识别不同操作系统和给定操作系统的不同版本的代码序列的变化。
虚拟化的硬件支持
众所周知,x86 处理器的早期虚拟化性能低下,因为缺乏对虚拟化的硬件支持,包括虚拟化内存管理单元 (MMU) 和输入/输出内存管理单元 (IOMMU)。现代处理器为硬件辅助虚拟化提供支持。一个例子是英特尔 VT-x 和 VT-d。
英特尔 VT-x 提供了进入和退出虚拟执行模式的说明,在该模式下,访客操作系统将自己视为以完全权限运行,而主机操作系统仍受到保护。内存虚拟化实际上需要两个级别的虚拟化。首先,来宾操作系统将从物理地址空间到虚拟地址空间的映射存储在页表中。该来宾操作系统无法直接访问物理内存,因此虚拟机监视器 (VMM) 需要提供这些页表的虚拟化。对于英特尔处理器,页表虚拟化的加速称为扩展页表 (EPT)。
面向定向 I/O 的英特尔虚拟化技术(英特尔 VT-d)为重新映射直接内存访问 (DMA) 传输和设备生成的中断提供了硬件辅助。IOMMU 跟踪哪些物理内存区域映射到哪些 I/O 设备。分配给特定 VM 的 I/O 设备不能被其他 VM 访问,I/O 设备也无法访问其他 VM。
即使支持 IOMMU,VMM 仍需要将数据从网络接口芯片 (NIC) 复制到虚拟机,反之亦然。PCI-SIG 的单根 I/O 虚拟化 (SR-IOV) 标准将 VMM 从将数据移入和移出虚拟机的过程中移除。数据直接在 VM 之间通过 DMA 传输,VMM 中的软件开关永远不会碰它。
虽然虚拟化硬件加速的关键技术是在芯片级实现的,但板级决策也会影响系统性能。例如,具有最多虚拟化功能的处理器通常是消耗最多功率的处理器,因此通常需要在优化尺寸、重量和功耗 (SWaP) 方面做出权衡决策。NIC 的选择会影响加速哪些 I/O 虚拟化功能。电路板上的内存量也是一个重要的考虑因素,因为虚拟化会消耗大量内存。
嵌入式虚拟化技术
一旦底层硬件已经建立并支持虚拟化的需求,下一个问题是使用什么软件虚拟化技术。在企业领域,主要选择是类型 1和类型 2 虚拟机管理程序,其中类型 1 在裸机上运行,类型 2 在另一个操作系统上运行。对于嵌入式系统,还有第三种选择:具有虚拟化层的微内核。尽管将任何给定的解决方案放入这三个存储桶之一中很方便,但现实情况是,类型 1 和类型 2 之间存在灰色区域,并且可以使用微内核技术实现类型 1 虚拟机管理程序。即使有一定程度的重叠,查看定义特征和功能也很有用。
虚拟机管理程序(也称为虚拟机监视器 (VMM))始于企业系统,几乎没有资源限制。因此,许多虚拟机管理程序及其虚拟机都是重量级结构,通常包括设备驱动程序等功能,有时甚至包括网络堆栈和文件系统。所有这些功能都需要大型 TCB。网络堆栈具有特别高的安全风险,如最近的“URGENT/11”漏洞所示。对于类型 1 和类型 2 虚拟机管理程序,来宾操作系统与应用程序一起在虚拟机内运行。尽管在裸机上运行的 Type 1 虚拟机管理程序通常效率更高,但如果只有一小部分应用程序需要来宾操作系统,则类型 2 虚拟机管理程序可能是正确的解决方案。在企业环境中,一个例子是工程环境(例如 Linux)或创意环境(如 macOS),它需要运行仅在 Windows 上运行的业务应用程序。同样,嵌入式系统通常混合了实时和非实时要求。使用 Type 2 虚拟机管理程序,较大的实时应用程序集将仅依赖于基本 RTOS,而不是 RTOS 和虚拟机管理程序,而只有非实时应用程序才会产生来宾操作系统、虚拟机管理程序和主机操作系统的虚拟化开销。
微内核来自不同的方向,旨在通过将服务(包括虚拟化)移动到用户模式服务器来减少内核中执行的代码量。这也最大限度地减少了TCB,以提高安全性和安全性。提供来宾操作系统支持的虚拟化层可以在用户空间中实现,类似于类型 2 虚拟机管理程序,以及网络堆栈和文件系统。请注意,隔离基础是在微内核中实现的,包括使用硬件虚拟化功能。
从可信计算库中获取虚拟化层对于安全性和安全性都是一个显着的优势,因为虚拟化代码可能很大。要使来宾操作系统认为它在裸机上运行,必须对系统的每个部分进行虚拟化。尽管硬件技术加速了内存虚拟化,但直到最近,一些处理器才开始加速某些部分的 I/O。所需的虚拟化的一些示例包括设备仿真、总线仿真以及中断仿真和路由。所有这些仿真的代码都非常大,并且还会造成性能损失。从来宾操作系统对内核的每个调用都需要捕获、检查并确定是否允许来宾操作系统进行该访问。为了使虚拟机管理程序高效,它需要虚拟化指令序列而不是单个指令。这种前瞻功能只是增加虚拟机管理程序已经很大的代码库以最大程度地减少虚拟化性能损失的一个例子。
一种特定类型的微内核是分离内核,它将其控制下的所有导出资源分配到分区中,并且这些分区是隔离的,除了明确允许的信息流。专为最高安全性而设计的分离内核符合美国国家安全局 (NSA) 定义的分离内核保护配置文件 (SKPP),该配置文件是为最恶劣的威胁环境创建的。
虚拟机管理程序和微内核技术的比较
如今,虚拟机管理程序和微内核中具有虚拟化层的广泛功能集之间存在大量重叠。这两种技术都利用基础硬件功能(如多个特权模式/级别、MMU 和 IOMMU)来提供硬件强制隔离,并为不同的应用程序提供单独的地址空间。虚拟机管理程序和具有虚拟化层的微内核都提供了在虚拟化环境中运行多个操作系统的能力,包括混合使用RTOS和非RTOS。即使有这些相似之处,这两种技术在确定性和安全性方面也可能存在显着差异。
基于微内核的实时操作系统从一开始就是为低延迟和高确定性而设计的。在虚拟机管理程序上运行 RTOS 会增加必须拦截和虚拟化的每个系统调用的延迟。结果是延迟增加,确定性降低。为了解决这个问题,一些虚拟机管理程序声称允许在裸机上运行,但这确实是用词不当。即使没有来宾操作系统,应用程序仍然必须在虚拟机监控程序上运行,虚拟机监控程序通常比微内核大。仅在没有来宾操作系统的虚拟机管理程序上运行也意味着没有任务服务、没有信号量和消息传递。
对于安全关键型系统,基于虚拟机管理程序的解决方案需要安全关键型操作系统和经过认证为任何托管应用程序最高级别关键性的虚拟机管理程序。与微内核相比,该代码库的总大小会产生巨大的认证负担,并带来不必要的风险。
或者,具有虚拟化层的微内核通过将更高延迟和降低确定性的虚拟化副作用限制为仅运行主机微内核 RTOS 的应用程序来实现更高的性能。在安全关键型系统中,非关键应用程序可以在虚拟化层上运行,而不会增加认证所需的代码库大小。
安全性通常是考虑虚拟机监控程序的最常被引用的原因。一个常见的误解是,虚拟机管理程序本质上是安全的,因为它们利用硬件来强制实施虚拟地址空间和虚拟 I/O 来隔离虚拟机。首先,其他技术(如分区操作系统和分离内核)也使用相同的硬件功能来强制隔离。但是,安全性的主要考虑因素是完整解决方案的安全性仅与底层软件一样安全。虚拟机管理程序已被证明容易受到漏洞的影响,这些缺陷可能允许通过缓冲区溢出和其他漏洞执行代码。例如,2018年初披露的Spectre漏洞可以诱使虚拟机管理程序向来宾应用程序泄露机密。由于虚拟机管理程序在来宾操作系统下运行,因此 VM 无法检测到受损的虚拟机管理程序。这样的漏洞甚至有一个吸引人的名字:超级劫持。
微内核具有较小的TCB,而使用分离内核技术的微内核可以具有最高级别的安全性和隔离性。该安全级别的证明是 NSA 发布的 SKPP 认证或类似的安全标准,例如通用标准 EAL6。一些虚拟机管理程序包含一些分离内核原则以提高安全性,但没有虚拟机管理程序经过 SKPP 或类似安全标准(如通用标准 EAL6)的认证。对于需要隔离但不需要虚拟化的系统,基于微内核的分离内核可提供最高级别的安全性,而无需虚拟机管理程序的开销和扩展代码库。
针对性能和安全性进行优化
针对最高实时性能和最高安全性进行优化的虚拟化解决方案的一个例子是Green Hills Software的INTEGRITY-178 tuMP RTOS,这是一个基于微内核的分离内核,具有完整的虚拟化服务,包括无需修改即可运行多个来宾操作系统的能力。与基于虚拟机管理程序的虚拟化解决方案相反,实时应用程序可以直接在此 RTOS 上运行,而不会在延迟或确定性方面造成虚拟化层损失。
作为分离内核,RTOS完全隔离多个应用程序/分区,并控制应用程序/分区与外部资源之间的信息流。在某种程度上,这包括保护所有资源免受未经授权的访问,隔离除明确允许的信息流之外的分区,以及一组审计服务。结果是,分离内核提供了高保证的分区和信息流控制,满足 NEAT[不可绕过、可评估、始终调用和防篡改] 安全策略属性。
INTEGRITY-178是唯一获得NSA发布的SKPP认证以及通用标准EAL6+的商业操作系统或虚拟机管理程序。这种安全谱系已经扩展到多核INTEGRITY-178 tuMP RTOS。
审核编辑:郭婷
-
嵌入式
+关注
关注
5057文章
18968浏览量
301856 -
服务器
+关注
关注
12文章
8953浏览量
85066 -
操作系统
+关注
关注
37文章
6675浏览量
123127
发布评论请先 登录
相关推荐
评论