arm - ARMv8-A 上的系统寄存器是否按处理器存储?

标签 arm cpu-registers processor arm64 armv8

ARMv8 上的系统寄存器是否按处理器存储?我认为它们不是,这就是为什么它们被称为系统寄存器,但我现在很困惑。

我的理解是,在多核 ARMv8-A 实现上,不同的内核可以随时在不同的异常级别执行。那么,当不同的线程在不同的物理 CPU 上执行,并且每个线程根据需要更改系统寄存器时,会发生什么情况呢?

例如,我正在阅读有关学校项目虚拟化的内容,并看到一些开源代码,并且我看到系统寄存器作为“vCPU”线程上下文的一部分进行保存和恢复。如果一个核心正在执行 vCPU 线程,而另一个核心没有执行,它们的系统寄存器状态是否会发生冲突?

最佳答案

在这种情况下,我不会使用“存储”这个工作 - ARM 核心中的寄存器将被“存储”,以防根据核心状态可以访问同一寄存器的不同副本。

例如,在 Armv8-A 内核中,可从 EL1EL2EL3 访问 TTBR0_EL1 >。 TTBR0_EL2 可从 EL2EL3 访问 - 这是一种对概念系统寄存器 TTBR0 进行建模的方法已存入银行。

但是所有系统寄存器都按照 Registers Armv8, for Armv8-A architecture profile Documentation 中的定义进行操作。存在于 Armv8-a 核心中。

也就是说,在多核系统中,每个核心都有自己的一组系统寄存器,如上面引用的文档中所定义:在这种情况下,“系统寄存器”可以更具体地称为“核心系统寄存器” .

如果您考虑一下,在特定内核中执行的 MSRMRS 指令确实会影响同一内核的通用寄存器和系统寄存器:

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/

相关文章:

assembly - 错误 : A1163E Unknown Opcode R0, 期望操作码或宏指令位于左列

memory - 为什么 16 位机器上的 20 个地址空间可以访问 1 兆字节而不是 2 兆字节?

unix - 如何使 unix 命令使用多个 CPU

android - armeabi 和 armeabi-v7a 文件夹

android - 如何在 Android 上更快地将 RGB565 转换为 YUV420SP?

debugging - 在调试期间在 IDE 中显示 printf 消息

assembly - 处理控制传输时的堆栈字节分配

assembly - 使用段寄存器(今天)有什么好处?

windows - "ABI-volatile"寄存器被视为跨函数调用的非 volatile

java - LibGdx : Using setInputProcessor(stage) in different classes