在虚拟化的情况下,TTBR0 / 1的状态对多个客户来说

时间:2013-12-01 18:43:58

标签: arm cortex-a

TTBR0 / 1是CP15寄存器,由PL1 OS编程。现在如果PL1 OS1编程TTBR0然后在同一个内核上调度PL1 OS2,那么PL1 OS2会看到TTBR0 / 1的值设置OS1

我确信在某种程度上保持了理智,以下是否属实?

在guest虚拟机之间切换时,虚拟机管理程序会将所有cp15 regs保存在guest虚拟机上下文中,并在切换guest虚拟机之前进行恢复

如果是,那么对于管理程序来说它不会耗费时间,因为cp15 regs的列表会非常长

1 个答案:

答案 0 :(得分:2)

您可以阅读ARMv7-AR架构参考手册中的寄存器说明 - 可从here注册下载。

总之,是的 - TTBR0 / TTBR1只存在于一个副本(每个)中,当切换来宾时由管理程序更新。管理程序本身具有自己使用的VTTBR。这当然是唯一可以容纳无限数量客人的方式。 (AArch64模型有些不同,但基本相同的事实仍然存在。)

显然,这是一项代价高昂的操作,并不是切换客人所需的唯一操作,因此您当然不希望太频繁地执行此操作。但是需要保留的寄存器列表可能比您想象的要短。

您可以看到KVM here的实际实施。