在 POSIX C 线程中上下文切换之前当前堆栈指针寄存器的值存储在哪里

Where is The Value of the Current Stack Pointer Register Stored Before Context Switching In POSIX C Threads

如果我要在 POSIX 环境中使用 pthreads,并且即将发生上下文切换,则 esp 寄存器的当前值必须存储在某个地方,以便我可以在我将上下文切换回该线程,因为 esp 寄存器的值将被另一个线程保存的 SP 值覆盖。我认为不可能为每个线程单独注册 esp(如果我错了请纠正我)。话虽如此,我想知道在命中上下文切换之前,当前线程的SP值存储在什么数据结构中?

我尝试查找从 pthread_t 的值转换而来的 struct pthread* 的值,但是当我调用某个函数来更改线程的当前 SP 时没有任何变化我正在测试(即比较调用测试函数前后)。

这完全取决于 Posix 库的实现方式。如果线程是由 OS 实现的,则在上下文切换之前,所有寄存器的值都存储在线程的 [process] 上下文块中。

如果线程是在库中实现的,则寄存器必须存储在库管理的某些数据结构中。这样的库实现需要保存所有通用寄存器,但不需要(也不可能)保存进程特定的内核寄存器。