ARMv8 上的系统寄存器是否按处理器存储?我认为它们不是,这就是为什么它们被称为系统寄存器,但我现在很困惑。
我的理解是,在多核 ARMv8-A 实现上,不同的内核可以随时在不同的异常级别执行。那么,当不同的线程在不同的物理 CPU 上执行,并且每个线程根据需要更改系统寄存器时,会发生什么情况呢?
例如,我正在阅读有关学校项目虚拟化的内容,并看到一些开源代码,并且我看到系统寄存器作为“vCPU”线程上下文的一部分进行保存和恢复。如果一个核心正在执行 vCPU 线程,而另一个核心没有执行,它们的系统寄存器状态是否会发生冲突?
最佳答案
在这种情况下,我不会使用“存储”这个工作 - ARM 核心中的寄存器将被“存储”,以防根据核心状态可以访问同一寄存器的不同副本。
例如,在 Armv8-A 内核中,可从 EL1
、EL2
和 EL3
访问 TTBR0_EL1
>。 TTBR0_EL2
可从 EL2
和 EL3
访问 - 这是一种对概念系统寄存器 TTBR0
进行建模的方法已存入银行。
但是所有系统寄存器都按照 Registers Armv8, for Armv8-A architecture profile Documentation 中的定义进行操作。存在于 Armv8-a 核心中。
也就是说,在多核系统中,每个核心都有自己的一组系统寄存器,如上面引用的文档中所定义:在这种情况下,“系统寄存器”可以更具体地称为“核心系统寄存器” .
如果您考虑一下,在特定内核中执行的 MSR
和 MRS
指令确实会影响同一内核的通用寄存器和系统寄存器:
MRS x0, TTBR0_EL1 // Move TTBR0_EL1 into x0
MSR TTBR0_EL1, x0 // Move x0 into TTBR0_EL1
关于arm - ARMv8-A 上的系统寄存器是否按处理器存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60679003/