来宾上上下文切换用户进程 运行 时的 ARM 模式

ARM modes when context switching a user process running on guest

据我了解(来自this article),在ARM上,HYP模式下的hypervisor/VMM 运行s,guest OS 运行s在 SVC 模式下,在 USR 模式下在客户机 运行 上进行用户处理。

当来宾 OS 中存在上下文切换时,比如从一个用户进程切换到另一个用户进程,这是否会一直陷阱到 HYP 模式下的 VMM?如果是这样,从 USR 到 SVC 再到 HYP 模式,过程的每个阶段会发生什么?

简短回答:取决于管理程序,体系结构允许这两种方法。

ARM 上的上下文切换会切换页面 Table 并使 TLB 无效。

要切换页面Table,需要修改寄存器TTBR0(user-space部分)或TTBR1(kernel-space部分)。一般为Linux永远不会改变,但一些异国情调的 OS 可能会有所不同),这些可以通过 "co-processor" 指令访问。

要设置 TTBR0,请使用指令 "MRC" 且 CRn = 2。

此类协处理器访问可能会被 HYP 捕获,但不一定。这取决于你是否要求他们被困。这是在 "Hypervisor System Trap Register" 中设置的(HSTR_EL2 on aarch64)。

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