根据ARM 文档,线程 ID 寄存器像TPIDR_EL0
or TPIDR_EL1
,
提供用于存储软件线程和进程 ID 的位置,以用于操作系统管理。这些寄存器对处理器行为没有影响。
为什么有人想将线程 ID 存储在一个特殊的寄存器中?ARM 处理器是否需要线程在内存中具有特殊的结构,就像 MMU 一样?线程对 ARM 来说是不是特别的东西,是 ARM 期望在某个地方找到的东西?或者我可以在不使用这个寄存器的情况下(有效地)实现线程吗?
我问是因为我在 Fuchsia OS 的 Zircon Kernel 上找到了这段代码:
static inline void arch_set_current_thread(Thread* t) {
__arm_wsr64("tpidr_el1", (uint64_t)&t->arch_.thread_pointer_location);
__isb(ARM_MB_SY);
}
在启动时它会创建一个线程并将其指针存储在tpidr_el1