前言
ARM架构虚拟化扩展(Virtualization Extension)是在2010年作为ARMv7架构的一部分引入的,它为虚拟化提供了架构支持。在此之前,ARM系统上的虚拟化解决方案都是基于半虚拟化(paravirtualization)的,并没有被广泛使用。不过随着ARM CPU的性能不断提高,并从智能手机和平板电脑等移动设备向传统服务器进军,人们对ARM虚拟化的兴趣也在增长,因为对ARM来说,支持虚拟化对它的生态建设起到很重要的作用。于是,ARM虚拟化扩展就出现了,它的核心设计目标是构建ARM hypervisor,且它可以运行未经修改的Guest OS,而不增加显著的硬件复杂性,同时保持高水平的性能,而且也符合Popek和Goldberg的定理要求,关于这个定理,大家可以看下《一文读懂虚拟化原理》文章。
CPU虚拟化
虚拟化扩展侧重于在虚拟化上下文中支持现有的ISA,因此ARM没打算改变ISA单个指令语义,而不单独处理架构中限制虚拟化的指令。相反,虚拟化扩展引入了一种新的更高特权处理器执行的模式,这个模式在ARMv7架构首次引入时称为HYP(hypervisor)模式,在ARMv8架构以及之后称为EL2。
ARM架构上的CPU模式如图1所示,包括TrustZone(安全扩展)。TrustZone将模式分为安全和非安全两个世界,这两个世界与CPU模式是正交的。而且在EL3也提供了一种特殊模式:Monitor mode(监控器模式),用于在安全和非安全世界之间切换。如果实现了TrustZone,尽管ARM CPU在安全模式下启动,但ARM的引导加载程序(bootloaders)通常在早期阶段过渡到非安全世界。安全世界用于可信计算场景,如数字版权管理。不过需要注意的是,最新的ARM架构已经支持secure状态下的EL2 Hypervisor了。
图1 ARM处理器模式
不像以前的ARM架构支持多种kernel模式,ARMv8只有一个ke