嵌入式Hypervisor:架构、原理与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.1 PRTOS Hypervisor的架构

PRTOS采用半虚拟化技术实现。半虚拟化技术需要客户操作系统显式地调用PRTOS提供的半虚拟化接口,没有经过修改的客户操作系统是不能在PRTOS分区上运行的,因此客户操作系统的源码必须是可以获得的。PRTOS Hypervisor的架构如图2-2所示。

图2-2 PRTOS Hypervisor的架构

PRTOS为分区提供虚拟化服务。PRTOS内核运行在处理器特权模式下,虚拟出CPU、内存、中断,以及一些特定的外围设备。

在图2-2中,PRTOS Hypervisor分成以下4个组成部分。

(1)硬件依赖层

硬件依赖层代表和硬件打交道的对象,包含一组PRTOS内核必需的硬件驱动,比如硬件时钟、页表、分区上下文切换、硬件定时器、处理器和中断。硬件依赖层通过硬件抽象层接口和PRTOS的其他层隔离。硬件依赖层隐藏了底层硬件的复杂性,为底层硬件提供了更高层的抽象。

(2)内部服务层

内部服务层提供内部支持服务,这些服务对分区是不可见的。这一层包含一个微型精简的内核C库KLIBC(Kernel C Library for PRTOS,用于PRTOS的内核C库)。KLIBC提供了一组严格定义的标准C函数(比如strcpy()、memcpy()、sprint()等),以及一系列辅助数据结构封装,包含常见的数据结构实现(比如链表、队列)与分区启动代码。

(3)虚拟化服务层

虚拟化服务层提供了用于支持虚拟化的服务,这些服务程序通过Hypercall API提供给分区使用。这些服务的子集也可以被PRTOS的其他子模块使用。例如,物理内存管理器负责为PRTOS内核和分区分配物理内存页表项。

分区服务层包含的组件如下。

1)分区管理:负责分区的创建、删除、挂起等以及PCT(Partition Control Table,分区控制表)的管理 。

2)分区间通信:PRTOS实现了一种消息通信模型,这种模型借鉴自ARINC653标准。

3)虚拟处理器调度:负责分区中的vCPU调度。PRTOS内核vCPU调度器采用循环表调度(Cyclic Table-Driven Schedule)策略。

4)中断管理:物理中断由PRTOS进行管理,根据中断的性质将其投递到不同的分区。PRTOS处理硬件中断和陷阱,也负责激发分区的虚拟中断和虚拟陷阱。

5)超级调用派发:派发分区发给PRTOS内核的超级调用,类似于传统操作系统中系统调用的派发流程。

6)虚拟时钟和虚拟定时器管理的介绍如下。

①虚拟时钟:为系统提供微秒级精度的时钟。另外,PRTOS为每个分区提供了两种类型的时钟:一种是分区本地时钟,只有在分区处于执行状态时才会运行;另一种是分区全局时钟,从PRTOS系统启动后就开始运行,与当前分区的执行状态无关。

②虚拟定时器:具有微秒级精度的定时器,基于虚拟时钟实现。该组件为每个分区提供了两种类型的定时器:一种是分区本地定时器,只有在分区处于执行状态时才会被激活;另一种是全局定时器,无论分区是否处于执行状态,全局定时器始终处于激活状态。

7)内存管理:包含虚拟内存管理和物理内存管理。

①虚拟内存管理:负责管理虚拟内存到物理内存的页面映射,可以创建/释放虚拟内存映射。

②物理内存管理:负责管理系统物理内存页,追踪每一个物理内存页的状态(比如类型、所有者等),为PRTOS内核和所有创建的分区分配物理内存。

8)虚拟设备管理:PRTOS通过虚拟控制台将物理串行通信设备模拟为多个虚拟串行设备,以供各个分区使用;其他的外围设备(包括各种传感器、执行器、网络接口等)通过系统配置表可以分配给任何一个分区,PRTOS保证分区独占分配给它的资源。

9)健康监控:监测系统或者分区的异常事件或者状态,并做出反应措施,在错误发生的早期阶段试图解决错误,或者将错误限定在发生故障的子系统,避免或者减少可能的损失。

10)跟踪管理:存储和检索分区和PRTOS内核产生的跟踪信息。跟踪管理用于在应用的开发阶段辅助调试,也可以用于在产品阶段记录相关事件的日志信息。

(4)超级调用接口函数库

PRTOS将提供给分区的超级调用服务封装在超级调用接口函数库(libprtos)中。libprtos库屏蔽了与超级系统调用相关的底层细节,使得开发人员可以使用更高级别的编程语言(C语言)直接调用库中提供的函数来请求超级调用服务,降低了分区应用开发的复杂性。