1.3.2 嵌入式Hypervisor的设计理念
嵌入式Hypervisor的设计必须从根本着手,同时解决容错性、实时性问题,才能为构造高可靠的嵌入式系统提供全面的保障。
1.实现隔离的方法
如图1-13所示,Hypervisor通过时空域隔离的虚拟机和中间层的引入实现了对虚拟机的隔离,降低了虚拟机之间的耦合性,从而提供了安全、可靠和高效的虚拟化环境。
图1-13 嵌入式Hypervisor的实现方式
(1)虚拟机隔离
分区[2]二隔离是从广度上来考虑嵌入式系统的可靠性设计。因为嵌入式系统运行的基本单元是任务,而一个任务所占用的主要资源是内存空间和CPU时间。因此可以从这两个方面对虚拟机进行隔离设计,将不同的任务放在时间和空间上隔离的虚拟机中运行,使其互不影响。因为每个任务在各自不同的虚拟机中运行,所以对其他任务没有干扰,增强了系统的可靠性。
(2)增加中间层
英国著名计算机科学家大卫·惠勒(David Wheeler)曾说过一句名言:“All problems in computer science can be solved by another level of indirection.”意思是说计算机科学领域内的一切问题都可以通过增加一个中间层来解决。嵌入式系统通过增加一个中间层可提高其可靠性。在嵌入式系统中,通过引入Hypervisor层实现了对硬件资源的抽象和分离,从而降低了虚拟机之间的耦合性。每个虚拟机都被视为独立的实体,可以自主运行和管理自己的操作系统及应用程序,而不受其他虚拟机的影响。这种隔离性使得虚拟化环境更加安全和可靠,同时提供了更高的资源利用率和更灵活的系统配置。
(3)降低耦合性
低耦合性是一种重要的设计模式:一方面降低了因一个模块的变化而影响其他模块的可能性;另一方面使得模块更内聚,结构更简单,可裁剪性更强,代码更具可读性。在嵌入式系统软件的设计中采用低耦合的思想有助于提高系统的可靠性。以VxWorks RTOS为例,其Wind内核包含任务管理、同步通信、内存管理等功能,这些功能往往和设备驱动内聚在一起,任何一个模块的错误都将导致系统崩溃。究其原因,RTOS内核功能模块间的耦合度太高,导致其可靠性降低。因此可采用低耦合的思想拆分各个功能模块,重新组织RTOS的结构,使其各个模块独立开来,以增强系统的可靠性。
总之,嵌入式Hypervisor设计的核心思想在于“隔离”。无论是采用时空域隔离的虚拟机策略、执行隔离的中间层,还是低耦合的功能模块,无不体现着隔离的思想。
2.基于嵌入式Hypervisor的MOSA架构
从设计理念来讲,RTOS可以分为3类:①基于线程的实时系统(Thread-based RTOS),比如μC/OS-Ⅱ、FreeRTOS、VxWorks等传统的实时系统,系统中的线程共享全局平板内存(Flat Memory);②基于进程的实时系统(Process-based RTOS)。比如VxWorks-rtp、realtime-linux系统,进程在一定程度上实现了内存隔离;③基于Hypervisor的模块化开放系统方法(Modular Open System Approach,MOSA)。比如Wind River公司的Hypervisor系列和VxWorks 653系统、Lynx公司的LynxSecure系统、Thales(泰莱斯)公司的PikeOS、Green Hills软件公司的INTEGRITY RTOS。航空领域通过DO-178B/C适航认证的嵌入式RTOS(比如INTEGRITY-178B/C、VxWorks 653、LynxOS-178)无一不是基于嵌入式Hypervisor的系统架构。
嵌入式Hypervisor的基本设计理念是分区隔离、到期回收、责任分配以及通信审核。
1)分区隔离即分而治之,各分区之间和平共处,不得冲突。原则上,需要共享数据的应用尽量集中在同一虚拟机内。
2)到期回收即到期回收资源使用权,交由其他分区,不得陷入超时等待。
3)责任分配即责任分配到分区内,故障自理,以简化Hypervisor的整体架构,越简单越健壮。
4)通信审核是指虚拟机之间的数据交互必须经过Hypervisor授权。通信内容应该尽可能高效,避免授权过程带来的额外开销。
本着以上4项设计理念,基于嵌入式Hypervisor的MOSA架构如图1-14所示。
图1-14 嵌入式Hypervisor的MOSA架构
3.嵌入式Hypervisor的实现
嵌入式Hypervisor的实现侧重于以下两个方面。
(1)资源分区
通过虚拟机实现操作系统构成模块的分隔是一种有效的资源分区方式。在这种模式下,驱动、文件系统等与虚拟机无关的模块可以通过内存映射、寄存器地址映射等方式将硬件资源划分给各个分区,从而实现虚拟机对这些资源的独占操作。这种资源分区方式有助于分化责任,降低Hypervisor的负担,提高MOSA平台的安全性与稳定性。正如法国著名飞行家和作家安东尼·德·圣-埃克苏佩里(Antoine de Saint-Exupéry)所说:“A designer knows he has achieved perfection, not when there is nothing more to add, but when there is nothing left to take away.”中文意思是说:“设计师知道自己的设计已经达到完美,不是因为再也没有东西可添加,而是再也没有东西可以拿掉了。”这句名言强调了简化和精简系统的重要性,通过去除不必要的元素和功能,可以实现更高效、更稳定的系统。
(2)分区间互访
分区间互访在原则上违背了隔离的理念,因此并非所有RTOS供应商都推崇。但许多军用设备有MILS(Multiple Independent Levels of Security,多独立安全级别)的需求,要求单个物理设备平台支持多个独立的应用(每个应用具备独立的安全级别,互访需遵循权限高低规则),便于精简硬件,降低现场携带负担。而MILS的SKPP(Security Kernel Protection Profile,安全内核保护概要)要求支持基于权限的分区间信息交互,且必须受Hypervisor管制。但是如果若干应用之间的数据流是紧密耦合的,在设计时仍然不推荐把这些应用分离在多个分区中互访。
秉持极小化(Less is More)设计以及策略(mechanism)和机制(policy)相分离的原则,Hypervisor仅提供可靠性的机制,而将可靠性的策略交给虚拟机中的应用程序完成。策略和机制相分离的指导思想可以使Hypervisor变得精简而稳定。