欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

openEuler 开源新项目、嵌入式实时虚拟机 ZVM 简介

最编程 2024-04-10 14:55:51
...

(1)CPU虚拟化。CPU虚拟化模块的主要功能是为每个Guest OS的vCPU虚拟出一个单独的隔离上下文。每个vCPU均作为一个线程存在,由ZVM统一调度。为了提高vCPU的性能,ARM64架构为ZVM提供了VHE支持,VHE可以使Host OS迁移到EL2特权模式,而无需改变操作系统原有代码。VHE主要实现了ARM寄存器重定向,可以在不修改Zephyr RTOS内核代码的情况下,将其迁移EL2层开发ZVM,既降低了系统冗余,又提高了系统性能。

(2)内存虚拟化。内存虚拟化模块的主要作用是实现Guest OS间内存地址的隔离。系统需要隔离不同Guest OS的内存空间,监控Guest OS对实际物理内存的访问,以保护物理内存。为了实现该功能,ARM64提供了两阶段的地址查找策略。第一阶段是从Guest OS的虚拟地址到Guest OS的物理地址转换,第二阶段是从Guest OS的物理地址到Host OS的物理地址转化。ARM专门为第二阶段转换提供单独的硬件,以提高地址翻译性能。

(3)中断虚拟化模块。中断虚拟化使用ARM的通用中断控制器(GIC)设备,并基于该设备实现虚拟中断配置。Guest OS的中断统一路由到ZVM,然后ZVM会将它们分配给不同的vCPU。虚拟中断的注入通过GIC中的Virtual CPU接口或List Register具体实现。

(4)定时器虚拟化。定时器虚拟化为每个CPU定义了一组虚拟定时器寄存器,它们在预定时间后单独计数并抛出中断,由Host OS转发给Guest OS。同时,在Guest OS切换过程中,虚拟定时器会计算Guest OS的实际运行时间,并对Guest OS退出的时间进行补偿,为Guest OS提供定时器服务。

(5)设备虚拟化。在设备虚拟化方面,ZVM采用ARM中的Memory-Mapped I/O (MMIO)方法将设备地址映射到虚拟内存地址,构建虚拟设备空间,实现Guest OS对设备地址的访问。在具体实现上,ZVM统一构建一个虚拟的MMIO设备,在Guest OS创建过程中将该设备分配给指定的Guest OS,实现I/O虚拟化。此外,对一些非独占设备,ZVM使用设备直通的方式实现设备的访问。