ARMv8处理器 CPU
基于ARMv8的系统中的虚拟化工具在这些系统中起着特殊的作用,它由几个组件组成,虽然ARMv7具有特殊的CPU模式来运行虚拟机管理程序作为扩展,但在ARMv8中,它已成为架构的一部分,并且已经以名称EL2集成到特权级系统中。同时,该模式仅解决与CPU访问系统资源相关的问题,例如存储器和外围设备。为了提高虚拟化环境中设备启动的事务的效率,已经为基于ARMv8的系统开发了许多组件,例如新的中断控制器和IOMMU。本文从软件开发的角度概述了这些工具组件。
基于ARMv8的系统中的虚拟化如图1所示:EL2特权级别运行虚拟机管理程序,控制虚拟机(VM)代码的执行以及它们之间的资源共享。EL1(OS内核,特权代码)和EL0(非特权代码)的级别留给VM实例。地址转换分两个阶段执行(图2):在第一阶段,使用第一级转换表(TTBR0_EL1 / TTBR1_EL1寄存器中保存的指针)从虚拟地址计算所谓的中间物理地址(IPA); 在第二阶段,使用管理程序准备的第二级表计算实际物理地址(指针存储在VTTBR_EL2寄存器中)。这样的组织架构可以提供有效的权限分离和VM与硬件的隔离。
两级转换
两级转换允许VM维护自己的转换表,同时还允许管理程序完全控制最终结果。EL2权限级别专门用于执行管理程序代码,与其他级别有一些差异。因此,它是特殊寄存器VTTBR_EL2、VTCR_EL2可访问的最小特权级别以及用于VM管理的许多其他特权寄存器。
在ARMv8架构的原始版本中,仅为管理程序提供了一个转换表,而为当前VM提供了另一个转换表。管理程序可以访问多个特殊寄存器,通过这些寄存器可以设置EL1级别的VM可见的配置参数,例如CPU标识符(制造商,版本等)和多处理器系统ID。这允许将在同一系统上运行的VM暴露给来自不同版本和制造商的虚拟SMP系统和CPU的不同拓扑。
如果在VM中发生需要管理程序干预的事件,则其处理按如下方式执行:
在EL2级别发生异常;
根据其类型,从表中调用相应的处理程序(该地址存储在VBAR_EL2寄存器中);
执行必要的行动;
如果需要,将所需值放入登记册;
管理程序返回到退出发生的VM(如果设计了管理程序,则切换到另一个VM)。
图2:两个阶段执行的地址转换
发生此类VM退出异常的事件由HCR_EL2寄存器位定义。因此,这些可以是系统寄存器访问,包括EL1权限级别可用的访问(例如,TTBR0_ EL1 / TTBR1_EL1,FAR_EL1),缓存和TLB刷新指令,常规异常(中断,包括来自定时器和不支持的 *** 作代码的中断),以及中断和事件等待指令。两级地址转换启用也由该寄存器控制。此外,EL2级还有一个单独的硬件定时器,它允许管理程序配置周期性中断,通常用于启动VM切换,类似于在现代 *** 作系统中切换任务的方式。
切换过程还包括保存当前VM上下文,加载新VM以及将控制转移给它。同时,VM可以以类似于EL0级别的非特权代码执行系统调用的方式执行管理程序调用。为了执行这样的调用,VM将参数放在寄存器中并执行“hvc”指令。这导致以标准方式处理的EL2权限级别的异常。通常,这在调用标准化PSCI协议功能时发生。
还应该提到的是,管理程序可以拦截从VM到可信代码例程的调用(例如,在那里实现非虚拟化环境中的PSCI,并且在最高特权级别EL3处理对它的调用)。ARMv8架构还包含用于提高虚拟化环境性能的其他工具:除了管理程序可以分配的可共享域以减少缓存一致性流量之外,还可以为每个VM分配其自己的标识符或VMID。它的使用使得在切换VM时可以避免“昂贵的”TLB刷新。
原始版本的ARMv8提供了8位标识符,后来扩展为16位。此外,在ARMv8.1中,EL2级别的第二个转换表TTBR1_EL2作为VM主机扩展的一部分添加,因此,类型2的管理程序(它们是主机 *** 作系统的一部分)具有更多可能性。同时,如上所述,全功能虚拟化需要VM与外围设备(网络适配器,存储控制器等)进行交互,同时最小化管理程序参与以及从设备到处理器的交付中断。
系统存储管理单元
ARMv8系统中虚拟化环境的各个方面由两个单元处理:通用中断控制器(GIC)和系统内存管理单元(SMMU)(图3)。SMMU执行I / O地址转换的方式与CPU启动的存储访问相同。该单元支持I / O地址的一级和两级转换。因此,可以在VM和管理程序中使用转换和保护内存区域的优势。因此,允许设备仅对特定存储器地址范围进行读/写。
图3:系统存储管理单元(SMMU)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)