我的理解(来自this article)在ARM上,虚拟机管理程序/ VMM以HYP模式运行,来宾操作系统以SVC模式运行,并且来宾上的用户进程以USR模式运行。
如果客户操作系统中存在上下文切换,例如从一个用户进程切换到另一个用户进程,是否会在HYP模式下一直陷入VMM?如果是这样,在从USR到SVC到HYP模式的过程的每个阶段会发生什么?
答案 0 :(得分:1)
简短回答:取决于虚拟机管理程序,架构允许这两种方法。
ARM上的上下文切换将切换页表并使TLB无效。
要切换页面表,您需要修改寄存器TTBR0(用户空间部分)或TTBR1(内核空间。通常用于Linux,它永远不会改变,但某些奇特的操作系统可能会有所不同),可通过&#34访问;协处理器"指令。
要设置TTBR0,请使用指令" MRC" CRn = 2。
这种协处理器访问可以被HYP捕获,但不一定。这取决于你是否要求他们被困。这是在" Hypervisor System Trap Register"中设置的。 (aarch64上的HSTR_EL2)。
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0488d/CIHJFIHA.html
TLB失效指令和缓存维护操作也作为ARMv7上的协处理器访问指令实现(技术上也在ARMv8上,但架构参考手册建议使用人类可读的助记符)。例如," TLBIALL"是协处理器CRn8,因此您需要在HSTR_EL2中设置T8位。
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0438i/CIHECHCD.html