为了实现虚拟化,虚拟机需要控制系统资源。但是实际的系统资源是在hypervisor直接控制之下,为了实现隔离和安全等方面的考虑,不可能让虚拟机直接控制这些系统资源。
比如,虚拟机想根据具体情况去做电源管理。一个解决办法就是利用“陷入和模拟(Trap and Emulate)”模型。当虚拟机想要执行特权指令时,会触发异常,陷入到hypervisor,随后由hypervisor模拟执行。
对于VM来说,一个直接分配的外设是真实的物理设备,并映射到IPA地址空间,所以VM可以直接软件访问该设备。
但是对于VM来说,一个虚拟设备是hypervisor模拟出来的,VM认为可以通过软件直接访问,但实际上是要通过hypervisor的。为了模拟一个外围设备,hypervisor不仅需要知道访问了哪个外设,还需要知道访问了该外设中的哪个寄存器,访问是读还是写,访问的大小,以及用于传输数据的寄存器。
从地址开始,异常模型引入了FAR_ELx寄存器。在处理stage 1 faults时,这些寄存器报告触发异常的虚拟地址。虚拟地址对hypervisor没有帮助,因为hypervisor通常不知道guest OS如何配置其虚拟地址空间。
对于stage 2 faults,还有一个附加寄存器HPFAR_EL2,用于报告中止的地址的IPA。
由于IPA空间由hypervisor控制,因此它可以使用此信息来确定需要模拟的寄存器。
异常模型显示ESR_ELx寄存器如何报告有关异常的信息。对于触发stage2 fault的单个通用寄存器加载或存储,提供了附加的综合征信息。此信息包括访问的大小和源或目标寄存器&#x

本文详细解释了虚拟机如何通过陷入和模拟机制间接控制系统资源,特别是在处理特权指令、虚拟设备访问和内存管理方面。作者讨论了异常模型、寄存器虚拟值的陷阱以及如何优化处理频率高和关键代码中的寄存器访问。
最低0.47元/天 解锁文章
1512

被折叠的 条评论
为什么被折叠?



